Page 1 sur 1

recuperation donnée liste deroulante

Posté : 24 juin 2008, 17:25
par ouzbek
bonjour à tous,

voila j'ai créer une page de 3 listes deroulantes liées tirée d'un base de donnée et qui marche correctement.

sur ces trois listes deroulantes j'arrive à recuperer les données de la premiere liste (reference) mais pas celle de la 2nde (designation) ni de la 3ème (qte).

si vous avez une solution, des tutoriaux sur le sujet je suis preneur!

je vous mets une partie du code

index.php

Code : Tout sélectionner

<script type='text/javascript'> //requete1 function go(){ var xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; document.getElementById('designation').innerHTML = leselect; } } xhr.open("POST","./ajax1.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('Id_ref'); id_ref = sel.options[sel.selectedIndex].value; xhr.send("Id_ref="+id_ref); } </script> </head> <body> <form action="envoi_elec.php" method="post" enctype="multipart/form-data"> <legend>commande</legend><br><br> <label>Ref</label> <select name='ref' id='Id_ref' onchange='go();'> <option value='ref_pdt'>reference</option> <?php //requete3 include ('connexion.php'); $res = mysql_query("SELECT * FROM ref_elec"); while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["ref_pdt"]."'>".$row["ref_pdt"]."</option>"; } ?> </select> <label>Des</label> <div id='designation' style='display:inline'> <select name='designation'> <option value='designation'>designation</option> </select> </div> <br><br> <input type="submit" value="envoyer"> </form>
et qui renvoie vers ajax1.php

Code : Tout sélectionner

<?php //requete1 if(isset($_POST["Id_ref"])){ if ($db=mysql_connect('$a,'$b','$c') ) { if (mysql_select_db('$b',$db) ) { $requete = 'SELECT des.id, des.des_pdt, des.Qte, des.Id_ref FROM ref_elec as ref LEFT JOIN des_elec as des ON des.Id_ref = ref.id WHERE ref.ref_pdt = "' . mysql_escape_string($_POST['Id_ref']) . '"'; if ($res = mysql_query($requete) ) { echo "<select name='designation'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["des_pdt"]."'>".$row["des_pdt"]."</option>"; } echo "</select>"; } if ($res = mysql_query($requete) ) { echo ' <label> colis </label>'; echo "<select name='qte'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["Qte"]."'>".$row["Qte"]. "</option>"; } echo "</select>"; } else { echo "Erreur de requête"; } } else { echo "Erreur sélection de base de données"; } } else { echo "Erreur de connexion mysql"; } } else { echo "Id_ref non défini"; } ?>
merci d'avance

Posté : 25 juin 2008, 08:24
par Ryle
Quand tu fais appel à ta fonction go(), tu n'envois au serveur que la valeur de la première liste :
xhr.send("Id_ref="+id_ref); 
Il est donc normal que tu ne récupère que celle-ci :)
xhr.send("Id_ref="+id_ref+"&liste2="+valListe2+"&..."); 

Posté : 25 juin 2008, 14:04
par ouzbek
merci pour ta reponse

j'ai essayé ca :
  
xhr.send("Id_ref="+id_ref+"&designation="+designation);
mais cela ne marche pas il me renvoi ref_pdt!
je pense que c'est parce que la requete est fait a partir de ajax1.php et non pas de index.php?

merci

Posté : 25 juin 2008, 14:19
par guilt92
Comment as tu récupérer la valeur designation ?
Aussi, si le but est que le choix dans designation fasse le lien vers une 3eme liste déroulante il faudrait ajouter le "onchange" aussi sur ta liste designation...

Posté : 25 juin 2008, 14:26
par ouzbek
salut guilt92,

alors j'arrive a recuperer la reference dans un fichier .txt mais je n'arrive pas à recuperer la designation!

c'est la tout le probleme.
merci

Posté : 25 juin 2008, 14:35
par guilt92
Si tu procédes de la meme facon que pour Id_ref ca fonctionne pas ?

(oublie pas de rajouter id="designation" dans ton select dans les 2 fichiers)

Code : Tout sélectionner

<select name='designation' id='designation'>
Puis, comme pour l'autre :

Code : Tout sélectionner

sel = document.getElementById('Id_ref'); id_ref = sel.options[sel.selectedIndex].value; des = document.getElementById("designation"); val_des = sel.options[des.selectedIndex].value; xhr.send("Id_ref="+id_ref+"&designation="+val_des);

Posté : 25 juin 2008, 14:57
par ouzbek
non ca ne marche pas!
il me met erreur sur la page et ne m'affiche plus mes listes deroulantes!
lol

Posté : 25 juin 2008, 15:01
par guilt92
Poste le code dans sa version actuelle stp

