- Ymox,
Pouahlala, comment je peux faire ça ? Ne serait-ce que "regarder" si le produit courant est le même que le produit précédent
Ben il faut faire en sorte que le programme se souvienne de ce qu'il avait manipulé juste avant… Avec une variable, par exemple
Actuellement il sont classé par catégorie, pour que ça fonctionne avec ta méthode il faudrait qu'ils soient classé par produit en plus si je comprends bien.
Là, j'avoue que ça dépend de ce que tu souhaites. Mais tu as dit vouloir une ligne avec le produit et toutes ses catégories, du coup, oui.
Je pensais faire une boucle dans une boucle mais j'ai vite renoncer en voyant le résultat
Tu n'en as effectivement pas besoin, il suffit de bien réfléchir à qu'est-ce qu'il se passe dans la boucle principale.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php $reponse = $bdd->query(/* La requête */); /* On initialise la variable comme étant une chaîne vide en dehors de la boucle… */ $precedent = ''; while ($donnees = $reponse->fetch()) { /* … parce qu'on en a besoin ici pour tester si on a changé de produit. Et * à la première itération, c'est presque le cas. Le fait d'avoir défini * comme une chaîne vide avant permet de faire en sorte que l'ID du * premier produit est considéré comme différent de celui d'avant qui, * pourtant n'existe pas */ if ($precedent != $donnees['MPL_product_id']) { if ($precedent !== '') { echo '</td></tr>'; } echo '<tr><th>' . htmlspecialchars($donnees['MPL_product_name']) . '</th></tr>'; } /* On affiche de toute manière la catégorie */ echo htmlspecialchars($donnees['MPL_Category_name']); /* Si on avait mis cette ligne en début de boucle, on aurait une condition * qui serait toujours respectée, donc on n'afficherait jamais le nom de * l'article. Et là, donc, on aura le nom du produit de la boucle * précédente dans la boucle suivante (tu suis ?) */ $precedent = $donnees['MPL_Category_id']; } $reponse->closeCursor(); |
Une gestion d'éléments catégorisés (ici dans un tableau)