Lier 3 listes deroulantes

Fermé
gicibo - 1 août 2009 à 12:36
 gicibo - 1 août 2009 à 15:31
Bonjour,
je souhaiterais lier 3 listes déroulantes le principe est le suivant: Liste des continents dans le premier menu déroulant liste des pays dans le deuxième et liste des régions du pays dans le troisième en fonction du choix du continent les pays s'affichent dans la deuxième liste et en fonction du choix du pays les régions de ce pays s'affiche dans le troisième menu déroulant. en AJAX j'ai réussi à lier deux listes mais j'arrive pas pour le moment à lier le troisième menu. de prime à bord je vous remercier pour votre aide qui me sera très précieuse et je tiens aussi à signale que malgré mes connaissance en développement je commence à peine dans AJAX. Je vous remercie
A voir également:

7 réponses

mouf13 Messages postés 142 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 22 février 2011 17
1 août 2009 à 15:16
eh ca fait peur ;)


creer une fonction js pour ton appel ajax comme tu as fait sauf qu'en plus tu lui passe un parametre qui correspond au div qui va recevoir le bloc avec les 3 listes


function dpt(mondiv){
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(mondiv).innerHTML = leselect;
}
}

ensuite dans ton code html
<div id="mes_listes">
<?php
ici ton appel sur la fonction contenant les liste
echo exemple(array(
'ID_CONTINENT' => $_REQUEST['id_continent'],
'ID_PAYS' => $_REQUEST['id_pays'] ));
?>
</div>

ici j'ai oublié un truc important dans les onload
// $aParams est un tableau
function exemple($aParams) {
// Ta liste continent avec le onload qui appele cette function ex : onload="dpt(\'index.php?ma_methode.'&id_continent=\'+this.value, \'mes listes\';
echo $liste_continent;

//test si un continent est passé
if(isset($aParams['ID_CONTINENT']) && !empty($aParams['ID_CONTINENT'])) {
alors on affiche la box pays avec le onload qu'il faut onload="dpt(index.php?ma_methode.'&id_pays=\'+this.value, \'mes_listes\');
}
//test si le pays est passé pour afficher la ville
if(isset($aParams['ID_PAYS']) && !empty($aParams['ID_PAYS'])) {
alors on affiche la box avec le listing ville
}
}


le principe :
sur ta premiere d'appel tu creer un div contenant le resultat de l'appel a la methode contenant tes 3 listes
par defaut il n'y aura donc aucun parametres passé, donc tu n'aura que la liste des continent, en effet dans la methode exemple on lui dit de n'afficher la boite pays que si un id_continent est passé, as moment la tu fait ta requete sql en fonction de cet id.
idem pour la troisieme liste sauf que je le traitement ne se fera que si un id_pays est passé.
1
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
1 août 2009 à 12:39
Heu
ben tu fais comme pour la liaison entre les 2 premieres listes :O
Vu que tu l'as déjà fait entre la liste 1 et la liste 2, c'est la meme chose entre la liste 2 et la liste 3
0
deja merci pour cette reaction rapide face à ce probleme mais comme vous pouvez vous en douter j'ai justement essayer de faire comme pour le menu 1 et menu 2 mais cela ne marche pas pour le 2 et 3
0
mouf13 Messages postés 142 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 22 février 2011 17
1 août 2009 à 14:26
si c'est de l'ajax voici ce que je ferai :
une fonction (ou methode) qui contiend logiquement tes 3 box :

