PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 03-03-2010 22:08:25

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Insérer une requête dans une boucle for

Bonjour à tous,

afin de mettre en place la navigation sur mon site, je butte devant un problème que je n'arrive pas à résoudre.
ma requête affiche des catégories (donc onglets) qui sont enregistrés dans la table categories. Il y'a également une table "categories_groupes" qui indique si les categories de la table categories ont un lien de parenté ou non (me permettant ainsi de faire des catégories principales ou secondaires...)

mon problème est donc le suivant :
je fais une requête select sur la table categorie et sélectionne les catégories que je souhaite. Je les affiche grâce à une boucle :

     
<ul>
<?php
$sql -> requete("Select id_categorie, nom
      FROM categories  
    order by id_categorie desc"
,1);
      $nbr_r = $sql -> nbr_rows(1);
      if($nbr_r <= 0)
        echo "Aucun article posté dans cette catégorie.";

      for($i=0;$i<$sql -> nbr_rows(1);$i++)
      {
      $element = $sql -> farray(1);  
echo "<li>".$element['nom']."</li>\n"; 
}
?>
</ul>
 

cette premiere requete fonctionne tres bien, mais je souhaitais donc afficher un "sous"menu de la sorte :

     
<ul>
<?php
$sql -> requete("Select id_categorie, nom
      FROM categories  
    order by id_categorie desc"
,1);
      for($i=0;$i<$sql -> nbr_rows(1);$i++)
      {
      $element = $sql -> farray(1);  
echo "<li>".$element['nom']."";
echo "<ul>";
$sql -> requete("Select id_categorie, nom
      FROM categories
where id_parent=1  
    order by id_categorie desc"
,1);
      for($i=0;$i<$sql -> nbr_rows(1);$i++)
      {
      $element = $sql -> farray(1);  
echo "<li>".$element['nom']."</li>\n";   
}
echo "</ul>";
echo "</li>";
</ul>
 

le probleme est que ce code ne fonctionne donc pas...  j'ai testé d'autres fonctionnalités mais sans succès...

merci pour votre éventuelle aide.

Laurent.

Dernière modification par laurent (04-03-2010 09:16:02)

Hors ligne

#2 04-03-2010 08:39:07

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Insérer une requête dans une boucle for

laurent a écrit :

le probleme est que ce code ne fonctionne donc pas...

Mais encore ?????

Je vois bien qu'il n'y a aucun filtrage de la deuxième requête par l'identifiant de la première, mais c'est quand même à toi de nous fournir un diagnostic avec le plus d'éléments possibles.

Personnellement je serais passer par une seule requête en autojointure de la table sur elle-même avec gestion de rupture en PHP dans le parcours du résultat.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 04-03-2010 09:48:29

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Insérer une requête dans une boucle for

merci maljuna,
après plusieurs recherches, et avoir feuilleter mes bouquins big_smile j'ai trouvé cette solution qui fonctionne (mais qui je pense n'est pas optimale...)

$sql -> requete("Select categories.id_categorie, nom, description
FROM `categories`"
,1);
for($i=0;$i<$sql -> nbr_rows(1);$i++)
  {
    $catParent = $sql -> farray(1);
    echo "<li><a href=\"\" class=\"cat".$catParent['id_categorie']."\">".$catParent['nom']."</a><ul>";
   
    $sql -> requete("Select categories.id_categorie, id_parent, nom, description
    FROM `categories`, `categories_groupes`
    WHERE categories.id_categorie = categories_groupes.id_categorie
    AND id_parent="
.$catParent['id_categorie']."
    "
,2);
    for($i=0;$i<$sql -> nbr_rows(2);$i++)
      {
        $subCat = $sql -> farray(2);
        echo "<li><a href=\"\" class=\"cat".$subCat['id_parent']."\">".$subCat['nom']."</a></li>";
      }
     echo"</ul></li>";
  }

ça fonctionne mais je vais tenter de l'améliorer

Dernière modification par laurent (04-03-2010 09:50:08)

Hors ligne

#4 04-03-2010 09:54:32

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Insérer une requête dans une boucle for

Au passage, depuis 1992, les jointures SQL se font avec

[INNER] [[LEFT][RIGHT]OUTER] JOIN.

Il serait temps de s'y mettre.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums