Liste déroulante php,bd MySQL,pb codification

Résolu
Bonjour,
Je débute en php et j'essaye de faire une petite page Web pour un service de mon entreprise.
Je dois faire 4 listes déroulantes dynamiques imbriquées avec possibilité d'ajouter un nouvel élément sans passer par une autre page.
J'y vais pas par pas, et pour l'instant j'en suis juste à faire 2 listes imbriquées. Cela fonctionne mais seulement si le champs qui filtre la seconde liste est en format numérique. Mon problème est que des codifications internes existent déjà (numérique + caractère) et je voudrais les récupérer. Si je ne peux pas les utiliser, je vais devoir créer 4 tables de correspondance, alors que sans ce pb, cela ne serait pas nécessaire.

Si quelqu'un a déjà eu ce pb?
Merci
Configuration: Windows XP
Internet Explorer 7.0

66 réponses

Résumé de la discussion

Deux listes déroulantes dynamiques imbriquées en PHP posent une problématique lorsque le filtre de la seconde liste ne supporte que des valeurs numériques, alors que des codifications internes mixtes existent. Des approches AJAX sont proposées, notamment partager le traitement entre deux fichiers serveur pour les listes et une fonction JavaScript, ou utiliser deux fonctions appelant des scripts séparés. Plusieurs propositions évoquent l'utilisation de jQuery et d'un fichier AJAX côté serveur pour récupérer les options de la seconde liste selon le choix; on voit des exemples illustrant des listes dépendantes et des scripts PHP. Il convient également de vérifier que la bibliothèque jQuery est chargée et que les scripts JavaScript fonctionnent dans les bons fichiers pour éviter des erreurs de chargement.

