Bonjour,
J'utilise trois listes liées dans un formulaire. Les valeurs des $_POST existent bien puisque je passe d'une liste à l'autre mais impossible de récupérer les valeurs des deux derniers POST sur le submit. J'espère avoir été suffisamment clair et vous remercie pour votre aide.
Le fichier index avec les fonctions JS
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 <?php // fonctions d'affichage function titreErreur($tab=1) { global $erreurs; if($erreurs) { echo str_repeat("\t", $tab).'<p class="mefiage"><strong>Le formulaire n\'a pas pu être validé. Veuillez corriger '.(count($erreurs) > 1 ? 'les erreurs signalées' : 'l\'erreur signalée').'.</strong></p>'."\n"; } } function checkError($id) { global $erreurs; if(!empty($erreurs[$id])) echo ' class="erreur"'; } function spanError($id, $tab=3) { global $erreurs; if(!empty($erreurs[$id])) echo str_repeat("\t", $tab).'<span>'.$erreurs[$id]."</span>\n"; } function afficherTableau($array) { echo '<pre>'; print_r($array); echo '</pre>'; } // Initialisation ou récupération des variables $niveau1 = !empty($_POST['niveau1']) ? $_POST['niveau1'] : '0'; $niveau2 = !empty($_POST['niveau2']) ? $_POST['niveau2'] : '0'; $niveau3 = !empty($_POST['niveau3']) ? $_POST['niveau3'] : '0'; $erreurs = array(); $tout_est_ok = false; if($_SERVER['REQUEST_METHOD']=='POST') { // niveau1 obligatoire if(empty($niveau1)) { $erreurs['niveau1'] = 'Champ requis'; } // niveau2 obligatoire if(empty($niveau2)) { $erreurs['niveau2'] = 'Champ requis'; } // niveau3 obligatoire if(empty($niveau3)) { $erreurs['niveau3'] = 'Champ requis'; } // Aucune erreur... if(empty($erreurs)) { $tout_est_ok = true; } } $title = "SELECT : trois listes liées"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $title; if(!empty($erreurs)) echo ' - Erreur dans la saisie'; ?></title> <script type='text/javascript'> 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; } /** * Méthodes qui seront appelées sur le click du bouton */ function goNiveau2() { var xhr = getXhr(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; document.getElementById('blocniveau2').innerHTML = leselect; } } xhr.open("POST", "niveau2.php", true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); sel = document.getElementById('niveau1'); niveau1 = sel.options[sel.selectedIndex].value; xhr.send("niveau1=" + niveau1); } function goNiveau3() { var xhr = getXhr(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; document.getElementById('blocniveau3').innerHTML = leselect; } } xhr.open("POST", "niveau3.php", true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); sel = document.getElementById('niveau2'); niveau2 = sel.options[sel.selectedIndex].value; xhr.send("niveau2=" + niveau2); } </script> <style type="text/css"> .erreur { color: #ad0627; } </style> </head> <body> <div id="global"> <?php afficherTableau($_POST); if($tout_est_ok) : ?> <div id="listing"> <p>Les données on été correctement reçues et sont exploitables.</p> </div> <p class="liens"><a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>">Réafficher le formulaire</a></p> <?php else : ?> <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" id="select"> <h1><?php echo $title; ?></h1> <?php titreErreur(); ?> <p class="advice">Tous les champs sont obligatoires.</p> <fieldset style="width: 1000px"> <legend>Liste liées</legend> <label>Niveau 1</label> <select name='niveau1' id='niveau1' onclick='goNiveau2()'> <option value='0'>Aucune</option> <?php mysql_connect("localhost", "root", ""); mysql_select_db("test"); $id=1; $res = mysql_query("select * from BRANCHE where ID_BRANCHE_PARENT=" . $id . " order by NOM_BRANCHE"); while ($row = mysql_fetch_assoc($res)) { echo "<option value='" . $row["id_branche"] . "'>" . $row["nom_branche"] . "</option>"; } ?> </select> <label>Niveau 2</label> <div id='blocniveau2' style='display:inline'> <select name='niveau2'id='niveau2' onclick='goNiveau3()' > <option value='0'>Choisissez dans la liste</option> </select> </div> <label>Niveau 3</label> <div id='blocniveau3' style='display:inline'> <select name='niveau3' id='niveau3'> <option value='0'>Choisissez dans la liste</option> </select> </div> </fieldset> <p> <input type="submit" id="submit" value="Valider" /> </p> </form> <?php endif; ?> </div> </body> </html>
Les deux fichiers niveau2 et niveau3 qui gèrent le renvoi des infos
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php echo "<select id='niveau2' onclick='goNiveau3()'>"; if(isset($_POST['niveau1'])){ mysql_connect("localhost","root",""); mysql_select_db("test"); $res = mysql_query("select * from BRANCHE where ID_BRANCHE_PARENT=" . $_POST['niveau1'] . " order by NOM_BRANCHE"); while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row['id_branche']."'>".$row['nom_branche']."</option>"; } } echo "</select>"; ?>
La table sql : les 3 requêtes font appel à la même table
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php echo "<select id='niveau3'>"; if(isset($_POST['niveau2'])){ mysql_connect("localhost","root",""); mysql_select_db("test"); $res = mysql_query("select * from BRANCHE where ID_BRANCHE_PARENT=" . $_POST['niveau2'] . " order by NOM_BRANCHE"); while($row = mysql_fetch_assoc($res)){ echo "<option value='".$row['id_branche']."'>".$row['nom_branche']."</option>"; } } echo "</select>"; ?>
Code sql : 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 -- -- Base de données: `test` -- -- -------------------------------------------------------- -- -- Structure de la table `branche` -- CREATE TABLE IF NOT EXISTS `branche` ( `id_branche` int(3) NOT NULL AUTO_INCREMENT, `nom_branche` varchar(150) NOT NULL, `id_branche_parent` int(3) NOT NULL, PRIMARY KEY (`id_branche`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ; -- -- Contenu de la table `branche` -- INSERT INTO `branche` (`id_branche`, `nom_branche`, `id_branche_parent`) VALUES (1, 'branche 0', 0), (2, 'branche 1', 1), (3, 'branche 2', 1), (4, 'branche 1-1', 2), (5, 'branche 1-2', 2), (6, 'branche 2-1', 3), (7, 'branche 2-2', 3), (8, 'branche 1-1-1', 4), (9, 'branche 1-1-2', 4), (10, 'branche 1-2-1', 5), (11, 'branche 1-2-2', 5), (12, 'branche 2-1-1', 6), (13, 'branche 2-1-2', 6), (14, 'branche 2-2-1', 7), (15, 'branche 2-2-2', 7); -- --------------------------------------------------------
Partager