// $aParams est un tableau
function exemple($aParams) {
// Ta liste continent avec le onload qui appele cette function ex : onload="index.php?ma_methode.'&id_continent=\'+this.value;
echo $liste_continent;

//test si un continent est passé
if(isset($aParams['ID_CONTINENT']) && !empty($aParams['ID_CONTINENT'])) {
alors on affiche la box pays avec le onload qu'il faut onload="index.php?ma_methode.'&id_pays=\'+this.value;
}
//test si le pays est passé pour afficher la ville
if(isset($aParams['ID_PAYS']) && !empty($aParams['ID_PAYS'])) {
alors on affiche la box avec le listing ville
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
1 août 2009 à 14:37
Après ca dépend comment tu récupères ta 2nde liste déroulante
on peut avoir la page qui te la fait (celle qui est appelée par AJAX normalement ^^) ?
0
une fois de plus merci pour votre reaction de plus en plus contributible à une evantuelle solution et pour etre plus concret je vais vous expliquer ce que je suis entrain de faire j'ai trois table dans mysql qui sont Region ou province comme vous voulez, une autre Departements et enfin une troisième Ville qui font reference à un pays Africain donc je suis entrain de developper un site pour. J'ai un premier menu Province un deuxieme Department et un Dernier Ville. et j'ai les formulaire suivant : index.php, traitement_departement.php, traitement_ville.php.
dans le formulaire index.php on a l'extrait de code suivant :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Province et vile </title>
<script type='text/javascript'>
function dpt(){
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('Departements').innerHTML = leselect;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","traitement_departement.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('Provinces');
idregion = sel.options[sel.selectedIndex].value;
xhr.send("Refregion=" + idregion);
}


function ville(){
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('Villes').innerHTML = leselect;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","traitement_ville.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('Departements');
idpt = sel.options[sel.selectedIndex].value;
xhr.send("RefDPT=" + idpt);
}


</script>

</head>

<body>

<form id="form3">
<fieldset style="width: 1000px">
<legend>Liste liees</legend>
<label>Provinces</label>
<select name='Provinces' id='Provinces' onchange='dpt'>
<option value='-1'>Selectionner une province</option>
<?php

mysql_connect(localhost, root, 101010);
mysql_select_db(discount);

$query = mysql_query("SELECT * FROM province ORDER BY Region ASC");
while ($back = mysql_fetch_assoc($query)) {
echo "\t\t\t\t<option value=\"" . $back["codePro"] . "\">" . $back["Region"] . "</option>\n";
}
?>

</select>
<label>Les Departements</label>
<div id='Departements' style='display:inline'>
<select name='Departements' onchange='ville()'>
<option value='-1'>Selectionnez un département</option>
</select>
</div>

<br/>


</select>
<label>Les Villes</label>
<div id='Villes' style='display:inline'>
<select name='Villes'>
<option value='-1'>Selectionnez une ville</option>
</select>
</div>



</form>
</body>
</html>


dans le formulaire traitement_departement.php on a l'extrait de code suivant :

<?php
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
echo "<select name='Departements' onchange='ville()'>";
if(isset($_POST["Refregion"])){
mysql_connect(localhost, root, 101010);
mysql_select_db(discount);
$res = mysql_query("SELECT * FROM departement
WHERE Refregion=".$_POST["Refregion"]." ORDER BY departement");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["codeDPT"]."'>".$row["Departement"]."</option>";
}
}

echo "</select>";
?>



dans le formulaire traitement_villes.php on a l'extrait de code suivant :


<?php
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
echo "<select name='Villes'>";
if(isset($_POST["RefDPT"])){
mysql_connect(localhost, root, 101010);
mysql_select_db(discount);
$res = mysql_query("SELECT * FROM ville
WHERE RefDPT=".$_POST["RefDPT"]." ORDER BY Villes");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["CodeVille"]."'>".$row["Villes"]."</option>";
}
}
echo "</select>";
?>

pas de soucis pour Les departements en fonction du choix effectué dans le menu province.
le probleme c'est : les villes en fonction du choix effectué dans le menu departements une fois qu il est chargé par le choix effectué dans le premier menu province.
merci d'avance pour vos diverses reactions
0
je vous remercie bien de toutes ces precisions mais comme je vous ai dis au debut je suis encore à mes debuts dans ce langage mais je vais m y mettre à fond en esperant resoudre rapidement ce petit soucis qu à cela ne tienne si quelqu un à d'autres idées elle seront toujours la bienvue car j'avoue que j'en ai besoin
0