| SladeWilson a întrebat:

Cine stie PHP cu MySql? Vreau sa ma ajute sa imi explice ceva. Va rog frumos.

Răspuns Câştigător
anonim_4396
| anonim_4396 a răspuns:

Foreign key-ul merge doar pe primary key-ul din alt tabel. Engine-ul MySQL trebuie sa fie InnoDB, nu cumva MyISAM.

Mai intai inserezi soferi, apoi masini, in pagini PHP diferite.
Cu soferii trebuie sa descurci. La masini insa eu as face asa interfata formularului:
- am un camp text pentru denumirea masinii;
- am un drop-down list(< select> tag in HTML) avand ca valori(option value) id-urile tuturor soferilor, chiar daca tu vei afisa numele lor(ce e intre tag-urile < option>, </option> ). Bineinteles ca optiunile alea din select le preincarci prin PHP intr-un while sau foreach...
- am un buton de submit.

Si acum stii ce se intampla dupa submit, retii valorile din formular si faci o interogare de inserare.

Si cand vrei sa afisezi pe site vei avea o interogare SELECT * FROM soferi, masini WHERE soferi.id = masini.sofer_id.

La modul cel mai simplu structura fiecarui tabel ar arata cam asa:

soferi(id, nume)
masini(id, denumire, sofer_id)
Unde id in fiecare tabel e primary key cu auto_increment.

masini(sofer_id) e foreign key catre soferi(id).

Spor! Daca nu intelegi ceva mai intrebi. Sau daca n-am inteles eu ce vrei tu exact sa faci.

| SladeWilson explică (pentru anonim_4396):

CREATE TABLE soferi
(id_sofer INT AUTO_INCREMENT PRIMARY KEY,
nume TEXT,
prenume TEXT); # MySQL a dat un set de rezultate gol (zero linii).




CREATE TABLE masini
( id_masina INT AUTO_INCREMENT PRIMARY KEY,
id_sofer INT,
modelMasina TEXT,
tip TEXT,
FOREIGN KEY (id_sofer) REFERENCES soferi(id_sofer));

Cand am bagat urmatorul select:

SELECT countstar from soferi, masini
where modelMasina='Ferrari';

Mi-a aratat ca fiecare sofer are Ferrari cand ar fi trebuit unul singur sa aiba Ferrari.

Am bagat si :
SELECT * FROM soferi, masini WHERE soferi.id_sofer = masini.id_sofer;
dar nu imi afiseaza nimic, desi unde e greseala.

| SladeWilson explică (pentru anonim_4396):

Ce nu ti-am spus este ca pe partea cand imi afiseaza id_sofer de la masini este null.

| anonim_4396 a răspuns (pentru SladeWilson):

La prima interogare nu ma bag pentru ca nu stiu ce vrei sa faci, oricum zici ca nu-ti da ce trebuie.

Iar la a doua interogare, am uitat sa iti spun ca mai trebuie inca o conditie, poate vrei sa afisezi toate masinile conduse de un sofer, dar problema poate fi si din PHP daca n-ai scris ceva corect.

Uite cum as afisa...
//faci conexiunea cu baza de date si o selectezi pe cea de lucru.
$query="SELECT * FROM soferi, masini WHERE soferi.id_sofer = masini.id_sofer AND soferi.id_sofer = $id specificat de tine ";
$rezultat=mysql_query($query);
echo 'Acest sofer conduce urmatoarele modele de masini: ';
if(mysql_num_rows($rezultat)>0)
while($row=mysql_fetch_assoc($rezultat)){
echo $row['modelMasina'].' < br>';
}

Id-ul soferului il specifici cel mai usor prin URL(iei un $_GET['sofer']);
Daca ai un site cu URL de forma: http://localhost/sofer.php?sofer=3;
Vei lua intr-un $_GET[] acel 3(care e id-ul) si scriptul de mai sus va rula corect, zic eu.
Cum ajungi la acel URL? Pai doar n-o sa te apuci sa scrii manual asta. In site-ul tau mai faci o pagina soferi.php in care-i afisezi pe toti din baza de date, doar pe ei, dar ii pui in link-uri

$query="SELECT * from soferi";
$rezultat=mysql_query($query);
if($rezultat)
while($row=mysql_fetch_array($rezultat))
echo //link din id-ul lui: $row[id_sofer] iar ca text pentru link vei afisa numele si prenumele: $row['nume'] si $row['prenume'].

Apropo, trebuia sa le pui in MySQL de tip varchar(100 caractere) cam asa... TEXT e prea mare:65535 caractere e prea mult. TEXT pui la comentarii pe site, iar LONGTEXT la articole enorme, eventual carti.

