Page 1 sur 1

Requete MysSql et Menu en liste

Posté : 04 oct. 2005, 12:31
par ptinicola
Bonjour,
Je cherche à créér un menu en liste qui agit avec une Bdd.
Dans Ma base j'ai une table "cat" avec les champs "nom" & "id_cat", j'ai une autre table "doss" avec les champs "id_doss", "titre", "texte", "icone", "id_cat"...
Je voudrais que pour mon menu il y ai 2 niveaux de listes : niveaux 1 les "cat" & pour chaque "cat" la liste des "doss" correspondant.
J'ai un début de code (ci-dessous), quelqu'un peut-il m'aider à le corriger ? Merci.
<?php
    //connection au serveur:
	$cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
  
    //sÈlection de la base de donnÈes:
    $db = mysql_select_db( "metalobil" ) ;
  
    //requÍte SQL:
    $sql = "SELECT nom, titre, texte, icone
	      FROM cat, doss
	      WHERE cat.id_cat = doss.id_cat
	      ORDER BY nom" ;
  
    //exÈcution de la requÍte:
    $requete = mysql_query( $sql, $cnx ) ;
  
    //affichage des donnÈes:
   while( $result = mysql_fetch_object( $requete ) )
    { 
       echo("<div id=\"nav\">\n") ;
       echo("<ul class=\"level1\">\n") ;
       echo("<li class=\"submenu\">".$result->nom."\n") ;
       		echo("<ul class=\"level2\">\n") ;
       		echo("<li class=\"submenu\">".$result->titre."</li>\n") ;
       		echo("</ul>\n") ;
       		echo("</li>\n") ;
       echo("</ul>\n") ;
    }
  ?>

Posté : 04 oct. 2005, 12:35
par pjl
le principe, c'est de mettre une condition. Tant que la catégorie n'a pas changé, tu affiches uniquement le dossier.
Si la catégorie change, tu l'affiches.

Posté : 04 oct. 2005, 12:38
par ptinicola
Merci pour la rapidité de ta réponse.
Je suis débutant en php et pas encore familié avec les conditions. Peux-tu me donner un exemple, svp ?

Posté : 04 oct. 2005, 12:47
par mere-teresa
Tant que la catégorie n'a pas changé, tu affiches uniquement le dossier.

tant que ==> while()

Posté : 04 oct. 2005, 12:54
par ptinicola
Je suis désolé mais je suis vraiment débutant, je comprend le principe mais c'est l'écriture qui me pose problème. Comment écrire "tant que la catégorie ne change pas" ? Est-ce que je doit faire une boucle supplémentaire pour les "doss". Une correction de mon code m'aiderai mieux à comprendre.
merci encore

Posté : 05 oct. 2005, 11:17
par ptinicola
Re bonjour,
Sur un autre forum on m'a corriger mon code de la manière suivante :
<?php 
//connexion au serveur: 
$cnx = mysql_connect(SERVEUR, USER, PASS, DB) or die('connexion impossible'); 

// sélection de la base de données: 
$db = mysql_select_db( 'metalobil' ) or die ('sélection impossible de la table'); 

//requête SQL: 
$sql = 'SELECT nom, titre, texte, icone 
FROM cat, doss 
WHERE cat.id_cat = doss.id_cat 
ORDER BY nom' ; 

//exécution de la requête: 
$requete = mysql_query( $sql, $cnx ) ; 

//affichage des données: 
//initialisations 
?> 
<div id="nav"> 

<?php 
$nom=""; 
while( $result = mysql_fetch_object( $requete ) ){ 
    if($nom!=$result->nom){ 
        if ($nom!=""){ 
?> 
        </ul> 
    </ul> 
<?php 
            } //endif ($nom!="") 
        $nom=$result->nom; 
?> 
    <ul class="level1"> 
        <li class="submenu"><?php echo $result->nom; ?></li> 
        <ul class="level2"> 
<?php 
        }//end if ($nom!=$result->nom) 
?>         
            <li class="submenu"><?php echo $result->titre; ?></li> 
<?php 
    }//end while 
?>     
        </ul> 
    </ul> 
</div> 
mais quand je le teste il m'affiche :

Code : Tout sélectionner

nom){ if ($nom!=""){ ?> nom; ?> nom; ?> nom) ?> titre; ?>
Je pense qu'il y a un problème à ce niveau :
<?php 
$nom=""; 
while( $result = mysql_fetch_object( $requete ) ){ 
    if($nom!=$result->nom){ 
        if ($nom!=""){ 
?> 
        </ul> 
    </ul> 
Il n'y a pas d'ouverture <ul>, ni de <li>, mais j'ai tout essayé (ajouter,supprimer...) sans succès.
Quelqu'un peut-il maider...svp