While imbriqués

Fermé
beru002 Messages postés 497 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 28 janvier 2016 - 19 juil. 2011 à 16:28
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 19 juil. 2011 à 21:12
Bonjour,
Je suis en train de m'énerver sur un truc qui pourtant ne paraît pas bien compliqué, à la base... mais l'habit ne fait pas le moine!
Voilà, j'ai une table "livres". Dans cette table, tous les champs du livre: titre, auteur, etc...
Sur une page de mon site, j'aimerais les ranger par "theme"... avec le titre du thème, bien sûr!
Avec SELECT DISTINCT theme, pas de souci, j'ai mes titres... mais ensuite, sous chaque titre "thème1", thème2", etc... j'aimerais avoir la liste des livres qui ont ce thème... et c'est là que je bloque. à priori, il ne suffirait que de refaire un while, avec
$theme=$donnees['theme']
SELECT * FROM livres WHERE theme=$theme

mais ça buggue... il ne veut pas de fetch là-dessus. peut-être y a-t-il une manière particulière d'embriquer les while? je n'ai trouvé de solution un peu nulle part, donc je viens poser ma question ici.

voici, plus précisément, mon code:

<?php
$reponse=$bdd->query('SELECT DISTINCT theme FROM livres ORDER BY theme'); 

while ($donnees=$reponse->fetch())
{ ?>
<h1 id="ancre_<?php echo stripslashes($donnees['theme']); ?>"><?php echo stripslashes($donnees['theme']); ?></h1><br /><br />
<!--ceci affiche les titres des parties avec des ancres-->

<?php
$theme=$donnees['theme'];
$requete=$bdd->query('SELECT * FROM livres WHERE theme=$theme');

while ($donnees2=$requete->fetch()) {

echo $donnees2['titre']. '<br />';
}
$requete->closeCursor();
}
$reponse->closeCursor();
?>



1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
19 juil. 2011 à 21:12
Bonjour,

Deux problèmes dans cette ligne :
$requete=$bdd->query('SELECT * FROM livres WHERE theme=$theme');

1) les simples quotes ' autour de la requête empêchent PHP d'interpréter la variable $theme. Il faut plutôt utiliser "

2) Dans la requête SQL, une chaîne de caractères doit être délimitée par des simples quotes '

Du coup, cette ligne devient :
$requete=$bdd->query("SELECT * FROM livres WHERE theme='$theme'");

Xavier

PS : il y avait d'autres possibilité, notamment en ne faisant qu'une seule boucle... mais bon ^^
0