Bonjour, je sollicite votre aide car je souhaite qu'en choisissant un quartier principale (ayant pour id_parent=0) d'une liste déroulante, que son sous-quartier apparait dans la liste déroulante suivante.
Les quartiers principaux s'affichent bien, tandis que seulement les derniers sous-quartiers de la liste apparaissent sans même avoir choisi le quartier principale dont l'id_parent =0
Voici ma table quartiers:
Voici le code de ma fonction dans la page des commandes:
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 id id_parent quartier_fr quartier_en 1 0 quartier1 quartier1 2 0 quartier2 quartier2 3 0 quartier3 quartier3 4 0 quartier4 quartier4 . . . 101 1 sous-quartier1 sous-quartier1 102 1 sous-quartier2 sous-quartier2 103 1 sous-quartier3 sous-quartier3 201 2 sous-quartier4 sous-quartier4 202 2 sous-quartier5 sous-quartier5 203 2 sous-quartier6 sous-quartier6 ...
La page du formulaire:
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 function getQuartier( $id_parent=0 ) { global $bdd; $sql = "SELECT id, id_parent, quartier_".$sql_lang." AS qua FROM quartiers WHERE id_parent = :id_parent ORDER BY id "; try{ $req = $bdd->prepare($sql); $req->execute( array(':id_parent'=>$id_parent) ); $res = $req->fetchAll(PDO::FETCH_ASSOC); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; $res = false; } return $res; }
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 <span><label for="quartier">quartier 1></label></span> <br> <select id="quartier" onchange="choisirquart()" name="quartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php // 1- on récupère les quartiers principaux $quartiers = getQuartier( 0 ); foreach($quartiers as $quart){ echo "<option value='".$quart['id']."'>".$quart['qua']."</option>"; //ça marche bien pour les quartiers principaux } ?> </select> <br> <br> <span><label for="quartier">sousquartier</label></span> <br> <select id="quartier2" onchange="choisirquart()" name="sousquartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php $sousquartiers = getQuartier( $quart['id'] ); // Si il n'y a pas de sous-quartiers if( empty($sousquartiers) ) { echo " <option value='".$quart['id']."'>".$quart['qua']."</option>"."\n"; // "\n" : passage à la ligne dans le code (lisibilité du code) } // Sinon (il y a des sous-quartiers) else { echo " <optgroup label ='".$quart['qua']."'> "."\n"; foreach($sousquartiers as $sq){ echo "<option value='".$sq['id']."'>".$sq['qua']."</option>"; } } ?> </select>
Partager