Sper ca ai inteles mai bine acum... daca nu, mai intrebi ce nu iese...sau ce n-am inteles eu ca vrei de fapt sa afisezi.

| anonim_4396 a răspuns (pentru SladeWilson):

Asta cu null, nu stiu cum faci inserarea... eventual spune-mi mai bine ce vrei sa faci cu acest exercitiu(site) si poate ti-l fac eu...

| SladeWilson explică (pentru anonim_4396):

Deci eu trebuie sa aflu toate masinile Ferrari care sunt conduse de masini. La partea de php nu am probleme. Am aceeasi problema la baza da date in care nu imi aloca masina unui sofer si mi-o aloca la toti soferii.

| anonim_4396 a răspuns (pentru SladeWilson):

Mai reformuleaza. «Deci eu trebuie sa aflu toate masinile Ferrari care sunt conduse de masini»

| SladeWilson explică (pentru anonim_4396):

Scz, neatent. Masinile ferrari conduse de soferi.

| anonim_4396 a răspuns (pentru SladeWilson):

Pai si mai lipseste ceva. Cum adica conduse de soferi? Poate conduse de un anumit sofer suna mai corect...iar asta ti-am spus mai sus cum poti face...la ce ti-am scris eu pana acum ar cam trebui sa mearga struna, insa nu stiu pe unde mai intampini probleme.

| SladeWilson explică (pentru anonim_4396):

Stiu si eu ca trebuie sa mearga. Poate imi zice profesorul cum merge.

| anonim_4396 a răspuns (pentru SladeWilson):

Tu lucrezi cu phpMyAdmin de la un server WAMP sau direct in linie de comanda la MySQL?

| SladeWilson explică (pentru anonim_4396):

Lucrez cu phpMyAdmin de la un server XAMP.

| anonim_4396 a răspuns (pentru SladeWilson):

Si pana cand ai «deadline»? E urgenta treaba asta sau faci ce poti cand ai timp, mai mult fiind ceva ce faci in timpul liber? Daca e ti-l fac eu diseara daca e important, ti-l trimit pana pe la 23:00 asa. Am vazut ca ai lasat un mail pe site. Tu spune-mi doar ce trebuie sa faca site-ul, adica ce meniu sa aiba, ce vrei sa inserezi si sa afisezi. Vad ca ultima oara vrei sa afisezi si soferi care conduc un anumit model de masina...si na, pare sa implice si alt tip de interfata cu site-ul, nu doar o interogare diferita, zic eu.

| SladeWilson explică (pentru anonim_4396):

Nu am deadline. Desi trebuie sa afisez soferii care conduc o masina.

| anonim_4396 a răspuns (pentru SladeWilson):

Ok, hai ca incerc sa-ti trimit azi.

| anonim_4396 a răspuns (pentru SladeWilson):

Gata. Ti l-am trimis pe mail. Sper ca am facut ce voiai tu sa faci...bafta si spor la studiat in continuare!

| SladeWilson explică (pentru anonim_4396):

Nu stiu daca ai trimis corect. olivercuintescu@yahoo.com e mailul meu

| anonim_4396 a răspuns (pentru SladeWilson):

Grozav...pai si acum 2 saptamani ai spus cata.pretty@yahoo.com Dar de ce n-ai spus dinainte, doar nu te intrebai: "da' pe ce mail zice ăsta că-mi trimite?" Eu pe ala ti l-am mai observat tot la o intrebare despre baze de date.
Dau un forward acum big grin

22 răspunsuri:
anonim_4396
| anonim_4396 a răspuns:

Pai pune intrebarea la obiect!

| SladeWilson explică (pentru anonim_4396):

Vrea usa creez o baza de date cu tabele sofer si masini. Si inserez sofer si masina in php. Faza e ca in baza de date nu merge sa bag seconadry key la masini. Imi adauga fiecare masina la toti soferii, nu la soferul care imi doresc.Ai vreo idee cum se face altfel?

| jeek0 a răspuns:

Pune intrebarea, poate e mai usor sa vada cineva ce anume doresti

| SladeWilson explică (pentru jeek0):

Vrea usa creez o baza de date cu tabele sofer si masini. Si inserez sofer si masina in php. Faza e ca in baza de date nu merge sa bag seconadry key la masini. Ai vreo idee cum se face altfel?

| SladeWilson explică (pentru SladeWilson):

Imi adauga fiecare masina la toti soferii, nu la soferul care imi doresc.