A voir également:
- Lier 3 listes deroulantes
- Picasa 3 - Télécharger - Albums photo
- Créer des listes déroulantes excel - Guide
- Ai suite 3 download - Télécharger - Optimisation
- Excel listes déroulantes en cascade - Guide
- Photorecit 3 - Télécharger - Visionnage & Diaporama
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
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é.
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é.
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
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
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
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
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
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
}
}
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
}
}
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
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 ^^) ?
on peut avoir la page qui te la fait (celle qui est appelée par AJAX normalement ^^) ?
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
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
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