Mammouth du PHP |
19672 Messages
12 janv. 2007, 23:30
Comme invité, tu ne peux pas éditer ton message, je l'ai donc fait pour toi, penses-y la prochaine fois.
Ton problème maintenant :
-1- Ton code est un peu fouillis et illisible, essaye de faire ça proprement, tu auras ultérieurement beaucoup moins de problèmes pour relire et trouver un bug éventuel;
-2- Tu fais une requête puis une seconde que tu exécute en boucle : et comme dans la seconde boucle tu n'as pas de clause de tri sur la catégorie, tu obtiens tous les produits même si ils ne correspondent pas à la catégorie définie dans la première boucle.
On va simplifier : une seule requête et une seule boucle. Exemple, suis les commentaires, tu devrais t'y retrouver :
<?php
/* -1- : on crée la requête SQL */
$sql = "SELECT c.nom_categorie, p.nom_produit ".
"FROM categorie AS c, produits AS p ".
"WHERE c.id = p.idcategorie ".
"ORDER BY p.idcategorie;";
/* -2- : on exécute la requête */
$sqlprod = mysql_query($sql);
/* On établit un point de repère pour déterminer les changements de catégories */
$cat = "";
while(false != ($result = mysql_fetch_array ($sqlprod)))
{
/**
* Si ma variable repère $cat n'a pas la même valeur que la
* catégorie retournée, alors c'est qu'on aborde une nouvelle
* catégorie : on ajoute la ligne pour la catégorie.
*/
if($result['nomcategorie'] != $cat)
{
/**
* On met à jour la variable $cat : de cette manière, au
* prochain tour, si on est toujours dans la même catégorie, on
* affichera pas cette ligne
*/
$cat = $result['nomcategorie'];
?>
<tr>
<th><?php echo $result['nom_categorie']; ?></th>
</tr>
<?php
}// Fin du test sur la catégorie
/* On affiche le produit */
?>
<tr>
<td><?php echo $result['nom_produit'] ?></td>
</tr>
<?php
} /* Fin de la boucle */
?>
Regarde bien la requête modifiée : j'ai ajouté une clause ORDER BY de façon à trier tous les produits par catégorie : c'est important pour le fonctionnement de ce code.
Teste ça et reviens avec le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse 