[ajax] listes liées

J'ai utilisé la méthode exposée dans le tuto https://siddh.developpez.com/articles/ajax/#LIV-A
mais j'ai transposé à une table tb_pays et une table tb_ville....

j'ai beau cherché l'erreur, ma seconde liste est toujours vide quand je choisis un pays....
<?php include("haut.php") ; // contient la connexion avec la base ?>
<div id="corps">
		<script type='text/javascript'>
			var xhr = null; 
	 
			function getXhr(){
				if(window.XMLHttpRequest) // Firefox et autres
				   xhr = new XMLHttpRequest(); 
				else if(window.ActiveXObject){ // Internet Explorer 
				   try {
			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
			            } catch (e) {
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
				}
				else { // XMLHttpRequest non supporté par le navigateur 
				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				   xhr = false; 
				} 
			}
			
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function go(){
				getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('ville').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","ajaxville.php",true);
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments
				// ici, l'id du pays
				sel = document.getElementById('pays');
				idpays = sel.options[sel.selectedIndex].value;
				xhr.send("id_pays="+idpays);
			}
		</script>
		<form>
			<fieldset>
				<legend>lieux:</legend>
				<label>pays</label>
				<select name='pays' id='pays' onchange='go()'>
					<option value='-1'>Aucun</option>
					<?
						$res = mysql_query("SELECT * FROM tb_pays ORDER BY id_pays");
						while($row = mysql_fetch_assoc($res)){
							echo "<option value='".$row["id_pays"]."'>".$row["pays"]."</option>";
						}
					?>
				</select>
				<label>ville</label>
				<div id='ville' style='display:inline'>
				<select name='ville'>
					<option value='-1'>Choisir un pays</option>
				</select>
				</div>
			</fieldset>
		</form>
	</div>
	
<?php include("bas.php") ?>


et le fichier ajaxville.php
<?php
	echo "<select name='ville'>";
	if(isset($_POST["id_pays"])){
		$id_pays = $_POST["id_pays"];
		mysql_connect("localhost","root","");
		mysql_select_db("base_setlist");
		$res = mysql_query("SELECT * FROM tb_ville WHERE id_pays = $idpays ORDER BY ville");
		while($row = mysql_fetch_assoc($res))
		{
			echo "<option value='".$row["id_ville"]."'>".$row["ville"]."</option>";
		}
	}
	echo "</select>";
?>


merci:D

36 réponses

Résumé de la discussion

Problème central : la mise à jour d'une liste déroulante dépendante (ville) après le choix d'un pays via AJAX dans un exemple utilisant tb_pays et tb_ville. La cause fréquente est une incohérence de nom de variable dansajaxville.php, où la requête utilise idpays au lieu de id_pays, ce qui empêche la condition WHERE d'accéder aux lignes correspondantes. La correction consiste à utiliser le même nom de variable (id_pays) dans la requête et à s'assurer que la valeur envoyée via POST est id_pays, afin que la liste des villes se remplisse. En outre, vérifier que le script renvoie bien des options HTML et que la liste « ville » ne soit pas remontée à vide après remplacement par innerHTML.

Bobot (l’IA à votre service)
  1. il n'y a rien a télécharger

    le principe d'AJAX:
    - sur un evenement (un onChange d'une liste par ex) on appelle une fonction Javascript/ajax

    qui va en arrière plan, sans recharger la page, appeler un script php sur le serveur en lui passant la valeur selectionnées ds la liste1

    - ce script va lire ds la BDD et genrer une liste2 et l'envoyer en réponse à Ajax

    - à la réception de la réponse, Ajax va écrire la liste par innerHTML dans un div de ta page

    <html>
    <head>
    <script type="text/javascript">
    //fonction AJAX
    //partie envoie de la requette, cette fct est appelée sur le onChange de la liste1
    function makeRequest(url,id_lire,id_ecrire){
     var http_request = false;
      //créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                    http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            if (!http_request) {
                alert('Abandon :( Impossible de créer une instance XMLHTTP');
                return false;
            }
            http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
      // lancement de la requete
      http_request.open('POST', url, true);
      //changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
      http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      obj=document.getElementById(id_lire); //on vient lire la valeur selectionnée ds la liste1
      data="localisation="+obj.value; //on envoie la valeur au script php en POST
            http_request.send(data);
    }
    
    //partie traitement de la réponse
    function traitementReponse(http_request,id_ecrire) {
     //qd on recoit la reponse:
     if (http_request.readyState == 4) {
      if (http_request.status == 200) {
         // cas avec reponse de PHP en mode texte:
       var reponse=http_request.responseText;
       //alert(reponse); //TEST
       
       // on va ecrire la réponse, c a d la liste2 dans le div qui a pour id  id_ecrire
       var obj=document.getElementById(id_ecrire);
        obj.innerHTML=reponse;
      } 
      else {
                    alert('Un problème est survenu avec la requête.');
            }
        }
    }
    </script>
    </head>
    <body>
    <table>
    <td align="center" style="border:2px solid">
    <form action='result-affaire.php' method='POST'>
    <select name="localisation" id="id_liste1" onChange="makeRequest('reponsePhpAjax.php','id_liste1','id_div_liste2');">
    //on appelle la fct sur le onChange en lui passant l'url du script php appelé,l'id de la liste 1, l'id ou iol faut ecrire la réponse
    <?php
    
    $sql='SELECT Localisation FROM affaire';
    $list=mysql_query($sql) or die("Erreur de connexion au serveur SQL");
    echo'<option>Sélectionnez la localisation</option>';
    while ($data = mysql_fetch_array($list)){
     echo'<option value='.$data['*'].'>'.$data['Localisation'].'</option>';
    }
    ?>
    </select>
    <p></p>
    <input type="submit" name="affcicher" value="Afficher">
    </form>
    </td>
    </table>
    <div id="id_div_liste2"><!-- c'est la que par innerHTML AJAX va ecrire la liste2 --></div>
    
    //ce n'est pas le script result-affaire.php  qu'il faut appeler mais par exemple reponsePhpAjax.php
    
    </body>
    </html>
    


    le code de reponsePhpAjax.php:
    <?php
     //recup de la valeur passée par Ajax, valeur selectionnée dans la liste 1
     $localisation=$_POST['localisation'];
     //connexion bdd
     mysql_connect......
     mysql_select_db.....
     //requette
     $sql="SELECT * FROM affaire WHERE Localisation='$localisation';";
     $list=mysql_query($sql) or die("Erreur de connexion au serveur SQL");
     $reponse='<select name="nom_affaire">';
     $reponse.='<option>Sélectionnez le nom de l affaire</option>';
     while ($data = mysql_fetch_array($list)){
      $reponse.='<option value='.$data['idAffaire'].'>'.$data['NomAff'].'</option>';
    
     }
     $reponse.='</select>';
    
     //on envoie la reponse, c'est a dire la liste complete ainsi generée à AJAX
     echo $reponse;
    ?>
    
    1. personne? je pige toujours pas pourquoi ça marche pas...

      merci...
      1. g exactement le meme soucis... pourtant le tuto à l'air clean. je n'arrive meme pas à faire marcher l'exemple donné (sans rienc changer), la deuxième liste reste vite qd on change la première... as suivre...
      2. @spalcsuite a mon précédent post - du nouveau (en bien)
        J'ai eu le meme soucis en recopiant exactement le code de SIDDH sur developpez.com. Impossible de le faire marcher, la deuxième liste reste vide.
        Par contre en téléchargeant l'archive zip contenant toutes les sources de l'article de SIDDH, ca marche (le code est par endroit différent que celui du tutoriel).
        Il faudra juste mettre en commentaire "alert(xhr.readyState);" dans auteurs.php pour éviter les alertes, et ca marche très bien (pour moi en tout cas sous WAMP).
      3. ol migo como te illemasse
    2. Le problème peut être dû à l'emplacement du fichier ajax.php. J'avais mis mon fichier ajax.php dans le dossier ou j'en avais besoin mais en fait il était impossible de l'appeler, j'ai donc mis mon ajax.php dans ma racine. ++
      1. sel = document.getElementById('pays'); c'est la que ca va pas pourquoi "pays"?
        1. Bonsoir,

          dans ta page:

          <div id='ville' style='display:inline'>
              <select name='ville'>
               <option value='-1'>Choisir un pays</option>
              </select>
              </div>
          


          tout ce qui est entre <div id='ville' style='display:inline'> et </div> ne sert à rien puisque tu va écrire par la réponse Ajax <select .... et toutes les options

          Mais ce n'est pas ça qui gène.

          Essayes en mettant comme requette dans ajax.ph:

            $res = mysql_query("SELECT * FROM tb_ville WHERE id_pays = <bold>'".$id_pays."'</bold> ORDER BY ville");
          


          car tu as mis $id_pays = $_POST["id_pays"]; un peu plus haut, donc pas bonne variable

          de plus il faut des ' de part et d'autre de la valeur à tester.

          @lain
          1. Salut alain42!

            Je suis attentivement tes discussions en relations avec les listes déroulantes depuis un moment ==> un grand bravo pour ta patience!!
            J'ai essayé de réutiliser ton code car je suis débutant et stagiaire, et que ce dont j'ai besoin est exactement la solution que tu proposes!!

            Par contre je rencontre un petit soucis au niveau de ma deuxiéme requete. En effet tout fonctionne trés bien jusqu'a la selection dans la premiere liste, ensuite le navigateur m'affiche un message d'alerte "un probléme est survenu au niveau de la requete"!!
            J'ai essayé de retourner cette requete dans tous les sens mais ça ne marche pas!!

            J'ai vu que tu as "sauvé" pas mal de personnes, pourraIs-tu en sauver une de plus STP???

            je te donnerais plus de renseignements dans mon prochain post si tu me réponds ;)

            Merci
          2. @NikoninhoSalut,

            oui je peux te donner un petit coup de main si tu veux.

            Quel est ton pb ?

            @lain
          3. @Alain_42C'est génial!! j'ai réussi à l'adapter merci beaucoup!!!!!!!
            J'ai bataillé toute la journée ;)

            J'aurais peut-être besoin d'aide un peu plus tard pour quelques conseils.

            En tout cas bravo c'est super comme code!

            Encore merci
          4. @Alain_42Salut ALAIN!

            Je me permet de te re-déranger pour te poser quelques petites questions :

            - Je voudrais afficher (dans le rep_PhpAjax.php) le titre de la seconde liste déroulante comme suit :
            <strong><font color="blue">Adresse : </font></strong>
            Comment dois-je m'y prendre ?

            - Je souhaiterais effectuer une autre application de ton code, je m'explique :
            Je souhaite faire apparaître un champs de texte avec une valeur dedans lorsque l'on fait un choix (et uniquement ce choix la) dans la premiere liste déroulante....

            J'ai essayé de réutiliser ton code mais je ne suis pas parvenu à le faire marcher, car il est vrai que je n'ai pas tout compris!!
            Je te montre les parties de code que j'ai réadapté :

            CODE :

            branchement.php (qui remplace "listes_liees.php")
            
            <form name="test1" method="post" action="branchement.php"  >
            
            <strong><font color="blue">Source demande : </font></strong>
            	<select name="Sourcedelademande" onsubmit="document.test1.submit();" />
            	<option value=" "> </option>			
            			<option value="SGE" id="sge" onChange=
            "makeRequest('datesge.php','sge','datesge')"> SGE </option>
            		
            			<option value="MAIL" > MAIL </option>
            			
            			<option value="COURRIER" > COURRIER </option>
            				
            			<option value="1DG" > 1DG </option>
            			
            			<option value="CAHORS" > CAHORS </option>
            						
            			<option value="TELACTF" > TEL ACTF </option>
            					
            			<option value="PhysiqueATCF" > Physique ATCF </option>
            				
            			<option value="PôleConseil" > Pôle Conseil </option>
            					
            			<option value="FAX" > FAX </option>
            			
            	</select>
            
            <div id="datesge">
            	<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
            	</div>
            


            datesge.php (Qui remplace rep_PhpAjax.php)

            <?php
            // construction du champ texte
            $aff="";
            $aff=$aff."
            <input name='Sourcedelademande' id='sourcedemande' value="
            <?php echo $jour;echo "/";echo $mois;echo "/";echo $annee;?>">
            // envoi reponse Php a Ajax	
            	echo $aff;
            ?>
            

            MERCI
        2. bonsoir;

          j'avais le même problème, mais sur firefox seulment;

          le probleme :

          document.getElementById('ville').innerHTML = leselect;

          cette instruction remplace le contenu html de la DIV "ville"; donc le select nomé "livre" sera replacé par un autre, et même si ils ont le même nom (le nouveau et l'ancien select), le firefox ne réussi pas à traiter le nouveau select,

          la solution et de garder l'ancien select mais de supprimer son contenu (les options) et le remplacer par un autre, une petite requête sur le "Sheikh" google, j'ai trouver cette "fatwa" :

          http://www.dhtmlgoodies.com/index.html?whichScript=ajax_chained_select

          c bien fait et réussi,

          good luck
          1. enfin une info pertinente sur ce sujet ô combien sensible. merci...
        3. bonjour redwire,
          j'ai le même problème que toi si t' as encore ton code pourra tu le poster SVP !!
          1. Bonjour, j'ai moi aussi un problème avec l'application de ce tutoriel. Quelqu'un pourrait-il m'aider à l'appliquer?? Merci d'avance de votre aide.
            1. Bonjour,

              Il y a quelques chose que je n'ai toujours pas compris avec AJAX, quels fichiers telecharger ??

              Car je cherche moi aussi à faire une liste déroulante, et faire en sorte qu'une seconde liste déroulante se trouvant sur une autre page affiche certains résultats en fonction de la premiere.

              Ma premiere liste déroulante sur index.php :

              <table>
                 <td align="center" style="border:2px solid">
                  <form action='result-affaire.php' method='POST'>
                   <select name="Affaire">
                    <?php
                     $sql='SELECT Localisation FROM affaire';
                     $list=mysql_query($sql) or die("Erreur de connexion au serveur SQL");
                     {echo'<option>Sélectionnez la localisation</option>';}
                     while ($data = mysql_fetch_array($list))
                      {echo'<option value='.$data['*'].'>'.$data['Localisation'].'</option>';}
                    ?>
                   </select>
                  <p></p>
                  <input type="submit" value="Afficher">
                  </form>
                 </td>


              et ma seconde sur result-affaire.php :

               $_SESSION['Localisation']=$_POST['Affaire'];
                ?>
                
                <select name="Localisation">
                 <?php
                  if($_SESSION['Localisation']>0) 
                  {
                   $sql="SELECT * FROM affaire WHERE Localisation='$_SESSION[Localisation]';";
                   $list=mysql_query($sql) or die("Erreur de connexion au serveur SQL");
                   {echo'<option>Sélectionnez le nom de l affaire</option>';}
                   while ($data = mysql_fetch_array($list))
                    {echo'<option value='.$data['idAffaire'].'>'.$data['NomAff'].'</option>';}
                  }
                 ?>


              Si quelqu'un pouvait m'eclairer parce que je n'ai rien saisi a ce qu'est vraiment AJAX, ce qui je pense pourrait m'etre d'une grande aide !
              1. OK je vous remercie pour cette réponse rapide et efficace.

                Seulement maintenant j'ai un autre soucis :
                Suite à un choix dans une liste déroulante, sur une nouvelle page s'affiche le nom, l'adresse, le tel et l'e-mail de toutes les occurrences concernées (par le choix fait dans la liste déroulante, qui est un numéro de département).
                A coté de chaque suite de données (j'entends par la le nom, l'adresse, le tel et l'e-mail), j'y ai mis un bouton afin qu'ensuite on puisse accéder à d'autres détails de la suite de données choisie.
                Seulement j'ai déclaré une variable de session et comme celle ci n'est pas incrémentée elle s'écrase à chaque passage dans la boucle, voici le code :

                --resultaff.php--
                <?php
                 session_start();
                ?>
                <[https://www.commentcamarche.com/contents/498-html-langage html]>
                 <body>
                  <form action='affinterv2.php' method='POST'>
                   <?php 
                    $user="root";
                    $host="localhost";
                    $bdd="terawatt";
                    mysql_connect($host,$user) or die("Erreur de connexion au serveur SQL");
                    mysql_select_db($bdd); 
                    
                    $_SESSION['Localisation']=$_POST['Affaire'];
                   ?>
                   <table style="border:2px solid">
                     <tr align="center">
                      <th width=200 height=35 style="border:1px solid">Département/Pays</th>
                      <th width=200 height=35 style="border:1px solid">Nom</th>
                      <th width=200 height=35 style="border:1px solid">Adresse</th>
                      <th width=200 height=35 style="border:1px solid">Etat</th>
                      <th width=200 height=35 style="border:1px solid">Intervenants</th>
                     </tr>
                     <?php
                      $sql="SELECT * FROM affaire WHERE Localisation='$_SESSION[Localisation]';";
                      $list=mysql_query($sql) or die("Erreur de la requête SQL");
                      while ($Donnees = mysql_fetch_array($list)) 
                      {
                     ?>
                     <tr align="center">
                      <td width=200 height=35><?php echo $Donnees['Localisation']; ?></td>
                      <td width=200 height=35><?php echo $Donnees['NomAff']; ?></td>
                      <td width=200 height=35><?php echo $Donnees['Adresse']; ?></td>
                      <td width=200 height=35><?php echo $Donnees['Etat']; ?></td>
                      <td width=200 height=35><input type="submit" value="Voir les intervenants"></td>
                     </tr>
                     <?php 
                      $_SESSION['NomAff']=$Donnees['NomAff'];
                      } 
                     ?>      
                   </table>
                  </form>
                 </body>
                </html>


                Et j'aimerais pouvoir l'utiliser dans une reqûete d'une autre page du coup, en voici le code (en phase de test pour l'instant) :

                --affinterv2.php--
                <?php
                 session_start();
                ?>
                <html>
                 <body>
                  <form action='affinterv.php' method='POST'>
                   <?php 
                    $user="root";
                    $host="localhost";
                    $bdd="terawatt";
                    mysql_connect($host,$user) or die("Erreur de connexion au serveur SQL");
                    mysql_select_db($bdd); 
                    
                    $sql="SELECT Localisation, NomAff, Adresse, Etat FROM affaire WHERE Localisation='$_SESSION[Localisation]' AND NomAff='$_SESSION[NomAff]';";
                    $list=mysql_query($sql) or die("Erreur de la requête SQL");
                    $Donnees = mysql_fetch_array($list);
                    
                    echo $Donnees['NomAff'];
                   ?>
                  </form>
                 </body>
                </html>
                


                J'ai pensé à faire un tableau mais je n'ai pas su l'exploiter cela ne m'affiche rien de rien, alors que comme ça s'affichera seulement sur affinterv2.php, le nom de la derniere suite de données passée dans le tableau de resultaff.php. Et cela meme si je clique sur le bouton d'où, par exemple, le nom est "tartempion" qui se trouve en debut ou milieu du tableau, j'aurais toujours le nom du dernier inscrit sur le tableau.

                Donc voila si vous pouviez m'aider, car je ne comprends rien à ces tableaux...
                Merci par avance.
                1. J'ai aussi pensé à nommer la balise <input> seulement ça ne fonctionne pas non plus....
                  1. Dans ton cas il n'y a aucun interêt à utiliser les sessions

                    il faut mettre un lien a chaque ligne, si tu préféres un bouton tu peux toujours mettre une image de bouton à la place

                    -resultaff.php--

                    <html>
                    <body>
                    <form action='affinterv2.php' method='POST'>
                    <?php
                    $user="root";
                    $host="localhost";
                    $bdd="terawatt";
                    mysql_connect($host,$user) or die("Erreur de connexion au serveur SQL");
                    mysql_select_db($bdd);
                    
                    //$_SESSION['Localisation']=; 
                    ?>
                    <table style="border:2px solid">
                    <tr align="center">
                    <th width=200 height=35 style="border:1px solid">Département/Pays</th>
                    <th width=200 height=35 style="border:1px solid">Nom</th>
                    <th width=200 height=35 style="border:1px solid">Adresse</th>
                    <th width=200 height=35 style="border:1px solid">Etat</th>
                    <th width=200 height=35 style="border:1px solid">Intervenants</th>
                    </tr>
                    <?php
                    $sql="SELECT * FROM affaire WHERE Localisation='$_POST['Affaire'];";
                    $list=mysql_query($sql) or die("Erreur de la requête SQL");
                    while ($Donnees = mysql_fetch_array($list))
                    {
                    ?>
                    <tr align="center">
                    <td width=200 height=35><?php echo $Donnees['Localisation']; ?></td>
                    <td width=200 height=35><?php echo $Donnees['NomAff']; ?></td>
                    <td width=200 height=35><?php echo $Donnees['Adresse']; ?></td>
                    <td width=200 height=35><?php echo $Donnees['Etat']; ?></td>
                    <!-- on met un lien qui va appeler la page affinterv2.php en lui passant par l'url les parametres localisation et nom-->
                    <td width=200 height=35><a href="affinterv2.php?loc=<?php echo $Donnees['Localisation']; ?>&nom=<?php echo $Donnees['NomAff']; ?>">Voir les intervenants</a></td>
                    </tr>
                    <?php
                    //$_SESSION['NomAff']=$Donnees['NomAff'];
                    }
                    ?>
                    </table>
                    </form>
                    </body>
                    </html> 
                    


                    et affinterv2.php

                    <html>
                    <body>
                    <form action='affinterv.php' method='POST'>
                    <?php
                    if(issset($_GET['loc'])) {
                     $localisation=$_GET['loc'];
                    }
                    if(issset($_GET['nom'])) {
                     $nomAff=$_GET['nom'];
                    }
                    $user="root";
                    $host="localhost";
                    $bdd="terawatt";
                    mysql_connect($host,$user) or die("Erreur de connexion au serveur SQL");
                    mysql_select_db($bdd);
                    
                    $sql="SELECT Localisation, NomAff, Adresse, Etat FROM affaire WHERE Localisation='$localisation' AND NomAff='$nomAff';";
                    $list=mysql_query($sql) or die("Erreur de la requête SQL");
                    $Donnees = mysql_fetch_array($list);
                    
                    echo $Donnees['NomAff'];
                    ?>
                    </form>
                    </body>
                    </html>
                    
                    
                    1. Encore merci de votre réponse qui est elle aussi tres efficace, seulement je ne comprends pas pourquoi du coup on parle de $_GET dans affinterv2.php alors que resultaff.php contient un formulaire avec $_POST ??
                      1. on parle de $_GET dans affinterv2.php alors que resultaff.php contient un formulaire avec $_POST

                        parce que le script est appelé non pas par le <formulaire mais par le lien et on récupére l'info dans l'URL de ce lien
                        1. Ok ok je vois, bah je te remercie encore une fois Alain, et te souhaite une bonne soirée.

                          En te disant peut etre a une prochaine ^^, surement meme je pense.

                          Merci beaucoup de ton aide et de ton efficacité :)
                          1. Bonjour, encore moi, j'aurais besoin d'un eclaircissement sur le code ajax que tu m'as donné, les "id_lire", et "id_ecrire" sont bien à remplacer par les id de chaque liste ?? Et "url", par reponsePhpAjax.php( dans ton exemple) c'est bien ça ? ou par la nom de la page dans laquelle il y a ce code ??

                            Merci
                            1. NON , dans cette partie:

                              //fonction AJAX
                              //partie envoie de la requette, cette fct est appelée sur le onChange de la liste1
                              function makeRequest(url,id_lire,id_ecrire){
                              .....
                              


                              il ne faut surtout pas remplace id_lire, id_ecrire ce sont des noms de variable correspondant aux argulents passés à la fonction, ainsi la fonction est "universelle"

                              par contre dans la partie appel de la fct:

                              <form action='result-affaire.php' method='POST'>
                              <select name="localisation" id="id_liste1" onChange="makeRequest('reponsePhpAjax.php',<bold>'id_liste1','id_div_liste2'</bold>);">
                              <!-- on appelle la fct sur le onChange en lui passant l'url du script php appelé,l'id de la liste 1, l'id ou iol faut ecrire la réponse-->
                              


                              il faut bien mettre les valeurs correspondant au id= de la liste 1 et à id= du div ou tu veux ecrire
                              1. En effet ça marche beaucoup mieux :) J'avoue avoir quelques difficultés à comprendre l'ajax et tes conseils et explications m'aident beaucoup !

                                Merci encore
                                1. J'ai trouvé.... =D
                                2. Moi j'ai script ajax telecharger pour liste liée, le dexieme niveau depend du premier niveau mon probleme c'est que lorsque je choisie valeur dans le premier champ le deuxieme niveau reste vide.

                                  Comment faire pour que je losrque je choisie valeur dans premier niveau j'aurais resultat?
                              2. Je pensais encore à autre chose, si jamais dans ma deuxieme liste au lieu qu'elle ne s'affiche qu'au moment d'avoir fait un choix dans la premiere. Si elle pouvait s'afficher directement en ayant le choix de tous les nom d'affaires et qu'apres choix, le résultat de la liste 1 s'applique, même si l'on en a pas plus vraiment besoin.
                                Comment je dois procéder, parce qu'en remplaçant le div par select, cela m'affiche une liste vide donc et surtout qui ne prends pas la nouvelle liste qui est appelée (ce qui est normal ^^). Ou alors changer la forme sous laquelle se présente la requête appelée ???
                                1. Bonjour,

                                  je suis entrain d'integrer liste liée comportants les champs suivants:

                                  region,departement et ville mon probleme c'est si je choisis n'importe quelle region le champ departement reste vide et meme bien sur champ ville. J'ai cette fonction qui ne retourne pas resultat ça ce que j'ai remarquer, je sais pas si sa rentre a la structure de la bd alors que j'ai fait les champs selon les requetes select, et j'ai pas bien compris le $id c quoi c'est en ajax
                                  je vais vous donner ma fonction qui ne retourne pas resultat

                                  public function getRegionById($id)
                                  {
                                  $prepare = $this->prepare('SELECT region_id, region_name
                                  FROM region
                                  WHERE region_id = "'.$id.'"');
                                  $prepare->execute();
                                  $region = $prepare->fetchAll();

                                  return $region;
                                  }

                                  merci d'avance
                                2. Bonjour,

                                  je veux integrer un dossier contenant liste liee en ajax mais je sais comment l'integrer sachant que ma liste liee est contenue dans un dossier, lorsque je clique sur ce dossier la liste liee s'affiche mais je sais pas comment mettre cette liste dans dans une page php, c-à-d comment je peux appeler ce dossier, qui contient tout les fichiers pour faire liste liée, dans une page php

                                  prière m'aider
                                3. Bonjour
                                  je veux savoir comment ajouter un quatrième niveau dans une liste liée comme l'exemple pubilée de region, departement, ville
                                  prière m'aider
                              3. Par contre je n'arrive pas a faire en sorte que si je choisis directement dans ma seconde liste, le résultat de la premiere en soit définit automatiquement ??
                                J'ai essayé de faire comme suit :
                                - créer une autre page "reponseAjax" pour cette requête
                                - j'ai bien mis l'espace <select> de la premiere liste dans un <div> afin que la liste soit remplacée par le résultat en fonction du choix dans la seconde liste

                                et j'ai regardé le script, ne serait ce pas dans ce code la que je dois changer quelque chose ???
                                • 1
                                • 2