Page 1 sur 1

Listes déroulantes :valeur de la 3ème liste ne s'affiche pas

Posté : 12 juin 2007, 22:27
par Tximiti
Bonjour,
C'est la première fois que je poste dans un forum, étant novice en PHP, j'espère que vous serez indulgents vis-à-vis de mon code. Si j'effectue quelque chose en désaccord avec le forum merci de me le signaler.

J'ai voulu créer trois listes déroulantes dépendantes, dans un premier temps je me suis aidée du tutorial de Cyrano : http://www.phpfrance.com/forums/voir_sujet-4562.php, qui est très bien fait avec l'explication des 3 possibilités, mais comme je n'arrivais pas à l'adapter j'ai pris le code de Kimble : http://www.phpfrance.com/forums/viewtop ... 9roulantes.

Cependant les valeurs de ma 3ème liste n'apparaissent pas...Honte à moi cela fait près d'une semaine et demi que je suis dessus
Embarassed. J'ai fait le choix que tout soit en php car je risque d'avoir beaucoup de données et mon serveur semble ne pas supporter l'AJAX...

J'ai affiché mes requêtes, mais il n'y a aucune erreur, j'ai vérifié plusieurs fois le nom de mes tables et ce n'est pas cela non plus. Je ne comprends pas d'où cela peut venir, quelqu'un peut-il m'aguiller dans mes recherches, je ne sais plus par où chercher...Merci d'avance !
P.S : Si vous le désirez je peux vous donner ma base de données car pour le moment je fais encore des tests en local.
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "agi";

/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
$choixbase = mysql_select_db($base, $connexion);
// case 'modele_forma':
/* Rechercher les formations ainsi que leur date et lieu*/

?>
                <fieldset>
                <legend><strong>Rechercher les formations ainsi que leur date et lieu</strong></legend>
                <br />
                <table> 
                <tr>
