[RESOLU] Probleme de requette PHP / MYSQL

Petit nouveau ! | 5 Messages

23 juil. 2008, 16:54

Bonjour,

J'ai une table "taille" ou dedans j' un champ ID et un champ TAILLE
J'ai également une table "produits_taille" ou dedans j'ai un champs ID_PRODUIT et un champ ID_Taille.
Cette table me permet de faire la liaison produit/taille car un produit peut etre decliné en plusieurs taille.

Dans l'administration de mon site, il faut que je puisse afficher une liste de toutes les tailles (table "taille") mais que les tailles utilisés par le produit soit cochés

Voici ci dessous mon caode, probleme, il ne me coche qu'une seule case même si dasn ma table un produit est décliné en plusieurs tailles.

Mon code :

Code : Tout sélectionner

$taille2_def = "SELECT * FROM `taille`"; $taille2_def2 = mysql_query ($taille2_def) or die ("Erreur : ".$taille2_def); $taille_def = "SELECT * FROM `produits_taille` WHERE `id_produit` ='".$id."'"; $taille_def2 = mysql_query ($taille_def) or die ("Erreur : ".$taille_def); $taille_def3 = mysql_fetch_array ($taille_def2); while ($taille2_def3 = mysql_fetch_array ($taille2_def2)) { $taille_list = $taille_def3["id_taille"]; if ($taille2_def3["id"]==$taille_list) { // affiche avec la case cochée $affiche_taille.='<input name="taille" type="checkbox" value="'.$taille2_def3["id"].'" checked/>'.$taille2_def3["taille"].'<br />'; } else { // Affiche avec la case non cochée $affiche_taille.='<input name="taille" type="checkbox" value="'.$taille2_def3["id"].'" />'.$taille2_def3["taille"].'<br />'; } }
Merci pour votre aide.
Modifié en dernier par Donald08 le 24 juil. 2008, 11:17, modifié 1 fois.

Eléphant du PHP | 67 Messages

24 juil. 2008, 10:32

Commence par faire afficher les valeur de tes variable a chaque itération de ta boucle et tu verra surement d'ou vient le problème (je ne suis pas sur que ton algo soit juste).
Sinon a ta place j'aurait plustot fait autrement:
- un foreach sur le resultat de ta requete (sur la table produits_taille) puis récupéré le nom de la taille en fonction de l'id pour chaque ligne pour faire au plus simple du point de vu sql (si vraiment tu est juste en SQL et que tu ne veut pas changer tes requetes).
- Une solution plus propre serai de faire une jointure entre tes deux table dans ta requete sql ce qui te simplifiera beaucoup le traitement des données.

Petit nouveau ! | 5 Messages

24 juil. 2008, 10:42

Merci pur ta réponse.

Il y a 2 trucs que je n'ai pas vu lors de ma formation par manque de temps :

Foreach et les jointurs

:( je pleurs

Eléphant du PHP | 67 Messages

24 juil. 2008, 10:53

Pour le foreach c'est tout simple: à la place d'un while() tu met foreach() et tu lui passe une tableau, il vas alors parcourir ton tableau et effectuer le code entre {} pour chaque élément.
ex:
                foreach($table as $id)
	{
	        echo $id;//affichera chaque élément de $table
	}
Mais plus je regarde la premiere solution que je t'ai proposé moins elle me parrai élégante car elle te fait faire plusieurs requetes SQL alors que tu peut tout faire avec une seul.

Donc pour la jointure c'est pas tres compliqué non plus, ca consiste à joindre (relativement normal non ^^) deux tables, par exemple dans ton cas en fesant une jointure de la bonne facon tu optiendra une table identique à ta table produits_taille mais avec une colonne en plus reseignant le nom de la taille.

cf:http://sqlpro.developpez.com/cours/sqlaz/jointures/

Petit nouveau ! | 5 Messages

24 juil. 2008, 11:16

Ok, merci, je vais aller faire un tour vers le lien que tu m'a donné.