Posté : 25 juin 2008, 15:04
par ouzbek
index.php

Code : Tout sélectionner

<script type='text/javascript'> //var xhr = null; // Renvoie le texte de l'objet ActiveXObject le plus récent depuis une liste var pickRecentProgID = function (idList){ // found progID flag var bFound = false; for(var i=0; i < idList.length && !bFound; i++){ try{ var oDoc = new ActiveXObject(idList[i]); o2Store = idList[i]; bFound = true; }catch (objException){ // trap; try next progID }; }; if (!bFound) throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez à mettre à jour votre navigateur"); idList = null; return o2Store; } // Retourne un nouvel objet XmlHttpRequest var GetXmlHttpRequest_AXO=null var GetXmlHttpRequest=function () { if (window.XMLHttpRequest) { return new XMLHttpRequest() } else if (window.ActiveXObject) { if (!GetXmlHttpRequest_AXO) { GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]); } return new ActiveXObject(GetXmlHttpRequest_AXO) } return false; } // Compatibilité avec le script du tutoriel AJAX (developpez.com) getXhr=GetXmlHttpRequest; /** * Méthode qui sera appelée sur le click du bouton */ //requete1 function go(){ var xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; document.getElementById('designation').innerHTML = leselect; } } xhr.open("POST","./ajax1.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('Id_ref'); id_ref = sel.options[sel.selectedIndex].value; xhr.send("Id_ref="+id_ref); } </script> </head> <body> <form action="envoi_elec.php" method="post" enctype="multipart/form-data"> <legend>commande</legend><br><br> <label>Ref</label> <select name='ref' id='Id_ref' onchange='go();'> <option value='ref_pdt'>reference</option> <?php //requete3 include ('connexion.php'); $res = mysql_query("SELECT * FROM ref_elec"); while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["ref_pdt"]."'>".$row["ref_pdt"]."</option>"; } ?> </select> <label>Des</label> <div id='designation' style='display:inline'> <select name='designation' id="designation"> <option value='designation'>designation</option> </select> </div> <label> Nbre pièces </label> <input type="text" name="piece" size="1"> <br><br> <input type="submit" value="envoyer"> </form>
ajax1.php

Code : Tout sélectionner

<?php //requete1 if(isset($_POST["Id_ref"])){ if ($db=mysql_connect($a,'$b','$c') ) { if (mysql_select_db('$b',$db) ) { $requete = 'SELECT des.id, des.des_pdt, des.Qte, des.Id_ref FROM ref_elec as ref LEFT JOIN des_elec as des ON des.Id_ref = ref.id WHERE ref.ref_pdt = "' . mysql_escape_string($_POST['Id_ref']) . '"'; if ($res = mysql_query($requete) ) { echo "<select name='designation'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["des_pdt"]."'>".$row["des_pdt"]."</option>"; } echo "</select>"; } if ($res = mysql_query($requete) ) { echo ' <label> colis </label>'; echo "<select name='qte'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["Qte"]."'>".$row["Qte"]. "</option>"; } echo "</select>"; } else { echo "Erreur de requête"; } } else { echo "Erreur sélection de base de données"; } } else { echo "Erreur de connexion mysql"; } } else { echo "Id_ref non défini"; } ?>
voila les codes

Posté : 25 juin 2008, 15:15
par guilt92
(oublie pas de rajouter id="designation" dans ton select dans les 2 fichiers)
je l'avais pourtant mis en gras... :)

dans ton deuxième fichier tu recrées ton formulaire description il faut que tu redefinisse

Code : Tout sélectionner

echo "<select name='designation' id='designation' >";
sinon après en js tu as un document.getElementById("designation") qui ne peut pas marcher...

Posté : 25 juin 2008, 15:51
par ouzbek
excuse moi j'avais pas vu de les mettre dans les 2 fichiers!

mais ca ne marche toujours pas il me met erreur sur la page!

index.php

Code : Tout sélectionner

