J'ai galéré pour trouvé ca, mais j'ai réussi à le trouvé.. attend jte balance le code.. Il te faudrat 5 pages en tout..
D'abord tu crées un fichier scriptlistederoulante.js
et tu colle tout ça dedans:
<script type="text/javascript">
var Ld1Id=''; //initialisation des variables
var Ld2Id='';
var id_liste='';
function ValideLd2(val) {
Ld1Id=val; //id_service
id_liste='2';//Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante
var LD_URL = 'ValideLd2.php?Ld1='+Ld1Id;
ObjetXHR(LD_URL)
// Réinitialisation de Ld3 si modification de LD1 après passage en Ld2
if (Ld2Id!='') {ValideLd3(''); }
}
function ValideLd3(val) {
Ld2Id=val; //id_cellule
id_liste='3'; //Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante
var LD_URL = 'ValideLd3.php?Ld1='+Ld1Id+'&Ld2='+Ld2Id;
if (Ld2Id=='') {var LD_URL = 'ValideLd3.php';}
ObjetXHR(LD_URL)
}
function ObjetXHR(LD_URL) {
//creation de l'objet XMLHttpRequest
if (window.XMLHttpRequest) { // Mozilla,...
xmlhttp=new XMLHttpRequest();
//if (xmlhttp.overrideMimeType) {
//xmlhttp.overrideMimeType('text/xml');
//}
xmlhttp.onreadystatechange=ChargeLd;
xmlhttp.open("GET", LD_URL, true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//xmlhttp.setRequestHeaders("Content-Encoding","latin1");
xmlhttp.setRequestHeader( "Content-type", "charset=utf-8" );
xmlhttp.send(null);
} else if (window.ActiveXObject) { //IE
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
if (xmlhttp) {
xmlhttp.onreadystatechange=ChargeLd;
xmlhttp.open('GET', LD_URL, false);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send();
}
}
// Bouton non apparent car modification de LD1 ou Ld2
document.getElementById('buttons').style.display='none';
}
// fonction pour manipuler l'appel asynchrone
function ChargeLd() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status==200) {
//span id="niv2" ou "niv3"
document.getElementById('niv'+id_liste).innerHTML=xmlhttp.responseText;
if (xmlhttp.responseText.indexOf('disabled')<=0) {
//focus sur liste déroulante 2 ou 3
document.getElementById('Liste'+id_liste).focus();
}
}
}
}
function Affiche_Btn() {
document.getElementById('buttons').style.display='inline';
}
</script>
Ensuite ben tu crée une page valideLD1.php (ta première liste déroulante) :
et tu mets tout ca dedan..
<?PHP
include ("connexionBDD.php");//connexion a la BDD
$rq="Select..... ;"; // Ici tu fais la requete qui renvoi tout ce que tu veux afficher dan la première liste
$rq_pos_id=0; //position dans le SQL de la clé de la liste déroulante idem dans ValideLd2.php et ValideLd3.php
$rq_pos_val=1; //position dans le SQL de la valeur de la liste déroulante idem dans ValideLd2.php et ValideLd3.php
$result= mysql_query ($rq) or die ("Select impossible");
$retour = '<select style="width: 320" name="Liste1" id="Liste1" size="1" onchange="ValideLd2(this[this.selectedIndex].value);">'; // Jte conseil de tout laissé par défault
$retour .= '<option selected value="">< Choisissez ></option>';
if (mysql_num_rows($result) != 0)
{
while ($row = mysql_fetch_row($result))
{
$retour .= '<option value="'. $row[$rq_pos_id] .'">'. $row[$rq_pos_val] .'</option>';
}
$retour .= '</select>';
} else {
$retour = '<input id="size" type="text" size="10" value="Aucune valeur" disabled>';
}
mysql_free_result($result);
mysql_close();
echo $retour;
Maintenant tu crées un autre fichier valideLD2.php et tu mets tout ça à l'intérieur:
<?PHP
include ("connexionBDD.php");
$Ld1_retour =''; //id_département clé de la liste déroulante 1
if (isset($_GET['Ld1'])) {$Ld1_retour = $_GET['Ld1'];}
if ($Ld1_retour!='') {
$rq="Select ... from ... where ...=".$Ld1_retour.";";//Requete retournant les infos a afficher par rapport a la 1ere liste.
$rq_pos_id=0;
$rq_pos_val=1;
$result= mysql_query ($rq) or die ("Select impossible");
$retour = '<select style="width: 320" name="Liste2" id="Liste2" size="1" onchange="ValideLd3(this[this.selectedIndex].value);">';
$retour .= '<option selected value="">< Choisissez></option>';
if (mysql_num_rows($result) != 0) {
while ($row = mysql_fetch_row($result)) {
$retour .= '<option value="'. $row[$rq_pos_id] .'">'. $row[$rq_pos_val] .'</option>';
}
$retour .= '</select>';
} else {
$retour = '<select style="width: 320" name="Liste2" id="Liste2" size="1" disabled><option>Aucune valeure</option></select>';
}
mysql_free_result($result);
mysql_close();
}else{
$retour = '<select style="width: 320" name="Liste2" id="Liste2" size="1" disabled>Aucune valeure< Cellule ></option></select>';
}
echo $retour;
Ensuite le fichier valideLD3.php et tu mets tout ca :
<?PHP
include ("connexionBDD.php");
$Ld1_retour =''; //id_département clé de la liste déroulante 1
$Ld2_retour =''; //id_commune clé de la liste déroulante 2
if (isset($_GET['Ld1'])) {$Ld1_retour = $_GET['Ld1'];}
if (isset($_GET['Ld2'])) {$Ld2_retour = $_GET['Ld2'];}
if (($Ld1_retour!='')&&($Ld2_retour!='')) {
$rq="Select ..... from .....
WHERE ... =".$Ld1_retour."
AND .... =".$Ld2_retour.";";// Arange toi avec les requetes
$rq_pos_id=0;
$rq_pos_val=0;
$result= mysql_query ($rq) or die ("Select impossible");
$retour = '<select style="width: 320" name="Liste3" id="Liste3" size="1" onchange="Affiche_Btn();">';
$retour .= '<option selected value="">< Choisissez ></option>';
if (mysql_num_rows($result) != 0) {
while ($row = mysql_fetch_row($result)) {
$retour .= '<option value="'. $row[$rq_pos_id] .'">'. $row[$rq_pos_val] .'</option>';
}
$retour .= '</select>';
} else {
$retour = '<select style="width: 320" name="Liste3" id="Liste3" size="1" disabled>Aucune valeure< Utilisateur ></option></select>';
}
mysql_free_result($result);
mysql_close();
}else{
$retour = '<select style="width: 320" name="Liste3" id="Liste3" size="1" disabled>Aucune valeure< Utilisateur ></option></select>';
}
echo $retour;
Voila et enfin ton formulaire, ta page ou tu affichera les 3 listes déroulantes tu mets ca :
(Bon moi j'ai fais sous forme de tableau, je pense que tu fais pareil.. Reprends mon exemple..)
<?php
include ("scriptlistederoulante.js"); // Mets ça tout au début de ta page enfin dans le body quoi ;)
?>
<form action=".....php" method='post'><!-- formulaire -->
<table border="0" align="center"><!-- tableau sans bordure pour organiser et tout aligner -->
<tr>
<td class="titretab">1ere liste<font size="4" color="red">*</font> :</td>
<td>
<?php
include ("valideLd1.php");
?><!--Pour remplir la liste déroulante 1-->
</td>
</tr>
<tr>
<td class="titretab">2eme liste<font size="4" color="red">*</font> :</td>
<td>
<span id="niv2">
<?php
include ("valideLd2.php");
?></span> <!--Pour remplir la liste déroulante 2-->
</td>
<tr>
<td class="titretab">3eme liste<font size="4" color="red">*</font> :</td>
<td>
<span id="niv3">
<?php
include ("valideLd3.php");
?></span> <!--Pour remplir la liste déroulante 3-->
</td>
</tr>
</table>
Voila j'espère que t'a compri et que j'tai aidé.. Bon courage .. Si tu réussi dit moi, car moi j'ai un ptit soucis d'accent. J'aimerais savoir si tu aura le meme souci..
Cordialement
Merci beaucoup pour ton code, pour le moment, ça m'affiche des erreurs sur la page de formulaire et je suis entrain de bien vérifier ce qui cloche comme erreur.
Je te tiendrai informer de la suite dès que possible.
Merci encore une fois.