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:
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
...
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
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;
}
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
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>