<?php 
/* On récupère si elle existe la valeur de la formation envoyée par le formulaire */ 
/* On récupère si elle existe la valeur de la date de formation envoyée par le formulaire */ 
/* On récupère si elle existe la valeur du lieu de formation envoyé par le formulaire */ 
                $formation_choisie = isset($_POST['formations'])?$_POST['formations']:null; 
                $date_choisie = isset($_POST['date_formation'])?$_POST['date_formation']:null; 
                $lieu_choisi = isset($_POST['lieu_formation'])?$_POST['lieu_formation']:null; 
                if(isset($_POST['ok']) && isset($_POST['formations']) && $_POST['formations'] && isset($_POST['date_formation']) && $_POST['date_formation'] && isset($_POST['lieu_formation']) && $_POST['lieu_formation'] != "") 
{                 
?>
 

<?php 
} 
/*Création de la requête pour afficher les formations*/
/*********************************************************************************/
{ 
                $sql1 = "SELECT id_formations, nom_formations, ref_formations
						FROM formation
						ORDER BY id_formations"; 
                $rech_formations = mysql_query($sql1);
/* test du chemin de la requete mise en silence */
echo $sql1;//
                $code_formation = array(); 
                $nom_formation = array(); 
/* On active un compteur pour les formations */ 
                $nb_formations = 0; 
                if($rech_formations != false) 
    { 
                    while($ligne = mysql_fetch_assoc($rech_formations)) 
        { 
                array_push($code_formation, $ligne['id_formations']); 
                array_push($nom_formation, $ligne['nom_formations']); 
/* On incrémente le compteur sur les formations */ 
                $nb_formations++; 
        } 
    } 
    ?> 
                <form action="<?php echo "#"; ?>" method="post" id="chgdept"> 
<?php 
                echo "<center>"; 
/*Liste déroulante des formations*/
?>
                <td><select name="formations" id="forma" onChange="document.forms['chgdept'].submit();">
                  <option value="-1">- - - Choisissez une formation - - -</option>
                  <?php 
                for($i = 0; $i < $nb_formations; $i++)  
    { 
?>
                  <option value="<?php echo($code_formation[$i]); ?>"<?php echo((isset($formation_choisie) && $formation_choisie == $code_formation[$i])?" selected=\"selected\"":null); ?>><?php echo($nom_formation[$i]); ?></option>
                  <?php 
    } 
    ?>
                </select>
                  <?php 
                  mysql_free_result($rech_formations); 
                
/*********************************************************************************/
/* On commence par vérifier si on a envoyé un numéro de date de formation et le cas échéant s'il est différent de -1 */ 
                if(isset($formation_choisie) && $formation_choisie != -1) 
    { 
/* Création de la requête pour avoir les dates de cette formation */ 
                 $sql2 = "SELECT date_date
        				FROM date_formations
        				WHERE id_formations = ". $formation_choisie ."
        				ORDER BY id_date";  
        { 
                $rech_date = mysql_query($sql2);
/*Test d'affichage du chemin de la requete*/
echo $sql2;//
/* Un petit compteur pour les formations */ 
                $nb_date = 0; 
/* On crée 1 tableau pour les formations */ 
               // $code_date = array();
                $nom_date = array(); 
/* On va mettre les numéros et formations dans les deux tableaux */ 
                while($ligne_date = mysql_fetch_assoc($rech_date)) 
            { 
/* Ici j'ai dévalidé l'affichage de l'id_vente dans les formations*/
				//array_push($code_date, $ligne_date['id_date']);
                array_push($nom_date, $ligne_date['date_date']); 
                $nb_date++;
            } 
/* Maintenant on peut construire la liste déroulante des surfaces*/ 
            ?> 
                <select name="date_formation" id="date_forma" onChange="document.forms['chgdept'].submit();"> 
                   <option value="-1">---Choisissez la date---</option> 
           <?php 
                for($date = 0; $date<$nb_date; $date++) 
            { 
                ?> 
                  <option value="<?php echo($nom_date[$date]); ?>"<?php echo((isset($date_choisie) && $date_choisie == $nom_date[$date])?" selected=\"selected\"":null); ?>><?php echo($nom_date[$date]); ?></option>                    
                <?php 
            } 
?> 
                </select> 
<?php 
        } 
/* Un petit coup de balai */ 
                mysql_free_result($rech_date); 
    }     
/*********************************************************************************/ 
/* On commence par vérifier si on a envoyé un numéro de date d'une formation et le cas échéant s'il est différent de -1 */
                if(isset($date_choisie)) 
    { 
/* Création de la requête pour afficher les dates de la formation choisie */ 
                $sql3 = "SELECT lieu_date
        			FROM date_formations
        			WHERE id_formations = ". $formation_choisie ."
					AND date_date = ". $date_choisie ."
        			ORDER BY lieu_date ";
        { 
                $rech_lieu = mysql_query($sql3);
/*Test d'affichage du chemin de la requete*/ 
echo $sql3;/**/             
/* Un petit compteur pour les lieu_formations */ 
                $nb_lieu = 0; 
/* On crée un tableau pour les lieu_formations */ 
				//$code_lieu = array(); 
                $nom_lieu = array(); // nom du lieu
//J'ai dévalidé :$id_lieu = array(); 
/* On va mettre les lieux dans un tableau */ 
                while($ligne_lieu = mysql_fetch_assoc($rech_lieu)) 
            { 
//J'ai dévalidé : array_push($code_lieu, $ligne_lieu['id_date']);
                array_push($nom_lieu, $ligne_lieu['lieu_date']); 
//J'ai dévalidé :array_push($id_lieu,  $ligne_lieu['id_date']);
                $nb_lieu++; 
            } 
/* Maintenant on peut construire la liste déroulante des lieu_formations */ 
            ?> 
                <select name="lieu_formation" id="lieu_forma"  onchange="document.forms['chgdept'].submit();"> 
                   <option value="-1">---Choisissez le lieu---</option> 
            <?php 
                for($lieu = 0; $lieu<$nb_lieu; $lieu++) 
            { 
//mise en place de urldecode                ?>                                                 
                  <option value="<?php echo urlencode($nom_lieu[$lieu]); ?>"<?php echo((isset($lieu_choisi) && $lieu_choisi == $nom_lieu[$lieu])?" selected=\"selected\"":null); ?>><?php echo urldecode($nom_lieu[$lieu]); ?></option> 
                <?php 
            } 
?> 
                </select> 
<?php 
        } 
        /* Un petit coup de balai */ 
                   mysql_free_result($rech_lieu); 
    } 
/*********************************************************************************/ 
                if(isset($formation_choisie))
                if(isset($date_choisie))
                if(isset($lieu_choisi)) 
    { 
//mise en place de urlencode ?>
                <input type="button" name="ok" class="bouton" value="Envoyer" onClick="window.navigate('index.php?liste=recherche_modele_forma_lieu_formation&choix=modele_forma&formations=<?php echo $formation_choisie; ?>&date_formation=<?php echo $date_choisie; ?>&lieu_formation=<?php echo urlencode($lieu_choisi);?>')" >
   <? }  ?>                   </td>  
                </form> 
<?php  
} ?>  
                </tr>              
                </table>
                <br />
                </fieldset>            