Bobot (l’IA à votre service)
  1. Alors... Ca n'a pas d'importance, mais tu n'es pas obligé de remettre des tags <html> de partout, ainsi que l'appelle aux fichiers js.

    Recopie le code tel quel :

    - index.php
    <HTML>
    <HEAD>
    </HEAD>
    
    
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="ajax.js"></script>
    
    
    
    <BODY>
    <table id='formulaire'>
      <tr id='tr_affaire'>
        <td class='title'><b>Selectionnez une affaire :</b></td><td><?php include('select_affaire.php')?></td>
      </tr>
      <tr id='tr_localisation'>
      </tr>
    </table>
    
    </BODY>
    </HTML>
    


    - select_affaire.php
    <select id='select_affaire' name='select_affaire' onchange="ajax(this)">
      <option value='void_affaire'>Choisir une affaire</option>
      <?php
        include("connexion.php");
        
        $query = "SELECT DISTINCT affaire FROM analyses ORDER BY affaire ASC";
        $rq = mysql_query($query) or die(mysql_error());
        
        while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
        {
          $affaire = $row["affaire"];
          echo "<option value='$affaire'>$affaire</option>";
        }
        mysql_close();
      ?>
    </select>
    


    - select_localisation.php
    <select id='select_localisation' name='select_localisation'>
      <option value='void_localisation'>Choisir une localisation</option>
      <?php
        include("connexion.php");
        
        $var=$_POST['var'];
        
        $query = "SELECT DISTINCT localisation FROM analyses WHERE affaire='$var' ORDER BY localisation ASC";
        $rq = mysql_query($query) or die(mysql_error());
        while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
        {
          $localisation = $row["localisation"];
          echo "<option value='$localisation'>$localisation</option>";
        }  
        mysql_close();
      ?>
    </select>
    


    - ajax.js
    function ajax(strthis)
    {
      var param = strthis.value;
      $.ajax
      (
        {
          type: "POST",
          url: "select_localisation.php",
          data: "var="+param,
          success: function(msg){alert( "Data Saved: "+msg );}
        }
      );
    }
    
    1. salut,

      j'ai déjà fais faut des listes déroulante dynamique mais qu'entends-tu par imbriquées l'une dans l'autre ?

      Tu peux pas donner le code aussi parce que c'est pas très clair ^^

      A+

      Gaerebut
      1. Tout d'abord, merci beaucoup pour ta réponse.

        Tu as raison, je ne suis pas très claire dans ce que je dis. En fait, je crois que le mot "imbriqué" est de trop, je veux faire des listes dépendantes du choix dans d'autres listes.

        Les listes déroulantes cherchent les données dans la table "analyses".
        - Numéro analyse
        - Date analyse
        - Identifiant analyste
        - Code affaire: code alphanumérique + libellé
        - localisation: adresse (sans CP ni ville)
        - Code de l'analyse: code alphanumérique
        - Type: code alphanumérique.

        L'utilisateur doit sélectionner une affaire dans une liste déroulante, puis sélectionner une localisation parmi une liste filtrée en fonction de l'affaire choisie, puis choisir le code de l'analyse parmi une liste filtrée en fonction de l'affaire et de la localisation choisie, puis choisir un type parmi une liste filtrée en fonction de l'affaire, de la localisation et du code d'analyse choisis. Enfin, s'il fait une analyse sur de nouveaux éléments, il doit pouvoir l'ajouter en l'inscrivant dans une simple boîte de saisie.

        Voici mon code, je me suis insiprée d'un code trouvé sur un tutoriel. Et il fonctionne seulement si mon champs "affaire" est en format numérique.

        ---------------------------------------------------------------------------------------------------------

        <?php
        echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

        /* On récupère si elle existe la valeur de l'affaire envoyée par le formulaire */
        $idr = isset($_POST['affaire'])?$_POST['affaire']:null;
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
        <head>
        </head>

        <body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">

        <?php
        if(isset($_POST['ok']) && isset($_POST['localisation']) && $_POST['localisation'] != "")
        {
        $affaire_selectionnee = $_POST['affaire'];
        $localisation_selectionnee = $_POST['localisation'];
        ?>
        <p>Vous avez sélectionné la localisation <?php echo($localisation_selectionnee); ?> dans l'affaire <?php echo($affaire_selectionnee); ?></p>
        <?php
        }
        ?>
        <h3>Trouver une localisation </h3>
        <?php
        /* 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('localhost', 'root', '');
        if($connexion != false)
        {
        $choixbase = mysql_select_db('essai', $connexion);
        $sql1 = "SELECT distinct `affaire`".
        " FROM `analyses`".
        " ORDER BY `affaire`";
        $rech_affaires = mysql_query($sql1);
        $affaire = array();
        /* On active un compteur pour les affaires */
        $nb_affaires = 0;
        if($rech_affaires != false)
        {
        while($ligne = mysql_fetch_assoc($rech_affaires))
        {
        array_push($affaire, $ligne['affaire']);

        /* On incrémente le compteur */
        $nb_affaires++;
        }
        }
        ?>
        <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chglocalisation">
        <fieldset style="border: 3px double #333399">
        <legend>Sélectionnez une affaire</legend>
        <select name="affaire" id="affaire" onchange="document.forms['chglocalisation'].submit();">
        <option value="-1">- - - Choisissez une affaire - - -</option>
        <?php
        for($i = 0; $i < $nb_affaires; $i++)
        {
        ?>
        <option value="<?php echo($affaire[$i]); ?>"
        <?php echo((isset($idr) && $idr == $affaire[$i])?" selected=\"selected\"":null); ?>>
        <?php echo($affaire[$i]); ?></option>

        <?php
        }
        ?>
        </select>
        <?php
        mysql_free_result($rech_affaires);
        /* On commence par vérifier si on a envoyé une affaire et le cas échéant s'il est différent de -1 */

        if(isset($idr) && $idr != -1)
        {
        /* Création de la requête pour avoir les localisations de cette affaire */
        $sql2 = "SELECT distinct `localisation`".
        " FROM `analyses`".
        " WHERE `affaire` = ". $idr ."".
        " ORDER BY `localisation`;";
        if($connexion != false)
        {
        $rech_localisation = mysql_query($sql2, $connexion);
        /* Un petit compteur pour les localisations */
        $nb_localisation = 0;
        /* On crée un tableau pour les localisations */
        $localisation = array();
        /* On va mettre les localisations dans le tableau */
        while($ligne_localisation = mysql_fetch_assoc($rech_localisation))
        {
        array_push($localisation, $ligne_localisation['localisation']);
        $nb_localisation++;
        }
        /* Maintenant on peut construire la liste déroulante */
        ?>
        <select name="localisation" id="localisation">
        <?php
        for($d = 0; $d<$nb_localisation; $d++)
        {
        ?>
        <option value="<?php echo($localisation[$d]); ?>"
        <?php echo((isset($localisation_selectionnee) && $localisation_selectionnee == $localisation[$d])?" selected=\"selected\"":null); ?>>
        <?php echo($localisation[$d]." (". $localisation[$d] .")"); ?></option>
        <?php
        }
        ?>
        </select>
        <?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_localisation);
        }
        ?>
        <br /><input type="submit" name="ok" id="ok" value="Envoyer" />
        </fieldset>
        </form>
        <?php
        /* Terminé, on ferme la connexion */
        mysql_close($connexion);
        }
        else
        {
        /* Si on arrive là, c'est pas bon signe, il faut vérifier les
        * paramètres de connexion, mot de passe, serveur pas démarré etc... */
        ?>
        <p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
        <?php
        }
        ?>
        </body>
        </html>
        ---------------------------------------------------------------------------------------------
        1. Une gentille personne m'a trouvé la solution sur un autre site.
          Pour ceux qui auraient le même problème, il manquait simplement des simples cotes!

          $sql2 = "SELECT distinct `localisation`".
          " FROM `analyses`".
          " WHERE `affaire` = '". $idr ."' ".
          " ORDER BY `localisation`;";

          Moralité: comment perdre des heures bêtement... oubliez des cotes!
          Bon développement!
          1. haaa ouai ... juste ça ok moi j'essayé de comprendre le principe en fait ! lol

            Mais j'aurai peut-être dû voir ton code plutôt j'aurai peut-être vu :p

            Tu peux aussi faire ça plutôt :

            Remplace ça :

            $sql2 = "SELECT distinct `localisation`".
            " FROM `analyses`".
            " WHERE `affaire` = ". $idr ."".
            " ORDER BY `localisation`;"; 


            PAR SA :

            $sql2 = "SELECT distinct `localisation` FROM `analyses` WHERE `affaire` = '".$idr."' ORDER BY `localisation`";


            A+

            Gaerebut
            1. Merci gaerebut!

              J'ai modifié, ça fonctionne bien sûr sans problème.
              Et en plus, c'est plus compréhensible!
              Encore merci!
              Je pense qu'on se recroisera dans ce forum car je vais me relancer dans la construction de ma page WEB, et je pense donc croiser de nouvelles difficultés!
              à +
              1. Ok no problème!

                ben bien sûr que ça fonctionne qu'est-ce que tu crois ! MDR (je blague)

                heu ben ouai sûrement tu aura d'autre problème !

                Envoie moi des message privé si tu veux de mon aide, je te répondrais dans la minute ^^

                A+

                Gaerebut
                1. Je précise que quand je dis que je te répondrai dans la minute, c'est si tu m'envoie ça entre 9h du matin et 17h ! Puis de 20h à 00h00 je fais quelque pause entre 2 oui oui je suis un humain malgrès tout ;)

                  A+

                  Gaerebut
                  1. Bonjour Gaerebut!
                    Es-tu sûr d'être humain? Tu ne t'arrêtes jamais!!! Quels horaires!

                    Alors effectivement j'ai dejà des problèmes...
                    2 listes déroulantes dynamiques c'est bien, mais il m'en faut 1 troisième... J'ai cherché mais je bloque, je ne sais pas comment faire les boucles, ni quoi faire de mon form... Je suis paumée pour être honnête! lol ça dépasse mon petit niveau!

                    Peux-tu me donner un coup de pouce?
                2. Ok !

                  D'abord désolé j'ai 1 heure de retard! ^^

                  J'ai oublié de suivre ce post avec les mails ...

                  Donc bon ... comme je te disais au début, je comprend pas ce que tu veux faire ! LOL

                  T'aurai pas une capture d'écran des liste imbriqué pour voir ?STP

                  Merci

                  A+

                  gaerebut
                  1. Bonjour messieurs!

                    Pour Gaerebut:
                    Merci pour ta réponse, et désolée pour ma réponse tardive! Pendant 2 jours, je ne peux pas beaucoup aller sur le net.
                    Malheurement, je ne peux pas t'envoyer de capture d'écran car tout est sur mon pc du travail.
                    Je le fais dès demain matin première heure (sachant que je ne suis pas une lève-tôt... lol).
                    En attendant, voici néanmoins le principe:
                    l'utilisateur saisit une AFFAIRE dans une liste déroulante d'"AFFAIRES".
                    S'affiche alors une liste déroulante des LOCALISATIONS, filtrée en fonction de l'AFFAIRE sélectionnée
                    l'utilisateur saisit une LOCALISATION dans la liste déroulante des LOCALISATIONS
                    S'affiche alors une liste déroulante du champs INFO3, filtrée en fonction de l'AFFAIRE et de la LOCALISATION sélectionnés.
                    l'utilisateur saisit une INFO3 dans la liste déroulante des INFO3.

                    Voili voilou. Et donc mon script fonctionne pour les listes déroulantes sur AFFAIRE et LOCALISATION. Mais je n'arrive pas à ajouter la liste sur INFO3.

                    A demain

                    Pour Nico:
                    Bonjour Nico, merci pour ta réponse, mais je ne comprends pas trop l'objectif. Je ne vois pas en quoi ce site répond à mon problème, en + il est bourré de fautes d'orthographes! lol
                    S'ils ne sont pas doués en orthographe, pour les scripts, j'ai des doutes!
                    à +
                    1. Bonsoir,

                      Alors j'essai de comprendre un peu... Mais... en passant par un "mysql_pconnect()"
                      Un mysql_close ne ferme pas la connection à ta BDD, si ?

                      Et enfin, tu ne pourrais pas résoudre ton problème avec des requêtes ajax?
                      1. Bonsoir Papymucho.

                        Pour le mysql_pconnect() et mysql_close, je ne sais pas. Si tu me le dis, c'est que c'est vrai!

                        Malheureusement, je ne connais pas Ajax. (je ne suis pas développeur informatique) J'essaye de faire cette page Web pour donner un coup de main, alors j'aimerais rester dans un langage que je connais.
                        1. Ajax n'est pas un langage, en fait c'est du javascript... Disons que c'est juste une méthode, qui permet d'actualiser certains éléments de ta page, sans avoir à recharger entièrement ta page... Pratique donc pour des listes déroulantes dynamique qui se remplissent en fonction du choix fait dans une autre liste.

                          Ce n'est pas bien compliqué, je peux t'expliquer vite fait si tu le souhaites! J'ai appris ça y'a pas longtemps, j'en profite :D
                          1. Trop tard, je suis en train de poster un post ou je donne un code explicatif complet ! ^^

                            J'ai fini dans 5 min :p

                            Pris de vitesse !

                            A+

                            Gaerebut
                            1. Effectivement, cela répond à ma problématique.
                              Si ce n'est pas trop compliqué pour une débutante, je suis partante!
                              1. Les deux solutions sont intéressantes.
                                Peut-être y en a t-il une que j'arriverais plus facilement à appréhender.
                                1. salut,

                                  heu oui ce que dis papymucho est très juste et plus intuitif!
                                  C'est plus pratique de faire ça en ajax !

                                  Alors, on se jète à l'eau ! ^^

                                  Je te donne le code necessaire pour le faire en ajax !
                                  Ceci est un code minimal !

                                  Requiert :

                                  index.html ou .php ==> Page contenant les listes déroulantes
                                  ajax.js ==> Code/fonctions javascript qui permet d'établir un lien entre le client et le serveur et évite de raffraichir la page
                                  ajax.php ==> Fichier php exécuter côté serveur et envoyant le résultat sur la page HTML sans rafraichissement

                                  Contenu de la page index.html :

                                  <html>
                                     <head>
                                        <script type="text/javascript" src="ajax.js"></script>
                                     </head>
                                     <body onload="Ajax(0, 'ajax', 'affaires', 0)">
                                         <select id="affaires" onchange="Ajax(this.value, 'ajax', 'localisations', 0)"></select>
                                         <select id="localisations" onchange="Ajax(this.value, 'ajax', 'info3', document.getElementById('affaires').value)"></select>  
                                         <select id="info3"></select>
                                     </body>
                                  </html>


                                  Contenu de la page ajax.js :

                                  function Ajax(str, page, result, champ)//str est la chaine envoyé, page est la page php appellé (sans l'extension), result est l'id de l'élément ou sera afficher le résultat renvoyé par le serveur et str2 est une deuxième chaine d'envoyé
                                  { 
                                  	xmlHttp=GetXmlHttpObject()
                                  	if (xmlHttp==null)
                                  	{
                                  		alert ("Votre navigateur ne supporte pas le HTTP Request")
                                  		return
                                  	}
                                  	var url="./inc/"+page+".php"
                                  	url=url+"?q="+str+"&p="+str2
                                  	url=url+"&sid="+Math.random()
                                  	xmlHttp.onreadystatechange=getStateChanged(result);
                                  	xmlHttp.open("GET",url,true)
                                  	xmlHttp.send(null)
                                  	
                                  }
                                  
                                  function getStateChanged(result)
                                  {
                                  	if (typeof(result) === 'string')
                                  	{
                                  		result = document.getElementById(result);
                                  	}
                                  	return function() 
                                  	{
                                  		if (xmlHttp.readyState==4)
                                  		{
                                  			result.innerHTML = xmlHttp.responseText;
                                  		}
                                  	}
                                  }
                                  
                                  
                                  function GetXmlHttpObject()
                                  {
                                  	var xmlHttp=null;
                                  	try
                                  	{
                                  		// Firefox, Opera 8.0+, Safari
                                  		xmlHttp=new XMLHttpRequest();
                                  	}
                                  	catch (e)
                                  	{
                                  		//Internet Explorer
                                  		try
                                  		{
                                  			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                                  		}
                                  		catch (e)
                                  		{
                                  			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                                  		}
                                  	}
                                  	return xmlHttp;
                                  }
                                  


                                  Contenu de la page ajax.php :

                                  //Bon ben ici c'est ta page php, j'ai pas grand chose à mettre puisque c'est en quelque sorte ton code a quelques modifications près !
                                  mysql_connect("localhost", "root" , "");
                                  mysql_select_db("BASE");
                                  
                                  $q = $_GET["q"];//Premiere chaine reçu
                                  $p = $_GET["p"];//Deuxième chaine reçu (=0 si il y a qu'une chaine, dans le cas on est juste sur la première liste déroulante !)
                                  
                                  if(!$q && !$p)// Si $p ET $q valent 0, c'est qu'on initialise la première select box
                                  {
                                  //CODE PHP MYSQL A INSERER
                                  //ALLER DANS LA BASE DE DONNEES POUR VOIR TOUTES LES AFFAIRES ET LES AFFICHER VIA UNE BOUCLE while($tableau = mysql_fetch_array($requete)){}
                                  //A CHAQUE TOUR DE BOUCLE ON DOIT CREER UNE ENTREE DANS LE SELECT DONC ONT METTRE UN TRUC DE CE GENRE :
                                  // while($tableau = mysql_fetch_array($requete)){?><option><?php echo $tableau['affaire']; ?></option><?php} 
                                  //ICI, $tableau['affaire'] CONTIENT L'AFFAIRE ET AFFICHERA TOUTES LES AFFAIRES DE TA BASES GRACE A TA REQUETE 
                                  }
                                  else if($q && !isset($p))//SI ON RECOIT QU'UNE SEUL VARIABLE, C'EST QUE L'ON A CHOISIS UNE AFFAIRE
                                  {
                                  //COMME POUR LA CONDITION PRECEDENTE, ON CONSTRUIT LE SELECT DE LA MEME MANIERE SAUF QUE LA REQUETE AURA UNE CONDITION, IL FAUDRA DIRE UN TRUC DU GENRE, AFFICHER TOUTES LES LOCALISATIONS QUI APPARTIENNENT A L'AFFAIRE $q
                                  }
                                  else if($q && $p)
                                  {
                                  //DERNIER SOLUTION, ON RECOIT $p ET $q DONC ONT VIENT DE CHOISIR LA LOCALISATION ET ON VEUT AFFICHER LES INFO3 EN FONCTION DE $p ET DE $q.
                                  //TOUJOURS LE MEME PRINCIPE MAIS LA REQUETE DEVRA ICI COMPORTER 2 CONDITIONS $q = CONDITION CHOISIE ET $p = AFFAIRE CHOISIE
                                  }
                                  else
                                  {
                                  echo "ERREUR !";
                                  }
                                  mysql_close();
                                  ?>
                                  


                                  Bon voila comme promis ce fameux code, j'espère que ça sera clair ! ^^

                                  J'ai essayé de commenter au max ce que tu aura besoin de comprendre ! SI tu veux des explications sur le fichier JS ou HTML, demande moi ! :)

                                  En espérant t'avoir aidé :)

                                  A+

                                  Gaerebut
                                  1. J'attendais de voir la soluce de Gaerebut, mais je vais donc te laisser celle-ci également.
                                    Mon code ne fonctionne qu'avec la librairie jquery pour javascript : https://jquery.com/ pour le télécharger.
                                    C'est une librairie très puissante, qui permet entre autre de nombreuses animations, tel que le drag and drop etc... très simple à coder.... Mais elle facilite également les requêtes ajax. Si tu souhaites te documenter : http://jquery.developpeur-web2.com/documentation.php

                                    Bon commençons...

                                    Entre ton </header> et ton <body> tu insères : <script type="text/javascript" src="jquery.js"></script>
                                    Et dans le dossier de ton site, tu copies/colles le fichier jquery.js.....

                                    Ensuite passons au code:

                                    je te donne un exemple, de 2 menus déroulants que j'ai créé récemment....
                                    L'un tapes dans la table équipement.... Et récupère le type de matériel.... L'autre tape dans la table model.... Et récupère le modèle, en fonction du choix fait dans le 1er menu déroulant

                                    fichier : _inc_select_equipment.php

                                    <select id='select_equipment' name='select_equipment' onchange="show_form(this)">
                                    	<option value='void'>Choose an equipment</option>
                                    	<?php
                                    		include("_inc_connexion.php");
                                    		
                                    		$query = "SELECT id_equipment, equipment FROM T_equipment ORDER BY equipment ASC";
                                    		$rq = mysql_query($query) or die(mysql_error());
                                    		
                                    		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
                                    		{
                                    			$id_equipment = $row["id_equipment"];
                                    			$equipment = $row["equipment"];
                                    			
                                    			echo "<option value='$id_equipment'>$equipment</option>";
                                    		}
                                    		mysql_close();
                                    	?>
                                    </select>
                                    


                                    fichier : _inc_select_model.php

                                    <select id='select_model' name='select_model'>
                                    	<option value='void'>Choose a model</option>
                                    	<?php
                                    		include("_inc_connexion.php");
                                    		
                                    		$var=$_POST['var'];		
                                    		
                                    		$query = "SELECT id_model, model FROM T_model WHERE id_equipment='$var' ORDER BY model ASC";
                                    		$rq = mysql_query($query) or die(mysql_error());
                                    		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
                                    		{
                                    			$id_model = $row["id_model"];
                                    			$model = $row["model"];
                                    			
                                    			echo "<option value='$id_model'>$model</option>";
                                    		}	
                                    		mysql_close();
                                    	?>
                                    </select>
                                    


                                    et enfin le fichier javascript:

                                    function show_form(id_form)
                                    {		
                                        get_url(id_form.value);
                                    }
                                    
                                    
                                    function get_url(test)
                                    {
                                    	var selected = document.getElementById("select_equipment").options[document.getElementById("select_equipment").selectedIndex].value;
                                    	
                                    	$.ajax
                                    	(
                                    		{
                                    			type: "POST",
                                    			url: "_inc_select_model.php",
                                    			data: "var="+test,
                                    			success: 
                                    			function(msg)
                                    			{
                                    				$("#tr_test").append("<td class='title'><b>Model :</b></td><td>"+ msg +"</td>");
                                    				if(selected=="void") $("#tr_test").hide();
                                    				else $("#tr_test").show();
                                    			}
                                    		}
                                    	);
                                    }
                                    


                                    et le formulaire :

                                    					<tr>
                                    						<td class='title'><b>Equipment :</b></td><td><?php include('_inc_select_equipment.php')?></td>
                                    					</tr>
                                    					<tr id='tr_test'>
                                    					</tr>
                                    


                                    Y'a une tite fonction en plus, qui cache le 2ème menu déroulant tant que l'utilisateur n'a pas fait un choix dans le 1er menu déroulant.....
                                    1. Bonjour papymucho

                                      je me suis inspiré de votre code mai j'ai un problème, aucune erreur d'exécution, mais juste que la deuxième liste ne s'affiche pas et donc ne me permet pas un choix lorsque la première est renseigné.

                                      J'ai une première liste contenu dans une base de donnée concernant des catégories d'annuaire

                                      Le premier fichier _inc_select_catannu.php

                                      <select id="select_catannu" name="select_catannu" OnChange="show_form(this)">
                                      <option value="void">Catégorie</option>
                                      <?php
                                      include("connect.php");
                                      		$query = "SELECT id_catannu , catannu FROM wmi_categorie ORDER BY wmi_categorie . id_catannu ASC LIMIT 0, 100 ";
                                      		$rq = mysql_query($query) or die(mysql_error());
                                      		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
                                      		{
                                      			$id_cat = $row["id_catannu"];
                                      			$categorie = $row["catannu"];
                                      			echo "<option value='$id_cat'>$categorie</option>";
                                      		}
                                      include("disconnect.php");
                                      ?>
                                      </select>


                                      puis un deuxième fichier pour la seconde liste (sous catégorie de l'annuaire)
                                      Chaque catégorie donne accés à une liste de sous catégorie

                                      _inc_select_souscatannu.php

                                      <select id="select_souscat" name="select_souscat">
                                      <option value="void">Sous catégorie</option>
                                      <?php
                                      include("connect.php");
                                      		$var=$_POST['var'];
                                      		$query = "SELECT id_souscatannu , catannu , sous_catannu FROM wmi_souscategorie WHERE catannu='$var' ORDER BY sous_catannu ASC LIMIT 0, 300 ";
                                      		$rq = mysql_query($query) or die(mysql_error());
                                      		while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
                                      		{
                                      			$id_souscat = $row["catannu"];
                                      			$souscat = $row["sous_catannu"];
                                      			
                                      			echo ("<option value='$id_souscat'>$souscat</option>");
                                      		}
                                      include("disconnect.php");
                                      ?>
                                      </select>
                                      


                                      le code javascript inséré dans le <head> de ma page formulaire d'où je fait appel aux deux fichiers .php

                                      et enfin l'extrait de mon code html du fichier formulaire avec extention .php où
                                      j'ai inséré : <script type="text/javascript" src="jquery.js"></script> entre </head> et <body>

                                      ......
                                      ....
                                      ..
                                      function show_form(id_form)
                                      {		
                                          get_url(id_form.value);
                                      }
                                      function get_url(test)
                                      {
                                      	var selected = document.getElementById("select_catannu").options[document.getElementById("select_catannu").selectedIndex].value;
                                      	
                                      	$.ajax
                                      	(
                                      		{
                                      			type: "POST",
                                      			url: "_inc_select_souscatannu.php",
                                      			data: "var="+test,
                                      			success: 
                                      			function(msg)
                                      			{
                                      				$("#tr_test").append("<td class='title'><b>Sous catégorie</b></td><td>"+ msg +"</td>");
                                      				if(selected=="void") $("#tr_test").hide();
                                      				else $("#tr_test").show();
                                      			}
                                      		}
                                      	);
                                      }
                                      </script></head>
                                      <script type="text/javascript" src="jquery.js"></script>
                                      <body><form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
                                        <div align="center"></div>
                                      <p align="center">
                                      <table width="500" border="0" align="center">
                                      <p align="center">
                                      </p><tr>
                                            <td><font face="Verdana" size="2">Nom</font></td>
                                            <td><input name="champ1" type="text"></td>
                                          </tr><tr>
                                            <td><font face="Verdana" size="2">Prénom</font></td>
                                            <td><input name="champ2" type="text"></td>
                                          </tr><tr>
                                            <td><font face="Verdana" size="2">Titre du site</font></td>
                                            <td><input name="champ3" type="text"> (50 caractères maximum)</td>
                                          </tr><tr>
                                            <td><font face="Verdana" size="2">URL du site</font></td>
                                            <td><input name="champ4" type="text"> (http:// obligatoire)</td>
                                          </tr><tr>
                                            <td><font face="Verdana" size="2">Catégorie</font></td>
                                            <td><?php include('_inc_select_catannu.php')?></td>
                                         </tr><tr id='tr_test'>
                                         </tr><tr>
                                            <td width><font face="Verdana" size="2">Votre Email</font></td>
                                            <td width><input name="zone_email" type="text"></td>
                                          </tr><tr>
                                            <td valign="top"><font face="Verdana" size="2">Description (255 caractères maximum)</font></td>
                                            <td><textarea name="zone_texte" cols="40" rows="10"></textarea></td>
                                          </tr><tr>
                                            <td valign="top">
                                              <input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="4">
                                              <input name="nbre_zone_listecat" type="hidden" id="nbre_zone_listecat" value="1">
                                              <input name="nbre_zone_listecat" type="hidden" id="nbre_zone_listesouscate" value="1">
                                              <input name="nbre_zones_texte" type="hidden" value="1">
                                      	<input name="nbre_zone_email" type="hidden" value="1">
                                      	<input name="titre_champ1" type="hidden" value="Nom">
                                      	<input name="titre_champ2" type="hidden" value="Prénom">
                                      	<input name="titre_champ3" type="hidden" value="Titre du site (50 caractères maximum)">
                                      	<input name="titre_champ4" type="hidden" value="URL du site">
                                      	<input name="categorie_url" type="hidden" value="Catégorie">
                                      	<input name="souscate_url" type="hidden" value="Sous catégorie">
                                      	<input name="titre_email" type="hidden" value="Votre Email">
                                      	<input name="titre_zone" type="hidden" value="Description (255 caractères maximum)"></td>
                                            <td><div align="center">
                                      <input type="reset" name="Reset" value="Effacer">          
                                      <input type="submit" name="envoi" value="Envoyer">
                                              </div></td>
                                          </tr>
                                        </table>
                                        <div align="center"></div>
                                      </form></body></html>


                                      Ceci n'est qu'un extrait du code car il est assé long, j'ai des scripts de différentes vérifications et autres. L'ensemble du formulaire fonctionne correctement à l'exéption de la deuxième liste déroulante qui ne s'affiche pas aprés sélection dans la première.

                                      Pourriez vous si possible m'aider à vérifier ce code, car aprés plusieurs essai infructueux, je ne voi pas le problème, il est vrai que je ne suis pas dévelopeur, mais je me débrouille et là j'en perd mon latin....

                                      Merci
                                  2. J'ai des petits problèmes avec les balises ..... le texte est coupé avant la fin de la phrase...
                                    Du coup je suis obligé d'afficher la source pour voir le message en entier lorsque c'est nécessaire lol...
                                    C'est pareil pour vous? désolé pour le HS...
                                    • 1
                                    • 2
                                    • 3
                                    • 4