Variable dans une requete sql et boucle while imbriqué.

Petit nouveau ! | 2 Messages

27 oct. 2009, 02:50

Bonjour,

J'aurais besoin d'un peu d'aide.
Tout d'abord j'ai une table produits dont les champs sont:
Reference(auto-incrementé)/Categorie/SCategorie/Marque/Prix/Photo.

exemple de produit: 5; Homme ; Besace ; Puma ; 15€ ;xxx.jpg

Je souhaiterais afficher tout les produits d'une categorie en les separant par sous-categorie.
Débutant en php j'ai encore du mal.

Voici le code:

Code : Tout sélectionner

<?php connectDB(); $sql= 'SELECT distinct SCategorie FROM produits WHERE Categorie="Homme" ORDER BY SCategorie'; $req= mysql_query ($sql) or die ('Erreur SQL!'.$sql.'<br/>' .mysql_error()); echo' <br><br>Tout les sous catégories du rayon Homme<br><br>'; while ($res=mysql_fetch_array($req)) { $Scat=$res[0]; $sql2='SELECT * FROM produits WHERE Categorie="Homme" AND SCategorie= $Scat'; $req2= mysql_query ($sql2) or die ('Erreur SQL!'.$sql2.'<br/>' .mysql_error()); echo $Scat; echo '<br>'; echo '<div class="cadreG">'; while ($data = mysql_fetch_array($req2)) { echo '<div class="object">'; echo '<div class="marque">'.$data['Marque'].'</div>'; echo '<div class="photo"><img src="'.$data['Photo'].'"></div>'; echo '<div class="prix">'.$data['Prix'].'</div></div>'; }; echo '</div>'; } ?>
Le résultat que j'ai obtenu c'est seulement le listage des sous catégories pour la catégorie Homme. La 2e boucle while est totalement ignorée.
Pouvez vous m'aider je coinces. En outre je suis preneur de tout conseil pour optimiser le code. :)

Eléphanteau du PHP | 27 Messages

27 oct. 2009, 10:57

$sql2='SELECT * FROM produits WHERE Categorie="Homme" AND SCategorie= $Scat';  // pas bien
$sql2="SELECT * FROM produits WHERE Categorie=\"Homme\" AND SCategorie= $Scat";  // bien
$sql2='SELECT * FROM produits WHERE Categorie="Homme" AND SCategorie='.$Scat;  // bien aussi
Entre guillements simples, un mot commençant par $ n'est pas interpretté comme une variable !
Si tu veux garder ta chaine entre guillemets simples, tu dois donc sortir ta variable de la chaine et la concaténer au bout avec l'opérateur "."
(On pourrait pas le tagger en gros en haut du forum ça ? Ca commence a devenir un peu trop récurrent comme erreur...)

En utilisant un editeur avec une bonne coloration syntaxique, tu verras facilement ce genre de problèmes

++

Petit nouveau ! | 2 Messages

27 oct. 2009, 19:24

Merci beaucoup de ton aide !
ça fonctionne nickel!
:D