<?php        
//break; ?> 
:oops:

Re: Listes déroulantes :valeur de la 3ème liste ne s'affiche

Posté : 13 juin 2007, 02:05
par Sékiltoyai
Embarassed. J'ai fait le choix que tout soit en php car je risque d'avoir beaucoup de données et mon serveur semble ne pas supporter l'AJAX...
L'AJAX, c'est du javascript, ca ne dépend pas du serveur mais du client, donc tous les serveurs supportent l'AJAX...

Donne le code source html issu de l'exécution de ton script.

Posté : 13 juin 2007, 09:48
par Tximiti
Voilà ce que ce ça me donne: (J'ai laissé l'affichage des requêtes) Il ne veut pas me faire ma troisière liste déroulante....Il ne créé pas les balises <option></option>

Code : Tout sélectionner

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> </head> <body> <fieldset> <legend><strong>Rechercher les formations ainsi que leur date et lieu</strong></legend> <br /> <table> <tr> SELECT id_formations, nom_formations, ref_formations FROM formation ORDER BY id_formations <form action="#" method="post" id="chgdept"> <center> <td><select name="formations" id="forma" onChange="document.forms['chgdept'].submit();"> <option value="-1">- - - Choisissez la formation - - -</option> <option value="1">Introduction aux réseaux</option> <option value="2" selected="selected">Les réseaux terrain manufacturiers</option> <option value="3">Les réseaux de terrain process</option> <option value="4">PROFINET</option> <option value="5">Ethernet Industriel</option> <option value="6">PROFIBUS Installation - Diagnostic - Maintenance</option> <option value="15">L'histoire : il ,m'a dit;groror/</option> </select> SELECT date_date FROM date_formations WHERE id_formations = 2 ORDER BY id_date <select name="date_formation" id="date_forma" onChange="document.forms['chgdept'].submit();"> <option value="-1">---Choisissez la date---</option> <option value="14/03/2002">14/03/2002</option> <option value="09/05/2001" selected="selected">09/05/2001</option> <option value="26/03/2004">26/03/2004</option> </select> SELECT lieu_date FROM date_formations WHERE id_formations = 2 AND date_date = 09/05/2001 ORDER BY lieu_date <select name="lieu_formation" id="lieu_forma" onchange="document.forms['chgdept'].submit();"> <option value="-1">---Choisissez le lieu---</option> </select> </td> </form> </tr> </table> <br /> </fieldset> </body> </html>
Sinon j'ai tenté de le faire aussi en AJAX, mais ça ne fonctionne pas non plus, je me suis aidée de ce post : http://www.developpez.net/forums/archiv ... 76592.html qui s'est lui-même inspiré du tutorial de Cyrano pour les listes déroulantes en AJAX.
Si vous préférez je peux vous le mettre...Mais là rien ne marche c'est encore mieux ! :?