<script type='text/javascript'> //var xhr = null; // Renvoie le texte de l'objet ActiveXObject le plus récent depuis une liste var pickRecentProgID = function (idList){ // found progID flag var bFound = false; for(var i=0; i < idList.length && !bFound; i++){ try{ var oDoc = new ActiveXObject(idList[i]); o2Store = idList[i]; bFound = true; }catch (objException){ // trap; try next progID }; }; if (!bFound) throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez à mettre à jour votre navigateur"); idList = null; return o2Store; } // Retourne un nouvel objet XmlHttpRequest var GetXmlHttpRequest_AXO=null var GetXmlHttpRequest=function () { if (window.XMLHttpRequest) { return new XMLHttpRequest() } else if (window.ActiveXObject) { if (!GetXmlHttpRequest_AXO) { GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]); } return new ActiveXObject(GetXmlHttpRequest_AXO) } return false; } // Compatibilité avec le script du tutoriel AJAX (developpez.com) getXhr=GetXmlHttpRequest; /** * Méthode qui sera appelée sur le click du bouton */ //requete1 function go(){ var xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; document.getElementById('designation').innerHTML = leselect; } } xhr.open("POST","./ajax1.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('Id_ref'); id_ref = sel.options[sel.selectedIndex].value; des = document.getElementById('designation'); val_des = sel.options[des.selectedIndex].value; xhr.send("Id_ref="+id_ref+"&designation="+val_des); } </script> </head> <body> <form action="envoi_elec.php" method="post" enctype="multipart/form-data"> <legend>commande</legend><br><br> <label>Ref</label> <select name='ref' id='Id_ref' onchange='go();'> <option value='ref_pdt'>reference</option> <?php //requete3 include ('connexion.php'); $res = mysql_query("SELECT * FROM ref_elec"); while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["ref_pdt"]."'>".$row["ref_pdt"]."</option>"; } ?> </select> <label>Des</label> <div id='designation' style='display:inline'> <select name='designation' id="designation"> <option value='designation'>designation</option> </select> </div> <label> Nbre pièces </label> <input type="text" name="piece" size="1"> <br><br> <input type="submit" value="envoyer"> </form>
ajax1.php

Code : Tout sélectionner

<?php //requete1 if(isset($_POST["Id_ref"])){ if ($db=mysql_connect($a,'$b','$c') ) { if (mysql_select_db('$b',$db) ) { $requete = 'SELECT des.id, des.des_pdt, des.Qte, des.Id_ref FROM ref_elec as ref LEFT JOIN des_elec as des ON des.Id_ref = ref.id WHERE ref.ref_pdt = "' . mysql_escape_string($_POST['Id_ref']) . '"'; if ($res = mysql_query($requete) ) { echo "<select name='designation'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["des_pdt"]."'>".$row["des_pdt"]."</option>"; } echo "</select>"; } if ($res = mysql_query($requete) ) { echo ' <label> colis </label>'; echo "<select name='qte' id='designation'>"; while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row["Qte"]."'>".$row["Qte"]. "</option>"; } echo "</select>"; } else { echo "Erreur de requête"; } } else { echo "Erreur sélection de base de données"; } } else { echo "Erreur de connexion mysql"; } } else { echo "Id_ref non défini"; } ?>

Posté : 25 juin 2008, 16:22
par guilt92
1ere erreur (de ma faute, désolé quand j'ai donné le bout de code)

Code : Tout sélectionner

sel = document.getElementById('Id_ref'); id_ref = sel.options[sel.selectedIndex].value; des = document.getElementById("designation"); val_des = sel.options[des.selectedIndex].value; xhr.send("Id_ref="+id_ref+"&designation="+val_des);
il faut mettre val_des = des.options[des.selectedIndex].value; et non pas sel.

Sinon que t'affiche le message ?

essaye de faire un alert(""+xhr.responseText; ); pour voir ce que le code te renvoies aussi...

Posté : 25 juin 2008, 17:00
par ouzbek
j'ai changé merci!
moi mon plus j'avais pas vu l'erreur!
mais ca ne marche toujour pas et il me met toujours erreur sur la page!
et qd je met l'alerte plus rien ne marche.

Posté : 25 juin 2008, 17:06
par guilt92
C'est quoi l'erreur ??
Si tu mets un alert à la place de "leselect = xhr.responseText;" ca plante ?
je pense qu'il va falloir que tu fasse un debug progressif, d'abord tu fais dans ton ajax un simple echo "bonjour" et tu vois si l'alert de la reponse xhr est bonne, ensuite une fois que ca c'est bon tu construit au fur et à mesure...

Posté : 25 juin 2008, 18:44
par ouzbek
alors qd je met l'alert sans les modification que tu me demande, il m'affiche l'alert.
mais qd je rajoute les lignes que tu m'a donner il ne m'affiche plus rien

voila ou j'ai mis l'alert :
function go(){
			   var xhr = getXhr();
			   xhr.onreadystatechange = function(){
			      if(xhr.readyState == 4 && xhr.status == 200){			  
					leselect = xhr.responseText;
					document.getElementById('designation').innerHTML = leselect;
              alert(leselect);
			      }
			   }
			   
			   xhr.open("POST","./ajax1.php",true);
			   xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			   sel = document.getElementById('Id_ref');
			   id_ref = sel.options[sel.selectedIndex].value;
        	   xhr.send("Id_ref="+id_ref);
			}