Bonjour à tous.
J'ai suivi le tuto et les scripts postés sur le forum pour faire mes 4 listes liées mais cependant j'ai un problème.
La seconde liste est fonctionne, elle m'affiche bien les résultats selon ce qu'il y a séléctionné dans la première liste mais pour la troisème et la quatrième rien ne se passe.
Pouvez vous m'aider à résoudre ce problème ?
Voici le script de la page cartouche_generique.php
dans le head /
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
62
63
64
65
66 /* Initialisation XMLHttpRequest */ function getXhr(){ var xhr = null; 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; } return xhr; }; function changeLesListes(num){ var num; // numero de la liste a partir de laquelle on va faire les changements var div1 = document.getElementById('ididliste1'); var div2 = document.getElementById('ididliste2'); var div3 = document.getElementById('ididliste3'); var val1 = div1.options[div1.selectedIndex].value; var val2 = div2.options[div2.selectedIndex].value; var val3 = div3.options[div3.selectedIndex].value; // SI la liste 1 a changé if(num==1) { changeListFromList(val1,0,0,2,'iddivListe2'); // liste 2 -> on modifie changeListFromList(val1,0,0,3,'iddivListe3'); // liste 3 -> defaut changeListFromList(val1,0,0,4,'iddivListe4'); // liste 4 -> defaut // SI la liste 2 a changé } else if(num==2) { changeListFromList(val1,val2,0,3,'iddivListe3'); // liste 3 -> on modifie changeListFromList(val1,val2,0,4,'iddivListe4'); // liste 4 ->defaut // SI la liste 3 a changé } else if(num==3) { changeListFromList(val1,val2,val3,4,'iddivListe4'); // liste 4 -> on modifie } }; /* Changer la liste n+1 après choix dans la liste n */ function changeListFromList(val1,val2,val3,numliste,iddiv){ var val1; // valeur de l option choisie (liste 1) var val2; // valeur de l option choisie (liste 2) var val3; // valeur de l option choisie (liste 3) var numliste; // numero de la liste A MODIFIER // -> pour le nom de fichier a utiliser : listeslieesAjax-liste2.php, listeslieesAjax-liste3.php ou listeslieesAjax-liste4.php var iddiv; // id du div qu'on remplira var xhr = getXhr(); xhr.onreadystatechange = function(){ // si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200) { texthtml = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste des "selections" document.getElementById(iddiv).innerHTML = texthtml; } } // on defini la methode (post) + le fichier de traitement + asynchrone (true) xhr.open("POST","<?php echo ROOTPATH; ?>/insert/listeslieesAjax-liste"+numliste+".php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // on poste les parametres a transmettre au fichier qui fera le traitement xhr.send("val1="+val1+"&val2="+val2+"&val3="+val3); };
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <form method="post" action=""> <fieldset style="width:550px;"> <legend>Listes liées</legend> <p> <label>Types : </label> <select id="ididliste1" name="idliste1" onchange="changeLesListes(1);"> <option value="0">-- Type --</option> <?php connexionbdd(); $query = mysql_query("SELECT * FROM type_generique ORDER BY type"); while ($back = mysql_fetch_assoc($query)) { echo '<option value="'.$back["id"].'">'.$back["type"].'</option>'; }?> <!-- on appelle la fct sur le onchange (valeur-choisie, id-du-div-à-remplir) --> </select> </p> <p> <label>Marques : </label> <span id="iddivListe2"><!-- par innerHTML AJAX va ecrire la liste 2 --> <!-- on peut mettre d abord une option "par defaut" : --> <select id="ididliste2" name="idliste2" > <option value="0">(Choisissez avant dans la liste 1)</option> </select> </span> </p> <p> <label>Gammes : </label> <span id="iddivListe3"><!-- par innerHTML AJAX va ecrire la liste 3 --> <!-- on peut mettre d abord une option "par defaut" : --> <select id="ididliste3" name="idliste3"> <option value="0">(Choisissez avant dans la liste 2)</option> </select> </span> </p> <p> <label>Imprimantes : </label> <span id="iddivListe4"><!-- par innerHTML AJAX va ecrire la liste 4 --> <!-- on peut mettre d abord une option "par defaut" : --> <select id="ididliste4" name="idliste4"> <option value="0">(Choisissez avant dans la liste 3)</option> </select> </span> </p> <p> <input type="submit" name="btenvoi" value="ok" /> </p> </fieldset> </form>
Les pages ajax qui sont chargées lors de la séléction dans une des listes
listeslieesAjax-liste2, listeslieesAjax-liste3 et listeslieesAjax-liste4
Merci beaucoup de votre aides.
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
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
62
63 <?php header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; // Ajax : Changer la liste 2 après choix dans la liste 1 if(isset($_POST['val1']) && is_numeric($_POST['val1']) && $_POST['val1']!=0) { // recuperation de id_liste1 $id_liste1_selected = intval($_POST['val1']); mysql_connect("***","***","***"); mysql_select_db("***"); $query = mysql_query("SELECT * FROM marques_generique WHERE id_cor_type=" . mysql_real_escape_string($id_liste1_selected) . " ORDER BY marque");?> <select id="ididliste2" name="idliste2" onchange="changeLesListes(2);"> <?php while ($back = mysql_fetch_assoc($query)) { echo '<option value="'.$back["id_marque"].'">'.$back["marque"].'</option>'; } echo'</select>'; } ?> listeslieesAjax-liste3 <?php header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; // Ajax : Changer la liste 3 après choix dans la liste 2 if(isset($_POST['val2']) && is_numeric($_POST['val2']) && $_POST['val2']!=0) { // recuperation de id_liste1 $id_liste2_selected = intval($_POST['val2']); mysql_connect("***","***","***"); mysql_select_db("***"); $query1 = mysql_query("SELECT * FROM gammes_generique WHERE id_cor_marque=".mysql_real_escape_string($id_liste2_selected)." ORDER BY GAMME"); ?> <select id="ididliste3" name="idliste3" onchange="changeLesListes(3);"> <?php while ($back1 = mysql_fetch_assoc($query1)) { echo '<option value="'.$back1["id_gamme"].'">'.$back1["GAMME"].'</option>'; } echo'</select>'; } ?> listeslieesAjax-liste4 <?php header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; // Ajax : Changer la liste 3 après choix dans la liste 2 if(isset($_POST['val3']) && is_numeric($_POST['val3']) && $_POST['val3']!=0) { // recuperation de id_liste1 $id_liste3_selected = intval($_POST['val3']); mysql_connect("***","***","***"); mysql_select_db("***"); $query = mysql_query("SELECT * FROM cartouche_generique WHERE id_cor_gamme=" . mysql_real_escape_string($id_liste3_selected) . " ORDER BY POUR_IMPRIMANTE"); echo'<select id="ididliste4" name="idliste4" onchange="changeLesListes(4);">'; while ($back = mysql_fetch_assoc($query)) { echo '<option value="'.$back["id"].'">'.$back["POUR_IMPRIMANTE"].'</option>'; } echo'</select>'; } ?>
Partager