recuperation donnée liste deroulante

Petit nouveau ! | 8 Messages

24 juin 2008, 17:25

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 juin 2008, 08:24

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+"&..."); 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

25 juin 2008, 14:04

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

Mammouth du PHP | 1353 Messages

25 juin 2008, 14:19

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 14:26

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

Mammouth du PHP | 1353 Messages

25 juin 2008, 14:35

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);
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 14:57

non ca ne marche pas!
il me met erreur sur la page et ne m'affiche plus mes listes deroulantes!
lol

Mammouth du PHP | 1353 Messages

25 juin 2008, 15:01

Poste le code dans sa version actuelle stp
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 15:04

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

Mammouth du PHP | 1353 Messages

25 juin 2008, 15:15

(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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 15:51

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"; } ?>

Mammouth du PHP | 1353 Messages

25 juin 2008, 16:22

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 17:00

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.

Mammouth du PHP | 1353 Messages

25 juin 2008, 17:06

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

25 juin 2008, 18:44

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);
			}