3 listes déroulantes liées par AJAX
Posté : 13 sept. 2006, 01:08
Bonjour à tous,
j'ai repris l'exemple de Xenon_54 sur les listes déroulantes liées par Ajax , adapté pour php4.
Tout fonctionne très bien pour les deux premières listes (pays et régions) , mais je n'arrive à rien pour lier la 3e (départements) à la 2e (régions)...
Je ne vois pas trop comment procéder, c'est pourquoi je sollicite votre aide
je vous met le code qui fonctionne avec 2 listes, en espérant que vous voudrez bien accepter mes faibles connaissances en développement web et donc m'aider à inclure la 3e liste !
index.php
rpc.php
j'ai repris l'exemple de Xenon_54 sur les listes déroulantes liées par Ajax , adapté pour php4.
Tout fonctionne très bien pour les deux premières listes (pays et régions) , mais je n'arrive à rien pour lier la 3e (départements) à la 2e (régions)...
Je ne vois pas trop comment procéder, c'est pourquoi je sollicite votre aide
je vous met le code qui fonctionne avec 2 listes, en espérant que vous voudrez bien accepter mes faibles connaissances en développement web et donc m'aider à inclure la 3e liste !
index.php
<?php
require './config.inc.php';
$mysql = mysql_connect($hote, $user, $pwd);
if (FALSE == mysql_select_db($base, $mysql)) {
exit('Could not connect to database: ' . mysql_error());
}
// pays initiaux
$sql = 'SELECT idp, pays FROM pays';
?>
<script type="text/javascript" src="regions.js"></script>
<form action="submit.php" method="post" id="form">
<p>Sélectionnez un pays:
<select name="pays_form" id="pays_form" onchange="updateRegions(this.value)">
<?php
if (FALSE !== ($res = mysql_query($sql, $mysql))) {
while ($row = mysql_fetch_assoc($res)) {
printf('<option value="%s">%s</option>', $row['idp'], $row['pays']);
}
mysql_free_result($res);
}
mysql_close($mysql);
?>
</select>
</p>
<p>Sélectionnez une région:
<select name="reg_form" id="reg_form" ></select>
</p>
<p>Selectionnez un département:
<select name="dep_form" id="dep_form"></select>
</p>
<p><input type="submit" value="Soumettre" />
</form>
regions.jsCode : Tout sélectionner
var ajax;
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
if (typeof XMLHttpRequest!='undefined') {
ajax = new XMLHttpRequest();
}
}
}
function updateRegions(pays) {
ajax.open('get', 'rpc.php?pays=' + pays);
ajax.onreadystatechange = handleResponse;
ajax.send(null);
}
function handleResponse() {
if(ajax.readyState == 4) {
var data = ajax.responseXML.getElementsByTagName('region');
document.getElementById('reg_form').innerHTML = '';
for(var i=0;i<data.length;i++) {
var option = document.createElement('option');
option.setAttribute('value',data[i].getAttribute("id"));
option.appendChild(document.createTextNode(data[i].firstChild.nodeValue));
document.getElementById('reg_form').appendChild(option);
}
}
}
function initForm() {
document.getElementById('pays_form').selectedIndex = 0;
updateRegions(document.getElementById('pays_form').value);
}
if (window.addEventListener) {
window.addEventListener("load", initForm, false);
} else if (window.attachEvent){
window.attachEvent("onload", initForm);
}
<?php
if (FALSE === isset($_GET['pays'])) {
exit;
}
$pays = intval($_GET['pays']);
require './config.inc.php';
$mysql = mysql_connect($hote, $user, $pwd);
if (FALSE == mysql_select_db($base, $mysql)) {
exit;
}
header('Content-Type: text/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
$sql = 'SELECT idr, region ' .
'FROM regions ' .
'WHERE id_p=' . $pays;
if ($res = mysql_query($sql, $mysql)) {
$rpc = '<message>';
while ($row = mysql_fetch_assoc($res)) {
$rpc .= sprintf('<region id="%u">%s</region>', $row['idr'], $row['region']);
}
mysql_free_result($res);
$rpc .= '</message>';
}
else {
$rpc = '<message/>';
}
mysql_close($mysql);
echo utf8_encode($rpc);
?>