3 Liste déroulante lié

rafale69300
Invité n'ayant pas de compte PHPfrance

17 juin 2009, 10:21

Sur un tutorial du site, j'ai trouvé comment faire deux liste déroulante en php et je l'ai adapté à ma situation cela marche très bien, maintenant j'essaye de rajouter une 3 ème liste liée à la 2ème mais je n'y arrive pas. je vous laisse ce que j'ai fait. Merci de votre aide.
<?php 

/* On récupère si elle existe la valeur du batiment envoyée par le formulaire */ 
$idr = isset($_POST['bat'])?$_POST['bat']:null; 

if(isset($_POST['ok']) && isset($_POST['salle']) && $_POST['salle'] != "") 
{ 
    $bat_selectionnee = $_POST['bat']; 
    $salle_selectionne = $_POST['salle']; 
	$porte_selectionne = $_POST['porte']; 
} 
?> 

<h3>
  <?php 
 
    $sql1 = "SELECT `id_bat`, `nom_bat`". 
    " FROM `batiments`". 
    " ORDER BY `id_bat`"; 
    $rech_bat = mysql_query($sql1); 
    $code_bat = array(); 
    $nom_bat = array(); 
    /* On active un compteur pour les batiments */ 
    $nb_bat = 0; 
    if($rech_bat != false) 
    { 
        while($ligne = mysql_fetch_assoc($rech_bat)) 
        { 
            array_push($code_bat, $ligne['id_bat']); 
            array_push($nom_bat, $ligne['nom_bat']); 

            /* On incrémente de compteur */ 
            $nb_bat++; 
        } 
    } 
    ?> 
<form name="formulaire" action="./index.php?page=info_porte&categorie=porte" method="post" id="chgsalle"> 
    <?php 
    mysql_free_result($rech_bat); 
    /* On commence par vérifier si on a envoyé un numéro de batiment et le cas échéant s'il est différent de -1 */ 

    if(isset($idr) && $idr != -1) 
    { 
        /* Cération de la requête pour avoir les salles de ce batiment */ 
        $sql2 = "SELECT `id_salle`, `lib_salle`". 
        " FROM `salles`". 
        " WHERE `id_bat` = ". $idr ."". 
        " ORDER BY `id_salle`;"; 
        
            $rech_salle = mysql_query($sql2); 
            /* Un petit compteur pour les salles */ 
            $nd = 0; 
            /* On crée deux tableaux pour les numéros et les noms des salles */ 
            $code_salle = array(); 
            $nom_salle = array(); 
            /* On va mettre les numéros et noms des salles dans les deux tableaux */ 
            while($ligne_salle = mysql_fetch_assoc($rech_salle)) 
            { 
                array_push($code_salle, $ligne_salle['id_salle']); 
                array_push($nom_salle, $ligne_salle['lib_salle']); 
                $nd++; 
            } 
                       
        } 
    
?> 

<table width="50%" border="0">
   <tr>
    <td width="45%"><p>B&acirc;timent de la Porte<span class="Etoile"> *</span> :</p>
    <p>
     <select name="bat" id="bat" onchange="document.forms['chgsalle'].submit();"> 
  <option value="-1">Choisissez un batiment</option> 
    <?php 
    for($i = 0; $i < $nb_bat; $i++) 
    { 
?> 
  <option value="<?php echo($code_bat[$i]); ?>"<?php echo((isset($idr) && $idr == $code_bat[$i])?" selected=\"selected\"":null); ?>><?php echo($nom_bat[$i]); ?></option> 
<?php 
    } 
    ?> 
</select> 
     </p></td>
    <td width="55%"><p>Salle de la Porte<span class="Etoile"> *</span> :</p>
    <p><select name="salle" id="salle"> 
    <option value="-1">Choisissez une salle</option> 
            <?php   
            for($d = 0; $d<$nd; $d++) 
            { 
                ?> 
  <option value="<?php echo($code_salle[$d]); ?>"<?php echo((isset($salle_selectionne) && $salle_selectionne == $code_salle[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_salle[$d]." "); ?></option> 
                <?php 
            } 
?> 
</select> 
  </p></td></tr></table></form>
  
<form name="formulaire" action="./index.php?page=info_porte&categorie=porte" method="post" id="chgporte"> 
<?php 
    mysql_free_result($rech_salle); 
    /* On commence par vérifier si on a envoyé un numéro de salle et le cas échéant s'il est différent de -1 */ 

    if(isset($idr) && $idr != -1) 
    { 
        /* Cération de la requête pour avoir les portes de ce batiment */ 
        $sql2 = "SELECT `id_porte`, `lib_porte`". 
        " FROM `portes`". 
        " WHERE `id_salle` = ". $idr ."". 
        " ORDER BY `id_porte`;"; 
        
            $rech_porte = mysql_query($sql2); 
            /* Un petit compteur pour les portes */ 
            $nd = 0; 
            /* On crée deux tableaux pour les numéros et les noms des portes */ 
            $code_porte = array(); 
            $nom_porte = array(); 
            /* On va mettre les numéros et noms des portes dans les deux tableaux */ 
            while($ligne_porte = mysql_fetch_assoc($rech_porte)) 
            { 
                array_push($code_porte, $ligne_porte['id_porte']); 
                array_push($nom_porte, $ligne_porte['lib_porte']); 
                $nd++; 
            } 
                       
        } 
    
?> 
 <p><select name="porte" id="porte"> 
    <option value="-1">Choisissez une porte</option> 
            <?php   
            for($d = 0; $d<$nd; $d++) 
            { 
                ?> 
  <option value="<?php echo($code_porte[$d]); ?>"<?php echo((isset($porte_selectionne) && $porte_selectionne == $code_porte[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_porte[$d]." "); ?></option> 
                <?php 
            } 
?> 
</select> </p></form>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 juin 2009, 10:23

Modération :
PHPFrance n'est pas un site de distribution de scripts gratuits,
ni de débuggage de scripts téléchargés et utilisés sans compréhension.

Merci de prendre le temps de lire les règlements.


Si tu veux que l'on t'aide, il va falloir nous dire ce que tu as tenté, ce qui ne marche pas (en nous expliquant ce que tu as fait et les causes que te font dire que "ça ne marche pas")
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

rafale69300
Invité n'ayant pas de compte PHPfrance

17 juin 2009, 10:28

Ce que j'ai tenté est dans le code que j'ai mis à votre disposition, c'est la dernière partie du code. Et le problème est que les 2 première liste marche très bien mais la 3ème me retourne toujours le même résultat.