2 Liste déroulantes liées + récupération de la valeur de la 2éme liste

cs_didine6 81 Messages postés vendredi 19 novembre 2004Date d'inscription 7 août 2009 Dernière intervention - 6 août 2009 à 17:49 - Dernière réponse : Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention
- 7 août 2009 à 12:13
Bonjour à tous,

Je débute avec Ajax, et je trouve cette technique trop trop bien, notamment pour alimenter une seconde liste déroulante depuis la sélection de la première. ça fonctionne tbien.
Mon problème, c'est que j'ai besoin de récupérer les valeurs de chacune des listes déroulantes, et que je ne récupère que la première.
D'où vient mon pb ? J'ai cherché sur le net, mais pas trouvé.
Voici des bouts de mon code (que j'ai repris d'un super tuto d'ailleurs pour la partie ajax).
<script type='text/javascript'>
function getXhr(){
var xhr = null;
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;
}
return xhr;
}

/**
* Méthode qui sera appelée sur le click du bouton
*/
function go(){
var xhr = 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('code').innerHTML = leselect;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","ajaxetab.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 de l'auteur
sel = document.getElementById('type');
type = sel.options[sel.selectedIndex].value;
xhr.send("type="+type);
}
</script>
</head>
<?php
echo "<form name='ajout_insc' action='dossier.php?num_enfant=".$_GET['num_enfant']."&fiche=insc' method='POST'>";
echo "<tr><td>"; ?>
<select name='type' id='type' onchange='go()'>
<option value='-1'>Aucun</option>
<?
$sql="SELECT DISTINCT type FROM phoebe.etablissement ORDER BY type";
$conn = oci_connect("Phoebe", "guitare", "MIBA");
$res=ociparse($conn, $sql); //préparation de la req
//si la req ne fonctionne pas, on affiche l'erreur correspondante
if(!$res){
$e=$oci_error($conn);
return htmlentities($e['message']);
}
ociexecute($res); //exécution de la req
while($req=oci_fetch_array($res,OCI_BOTH)) {
echo "<option value='".$req[0]."'>".$req[0]."</option>";
}
?>
</select></td>
<td colspan='2'>


</td>

?>

Page ajaxetab.php

<?php
echo "<select name='code'>";
if(isset($_POST["type"])){
$conn = oci_connect("Phoebe", "guitare", "MIBA");
$sql = "SELECT code,nom FROM etablissement
WHERE type='".$_POST["type"]."' ORDER BY nom";
$res=ociparse($conn, $sql); //préparation de la req
//si la req ne fonctionne pas, on affiche l'erreur correspondante
if(!$res){
$e=$oci_error($conn);
return htmlentities($e['message']);
}
ociexecute($res); //exécution de la req
while($req=oci_fetch_array($res,OCI_BOTH)) {
echo "<option value='".$req[0]."'>".$req[1]."</option>";
}
}
else {echo "<option value='-1'>Choisir un type</option>";}
echo "</select>";
?>

Merci @ tous.
Didine
Afficher la suite 

5 réponses

Répondre au sujet
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 7 août 2009 à 08:18
0
Utile
Bonjour,

>>je débute avec Ajax, et je trouve cette
>>technique trop trop bien,
bah, c'est n'est jamais que appel d'un script
sur le serveur et la réponse de celui-ci est
rendue dans une variable
ça peut-être intéressant...
si on emploie à bon escient
et pas à tort et à travers
( faut pas tenter de réinventer le
dialogue normal serveur/client )

>>j'ai besoin de récupérer les valeurs de chacune
>>des listes déroulantes, et que je ne récupère
>>que la première.
récupérer ? où ?
coté javascript : onchange sur le select
coté serveur : faut l'appeler ce serveur
peut-être avec ajax.
faites, pour la 2ème liste, de la même
manière que vous récupérez le choix
pour la 1ère liste.


Cordialement [mon Site] [M'écrire] Bul
Commenter la réponse de Bul3
cs_didine6 81 Messages postés vendredi 19 novembre 2004Date d'inscription 7 août 2009 Dernière intervention - 7 août 2009 à 08:33
0
Utile
Merci de votre réponse,
En fait c'est exactement ce que je fait, mais je n'ai aucune valeur.
Je récupère en POST
//Le 'inserer' est le nom du bouton submit qui n'apparait pas dans mon code dans le 1er post
if(IsSet($_POST['inserer'])) {
echo "ok insertion";
echo "
Code : ".$_POST['code'];
echo "
Type : ".$_POST['type'];
echo "
Date: ".$_POST['date_insc'];
}
J'ai bien type et date_insc, par contre, le code est vide...
C'est peut être tout simplement que ma seconde liste déroulante est dans la page ajaxetab.php et que du tout, dans la page d'appel, il ne connait pas la variable ?!?

Didine
Commenter la réponse de cs_didine6
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 7 août 2009 à 10:04
0
Utile
affichez donc la page résultante, pas le php

à priori, lors du changement sur le 1er select
vous mettez un 2ème select dans le div 'code'
echo "<select name= 'code'>";
pour lequel, il n'y pas d'action onchange ....
donc, rien ne se passe lorsque vous
faites un choix dans ce 2ème select.
remarque :
et <select name ="code">
ça va vous poser des problèmes avec IE
( qui remplace l'ID par le name s'il n'existe
pas et inversement )
Commenter la réponse de Bul3
cs_didine6 81 Messages postés vendredi 19 novembre 2004Date d'inscription 7 août 2009 Dernière intervention - 7 août 2009 à 10:33
0
Utile
Ben oui, il n'y a pas d'événement onChange car je veux le gérer avec PHP.
Comme la balise select est dans une balise <form>, il devrait transmettre la valeur sélectionnée.

Et merci pour la remarque, des id avec le même nom, je n'y avais pas fait attention.


Didine
Commenter la réponse de cs_didine6
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 7 août 2009 à 12:13
0
Utile
donc le div 'code' est dans le form,
puisque c'est là qu'on insère le select ?
il ne me semble pas...

et pas vu de </form> d'ailleurs
ni de bouton submit
ni de submit() en js...
il est transmis comment ce formulaire ?
Commenter la réponse de Bul3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.