Bonjour,

je reprends le sujet "Résolu": http://www.developpez.net/forums/d17...listes-chaine/

Mon formulaire sélectionne dans un 1er temps un Pays (id = country), qui va influencer donc les régions dans le SELECT (liste) suivant, Régions (id = region) et ainsi de suite...

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var xhr = null; 
function getXhr(){
	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; 
	} 
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function go(){
	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('region').innerHTML = leselect;
		}
	}
	// Ici on va voir comment faire du post
	xhr.open("POST","ajaxregion.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('country');
	idcountry = sel.options[sel.selectedIndex].value;
	xhr.send("idcountry="+idcountry);
}
function goreg(){
	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('department').innerHTML = leselect;
		}
	}
	// Ici on va voir comment faire du post
	xhr.open("POST","ajaxdepartment.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('region');
	idesp = sel.options[sel.selectedIndex].value;
	xhr.send("idregion="+idregion);
}
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<TR>
	<TD><font face="Verdana" size="2">Country:</font></TD>
	<TD>
		<select name='country' id='country' onchange='go()'>
			<option value='-1'>Choose a country</option>
<?PHP
$res = mysql_query("SELECT idcountry, country, idcontinent FROM gd_loccountries ORDER BY country ASC");
while($row = mysql_fetch_assoc($res)){
	echo "<option value='".$row["idcountry"]."'>".$row["country"]."</option>";
}
>
		</select>
	</TD>
</TR>
<TR>
	<TD><font face="Verdana" size="2">County / Region:</font></TD>
	<TD>
		<div id='regions' style='display:inline'>
			<select name='region' id='region'>
				<option value='-1'>Choose a region</option>
			</select>
		</div>
	</TD>
</TR>

voilà le ajaxregion.php:

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?php
echo "<select name='region'  id='region' onchange='godep()'>";
if(isset($_REQUEST["idcountry"])){
	$res = mysql_query("SELECT idregion, region, idcountry FROM gd_locregions WHERE idcountry=".$_REQUEST["idcountry"]." ORDER BY region ASC");
	while($row = mysql_fetch_assoc($res)){
		echo "<option value='".$row["idregion"]."'>".$row["region"]."</option>";
	}
}
else
	echo "<option value='-1'>Choose the region</option>";
echo "</select>";
?>

et le ajaxdepartment.php:

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?php
echo "<select name='department'  id='department''>";
if(isset($_REQUEST["idregion"])){
	$res = mysql_query("SELECT iddepartment, department, idregion FROM gd_locdepartment WHERE idregion=".$_REQUEST["idregion"]." ORDER BY department ASC");
	while($row = mysql_fetch_assoc($res)){
		echo "<option value='".$row["iddepartment"]."'>".$row["department"]."</option>";
	}
}
else
	echo "<option value='-1'>Choose the department</option>";
echo "</select>";
?>

Le SELECT Pays fonctionne correctement, il va chercher bêtement via la requête les pays, jusque là tout va bien...
Seulement, lorsque j'en choisis un, le SELECT Region se vide, il n'y a même plus l'option "Choose..."

Remarque, les requêtes utilisées ont été testées individuellement et elle retourne un résultat et fonctionne correctement.

D'où vient le problème ? entre la chaise et le clavier ?

Merci d'avance pour votre aide.