Posté : 13 juin 2007, 15:49
par Sékiltoyai
Pour chaque mysql_query(), mets toujours une gestion des erreurs. Par exemple :
$result = mysql_query(...) or die('Erreur : ' . mysql_error());
Sinon, dans tes requètes, mets des quotes ( ' ) autour des données que tu insères. Par exemple :
mysql_query("SELECT machin FROM truc WHERE trucmuche='" . $donnee . "'");

Posté : 13 juin 2007, 16:26
par Tximiti
Juste un grand merci à Sékiltoyai...Ca fonctionne !!!! :lol: ....Comme quoi je suis vraiment une burne..Merci d'avoir prêté attention à mon message !
Pour ceux que ça intéresse je mets le code correct :
<?php
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "agi";

/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
$choixbase = mysql_select_db($base, $connexion);
// case 'modele_forma':
/* Rechercher les ventes par modéle et formationss et lieu_formations*/

?>
                <fieldset>
                <legend><strong>Rechercher les formations ainsi que leur date et lieu</strong></legend>
                <br />
                <table> 
                <tr>
<?php 
/* On récupère si elle existe la valeur de la formation envoyée par le formulaire */ 
/* On récupère si elle existe la valeur de la date de formation envoyée par le formulaire */ 
/* On récupère si elle existe la valeur du lieu de formation envoyé par le formulaire */ 
                $formation_choisie = isset($_POST['formations'])?$_POST['formations']:null; 
                $date_choisie = isset($_POST['date_formation'])?$_POST['date_formation']:null; 
                $lieu_choisi = isset($_POST['lieu_formation'])?$_POST['lieu_formation']:null; 
                if(isset($_POST['ok']) && isset($_POST['formations']) && $_POST['formations'] && isset($_POST['date_formation']) && $_POST['date_formation'] && isset($_POST['lieu_formation']) && $_POST['lieu_formation'] != "") 
{                 
?>
 

<?php 
} 
/*Création de la requete pour afficher les formations*/
/*********************************************************************************/
{ 
                $sql1 = mysql_query("SELECT id_formations, nom_formations, ref_formations
						FROM formation
						ORDER BY id_formations") or die ('Erreur SQL : impossible d\'effectuer la requête :'. mysql_error()); 
                $rech_formations = $sql1;
/* test du chemin de la requete mise en silence */
echo $sql1;//
                $code_formation = array(); 
                $nom_formation = array(); 
/* On active un compteur pour les formations */ 
                $nb_formations = 0; 
                if($rech_formations != false) 
    { 
                    while($ligne = mysql_fetch_assoc($rech_formations)) 
        { 
                array_push($code_formation, $ligne['id_formations']); 
                array_push($nom_formation, $ligne['nom_formations']); 
/* On incrémente le compteur sur les formations */ 
                $nb_formations++; 
        } 
    } 
    ?> 
                <form action="<?php echo "#"; ?>" method="post" id="chgdept"> 
<?php 
                echo "<center>"; 
/*Liste déroulante des formations*/
?>
                <td><select name="formations" id="forma" onChange="document.forms['chgdept'].submit();">
                  <option value="-1">- - - Choisissez la formation - - -</option>
                  <?php 
                for($i = 0; $i < $nb_formations; $i++)  
    { 
?>
                  <option value="<?php echo($code_formation[$i]); ?>"<?php echo((isset($formation_choisie) && $formation_choisie == $code_formation[$i])?" selected=\"selected\"":null); ?>><?php echo($nom_formation[$i]); ?></option>
                  <?php 
    } 
    ?>
                </select>
                  <?php 
                  mysql_free_result($rech_formations); 
                
/*********************************************************************************/
/* On commence par vérifier si on a envoyé un numéro de date de formation et le cas échéant s'il est différent de -1 */ 
                if(isset($formation_choisie) && $formation_choisie != -1) 
    { 
/* Création de la requête pour avoir les dates de cette formation */ 
                 $sql2 = mysql_query("SELECT date_date
        				FROM date_formations
        				WHERE id_formations = '". $formation_choisie ."'
        				ORDER BY id_date") or die ('Erreur SQL : impossible d\'effectuer la requête :'. mysql_error()); 
						echo $sql2; 
        { 
                $rech_date = $sql2;
/*Test d'affichage du chemin de la requete*/
//echo $sql2;
/* Un petit compteur pour les formationss */ 
                $nb_date = 0; 
/* On crée 1 tableau pour les formationss */ 
               // $code_date = array();
                $nom_date = array(); 
/* On va mettre les numéros et formationss dans les deux tableaux */ 
                while($ligne_date = mysql_fetch_assoc($rech_date)) 
            { 
/* Ici j'ai dévalidé l'affichage de l'id_vente dans les formationss*/
				//array_push($code_date, $ligne_date['id_date']);
                array_push($nom_date, $ligne_date['date_date']); 
                $nb_date++;
            } 
/* Maintenant on peut construire la liste déroulante des surfaces*/ 
            ?> 
                <select name="date_formation" id="date_forma" onChange="document.forms['chgdept'].submit();"> 
                   <option value="-1">---Choisissez la date---</option> 
           <?php 
                for($date = 0; $date<$nb_date; $date++) 
            { 
                ?> 
                  <option value="<?php echo($nom_date[$date]); ?>"<?php echo((isset($date_choisie) && $date_choisie == $nom_date[$date])?" selected=\"selected\"":null); ?>><?php echo($nom_date[$date]); ?></option>                    
                <?php 
            } 
?> 
                </select> 
<?php 
        } 
/* Un petit coup de balai */ 
                mysql_free_result($rech_date); 
    }     
/*********************************************************************************/ 
/* On commence par vérifier si on a envoyé un numéro de date d'une formation et le cas échéant s'il est différent de -1 */
                if(isset($date_choisie)) 
    { 
/* Création de la requête pour afficher les dates de la formation choisie */ 
                $sql3 = mysql_query("SELECT lieu_date
        			FROM date_formations
        			WHERE id_formations = '". $formation_choisie ."'
					AND date_date = '". $date_choisie ."'
        			ORDER BY lieu_date ") or die ('Erreur SQL : impossible d\'effectuer la requête :'. mysql_error());
        { 
                $rech_lieu = $sql3;
/*Test d'affichage du chemin de la requete*/ 
echo $sql3;/**/             
/* Un petit compteur pour les lieu_formations */ 
                $nb_lieu = 0; 
/* On crée un tableau pour les lieu_formations */ 
				//$code_lieu = array(); 
                $nom_lieu = array(); // nom du lieu
//J'ai dévalidé :$id_lieu = array(); 
/* On va mettre les lieux dans un tableau */ 
                while($ligne_lieu = mysql_fetch_assoc($rech_lieu)) 
            { 
//J'ai dévalidé : array_push($code_lieu, $ligne_lieu['id_date']);
                array_push($nom_lieu, $ligne_lieu['lieu_date']); 
//J'ai dévalidé :array_push($id_lieu,  $ligne_lieu['id_date']);
                $nb_lieu++; 
            } 
/* Maintenant on peut construire la liste déroulante des lieu_formations */ 
            ?> 
                <select name="lieu_formation" id="lieu_forma"  onchange="document.forms['chgdept'].submit();"> 
                   <option value="-1">---Choisissez le lieu---</option> 
            <?php 
                for($lieu = 0; $lieu<$nb_lieu; $lieu++) 
            { 
//mise en place de urldecode                ?>                                                 
                  <option value="<?php echo($nom_lieu[$lieu]); ?>"<?php echo((isset($lieu_choisi) && $lieu_choisi == $nom_lieu[$lieu])?" selected=\"selected\"":null); ?>><?php echo($nom_lieu[$lieu]); ?></option> 
                <?php 
            } 
?> 
                </select> 
<?php 
        } 
        /* Un petit coup de balai */ 
                   // mysql_free_result($rech_lieu); 
    } 
/*********************************************************************************/ 
                if(isset($formation_choisie))
                if(isset($date_choisie))
                if(isset($lieu_choisi)) 
    { 
//mise en place de urlencode ?>
                <input type="button" name="ok" class="bouton" value="Envoyer" onClick="window.navigate('index.php?liste=recherche_modele_forma_lieu_formation&choix=modele_forma&formations=<?php echo $formation_choisie; ?>&date_formation=<?php echo $date_choisie; ?>&lieu_formation=<?php echo urlencode($lieu_choisi);?>')" >
   <? }  ?>                   </td>  
                </form> 
<?php  
} ?>  
                </tr>              
                </table>
                <br />
                </fieldset>            
<?php        
//break; ?>