Listes déroulantes liées avec ajax
phoenix00
Messages postés
15
Statut
Membre
-
youssefb Messages postés 16 Statut Membre -
youssefb Messages postés 16 Statut Membre -
Bonjour,
Voila mon probleme :
j'ai un formulaire comprenant 2 listes déroulantes, l'une des noms de famille et l'autre des prénoms. Les données proviennent d'une base de données.
Je souhaiterais que lorsqu'un nom de famille est sélectionné, ne s'affiche que les prénoms correspondant.
J'ai réussi à faire cela en ajax, le prénom correspondant au nom s'affiche bien dans ma liste déroulante.
Le soucis est que lorsque j'envoie ce formulaire, je dois insérer le contenu de mes listes dans ma base de données cependant j'ai le message suivant qui s'affiche : 'undefined index prenom'
alors que le prenom est bien affiché dans ma liste mais il semblerait que PHP ne détecte aucune valeur.
Je ne vois pas quoi faire. Si vous avez une idée je suis preneur merci !
Voila mon probleme :
j'ai un formulaire comprenant 2 listes déroulantes, l'une des noms de famille et l'autre des prénoms. Les données proviennent d'une base de données.
Je souhaiterais que lorsqu'un nom de famille est sélectionné, ne s'affiche que les prénoms correspondant.
J'ai réussi à faire cela en ajax, le prénom correspondant au nom s'affiche bien dans ma liste déroulante.
Le soucis est que lorsque j'envoie ce formulaire, je dois insérer le contenu de mes listes dans ma base de données cependant j'ai le message suivant qui s'affiche : 'undefined index prenom'
alors que le prenom est bien affiché dans ma liste mais il semblerait que PHP ne détecte aucune valeur.
Je ne vois pas quoi faire. Si vous avez une idée je suis preneur merci !
A voir également:
- Listes déroulantes liées avec ajax
- Listes déroulantes excel - Guide
- Listes déroulantes en cascade excel - Guide
- Erreur ajax ✓ - Forum Javascript
- Yggtorrent erreur ajax ✓ - Forum Javascript
- Listes des nouveaux inscrits hommes jecontact ✓ - Forum Réseaux sociaux
14 réponses
https://www.toutjavascript.com/savoir/xmlhttprequest.php3
Je pense que l'exemple 5 est ce dont tu as besoin...
Je pense que l'exemple 5 est ce dont tu as besoin...
Poste une partie de ton code (celui ou il y a les listes de préférence^^), pour voir si je peux t'aider...
page formulaire :
page traitement javascript :
page traitement php :
Voila j'espère que c'est compréhensible et encore merci pour ton aide !
<tr><td align="right"><b>Nom de l'élève :</b></td>
<?php
echo "<td width='100' align='left'><div id='divNom' name='divNom' style='display:inline'>";
echo "<select name='nom' id='nom' onChange='goNom(),goFiche()' class='dyn'>";
echo "<option selected value='-1'></option>";
mysql_query("SET NAMES UTF8");
$sql = mysql_query("SELECT DISTINCT nom_etud FROM etudiant ORDER BY nom_etud;");
while ($row = mysql_fetch_array($sql)) //, MYSQL_ASSOC
{ echo "<option value=".$row['nom_etud'].">".$row['nom_etud'].""; }
echo '</select></div></td></tr><tr><td></td></tr>';
?>
<tr><td align="right"><b>Prénom de l'élève :</b></td>
<?php
echo "<td width='100' align='left'><div id='divPrenom' name='divPrenom' style='display:inline'>";
echo "<select name='prenom' id='prenom' onchange='goPrenom()' class='dyn'>";
echo "<option selected value='-1'></option>";
mysql_query("SET NAMES UTF8");
$sql = mysql_query("SELECT DISTINCT prenom_etud FROM etudiant ORDER BY prenom_etud;");
while ($row = mysql_fetch_array($sql))
{ echo "<option value=".$row['prenom_etud'].">".$row['prenom_etud'].""; }
echo '</select></div></td></tr><tr><td></td></tr>';
?>
page traitement javascript :
/* Méthode qui sera appelée sur le click du select nom */
function goNom(){
// ce IF permet de ne pas bloquer le select "prenom" lorsqu'on a effectué un choix sur chaque select
if (document.getElementById('nom').options[document.getElementById('nom').selectedIndex].value != document.getElementById('prenom').options[document.getElementById('prenom').selectedIndex].value)
{
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse à l'aide d'une fonction 'anonyme'
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('divPrenom').innerHTML = leselect;
}
}
// Ici on envoi la requete en post au fichier "http1.php"
xhr.open("POST","http1.php",true);
// ne pas oublier le header pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// enfin, on post les arguments, ici le nom de l'étudiant
sel = document.getElementById('nom');
id_nom = sel.options[sel.selectedIndex].value;
xhr.send("id_nom="+id_nom);
}
page traitement php :
// Changement du select nom
if (isset($_POST["id_nom"]))
{
// Regénération du select "prenom" lorsqu'ajax envoi "id_nom"
echo "<select name='prenom' id='prenom' class='dyn' onChange='goPrenom()'>";
if ($_POST["id_nom"]==-1)
{
$sql = mysql_query("SELECT * FROM etudiant ORDER BY prenom_etud");
echo "<option value='-1' SELECTED></option>";
}
else { $sql = mysql_query("SELECT prenom_etud, nom_etud FROM etudiant
WHERE nom_etud='".$_POST['id_nom']."' ORDER BY prenom_etud;"); }
$i=0; // permet de savoir si on a au moins un résultat
while($row = mysql_fetch_assoc($sql))
{
echo "<option value='".utf8_encode($row['prenom_etud'])."'>".utf8_encode($row['prenom_etud'])."</option>";
$i++;
}
if ($i==0) { echo" <option value='-1'>Aucun resultat</option>" ;}
echo "</select>";
}
Voila j'espère que c'est compréhensible et encore merci pour ton aide !
Dans la page formulaire, le deuxième select, il te manque </option> il me semble.
Je sais pas si c'est ça qui fait bugger...
Je sais pas si c'est ça qui fait bugger...
Oui en effet j'ai oublié le </option> aux 2 selects d'ailleurs. C'est corrigé mais toujours le même soucis...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait tu envoies ton formulaire comment ? Je ne vois aucun bouton submit dans ta page formulaire...
Je doute qu'on puisse t'aider avec si peu de code et je pense aussi que l'erreur se déclare ailleurs
Pour acceder à la valeur de l'option selectionnée dans prenom il faut simplement faire : document.getElementById('prenom').value vu que c'est déjà un select tu prend sa valeur qui lui est assignée automatiquement quand tu sélectionne ton option, pas la peine de te compliquer la vie.
Allège un peu ton code et met nous toute la partie du formulaire ainsi que le JS et la partie php que tu appelle avec ton ajax.
Pour acceder à la valeur de l'option selectionnée dans prenom il faut simplement faire : document.getElementById('prenom').value vu que c'est déjà un select tu prend sa valeur qui lui est assignée automatiquement quand tu sélectionne ton option, pas la peine de te compliquer la vie.
Allège un peu ton code et met nous toute la partie du formulaire ainsi que le JS et la partie php que tu appelle avec ton ajax.
ok je reposte le formulaire et j'allège un peu le code. pour ce qui est de la partie ajax je pense pas qu'il y ai de problème vu que j'arrive bien a envoyer le contenu du select 'nom' à ma page php. Ensuite le traitement php doit être correct du moins la requête car elle m'affiche bien le prénom correspondant au nom dans le select 'prenom' de mon formulaire.
Page formulaire.php :
J'ai essayé lors du clic sur le bouton 'valider' de faire un document.getElementById('nom').value et document.getElementById('prenom').value. Pour le nom il fonctionne bien, mais pour le prenom il m'affiche toujours 0. Comme si mon <option> n'avait pas de value et pourtant je le répète, le prénom correspondant au nom s'affiche bien dans le <select>.
Merci pour votre aide.
Page formulaire.php :
<form method="POST" action="ajout_etud.php">
<table>
<tr><td align="right"><b>Nom de l'élève :</b></td>
<?php
echo "<td width='100' align='left'><div id='divNom' name='divNom' style='display:inline'>";
echo "<select name='nom' id='nom' onChange='goNom()' class='dyn'>";
echo "<option selected value='-1'></option>";
mysql_query("SET NAMES UTF8");
$sql = mysql_query("SELECT DISTINCT nom_etud FROM etudiant ORDER BY nom_etud;");
while ($row = mysql_fetch_array($sql)) //, MYSQL_ASSOC
{ echo "<option value=".$row['nom_etud'].">".$row['nom_etud']."</option>"; }
echo '</select></div></td></tr>';
?>
<tr><td align="right"><b>Prénom de l'élève :</b></td>
<?php
echo "<td width='100' align='left'><div id='divPrenom' name='divPrenom' style='display:inline'>";
echo "<select name='prenom' id='prenom' onchange='goPrenom()' class='dyn'>";
echo "<option selected value='-1'></option>";
mysql_query("SET NAMES UTF8");
$sql = mysql_query("SELECT DISTINCT prenom_etud FROM etudiant ORDER BY prenom_etud;");
while ($row = mysql_fetch_array($sql))
{ echo "<option value=".$row['prenom_etud'].">".$row['prenom_etud']."</option>"; }
echo '</select></div></td></tr>';
?>
<tr><td></td><td align="right"><input type="submit" value="valider"></td></tr>
</table>
</form>
J'ai essayé lors du clic sur le bouton 'valider' de faire un document.getElementById('nom').value et document.getElementById('prenom').value. Pour le nom il fonctionne bien, mais pour le prenom il m'affiche toujours 0. Comme si mon <option> n'avait pas de value et pourtant je le répète, le prénom correspondant au nom s'affiche bien dans le <select>.
Merci pour votre aide.
Je sais pas si ça peut faire avancer les choses mais dans ta boucle pour le prénom tu as un ; dans les guillemets après </option>.
Bon franchement je vois pas du tout pourquoi ça marche pas....
est-ce que t'as essayé de mettre des cotes comme ça pour la value : echo "<option value='".$row['prenom_etud']."'>
est-ce que t'as essayé de mettre des cotes comme ça pour la value : echo "<option value='".$row['prenom_etud']."'>
j'avais pris connaissance de cet exemple mais j'ai toujours le même problème...