Lier des SELECT en PHP
Résolu
max30_3775
Messages postés
178
Date d'inscription
Statut
Membre
Dernière intervention
-
max30_3775 Messages postés 178 Date d'inscription Statut Membre Dernière intervention -
max30_3775 Messages postés 178 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je sollicite votre aide car je souhaite lier deux listes déroulantes. C'est à dire en choisissant un quartier (par exemple) dans la liste déroulante principale (ayant pour id_parent=0), que son sous-quartier apparait dans la sous-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:
La page du formulaire:
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:
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:
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:
<span><label for="quartier"><?php echo $lang['quartier'];?></label></span> <br> <select name="quartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php // 1- on récupère les quartiers principaux $quartiers = getQuartier( 0 ); // 0 : catégories principales (niveau 0) $sousquartiers = getQuartier( $quartiers['id'] ); if($quartiers){ foreach($quartiers as $quart){ echo "<option value='".$quart['id']."'>".$quart['qua']."</option>"; } ?> </select> <br> <br> <span><label for="quartier"><?php echo $lang['quartier'];?>2</label></span> <br> <select name="sousquartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php foreach($sousquartiers as $sq){ echo "<option value='".$sq['id']."'>".$sq['qua']."</option>"; } }//fin accolade if $quartiers ?> </select>
Configuration: Windows / Chrome 98.0.4758.82
A voir également:
- Lier des SELECT en PHP
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Lier calendrier outlook et gmail - Guide
- Reboot and select proper boot device asus - Forum Matériel & Système
- Comment lier des pdf - Guide
4 réponses
Bonjour,
Déjà .. veux tu que cette liste s'actualise dès le changement de quartier dans ton premier select ... ou as après avoir cliqué sur un bouton submit ( ce qui provoquera le réaffichage de la page) ?
Ensuite.. plusieurs erreurs dans ton code..
La fonction getQuartier() retourne un array.
Tu ne peux donc pas l'utiliser tel quel pour appeller ta fonction pour les sous-quartiers ..
A la limite, tu peux afficher ceux liés au premier résultat de ta première requête..
Pour en revenir au fait de lier tes listes sans refresh de la page et dès le changement de valeur dans le premier.. il va falloir que tu utilises du javascript et de l'ajax...
Le php seul ne te le permettra pas.
Déjà .. veux tu que cette liste s'actualise dès le changement de quartier dans ton premier select ... ou as après avoir cliqué sur un bouton submit ( ce qui provoquera le réaffichage de la page) ?
Ensuite.. plusieurs erreurs dans ton code..
La fonction getQuartier() retourne un array.
Tu ne peux donc pas l'utiliser tel quel pour appeller ta fonction pour les sous-quartiers ..
A la limite, tu peux afficher ceux liés au premier résultat de ta première requête..
$sousquartiers = getQuartier( $quartiers[0]['id'] );
Pour en revenir au fait de lier tes listes sans refresh de la page et dès le changement de valeur dans le premier.. il va falloir que tu utilises du javascript et de l'ajax...
Le php seul ne te le permettra pas.
Bonjour Jordane, merci pour ta réponse. Le but c'est que les données de la 2ème liste (sous-quartier) s'affichent dès que le quartier dans le premier SELECT est choisi. Comme tu as dit il faut du JS, et je pense utiliser onchange.
Après avoir fait ainsi:
=> dans le 2ème SELECT (sous-quartier), c'est les données du 1er quartier(id=1 ) qui apparaissent:
Après avoir fait ainsi:
$sousquartiers = getQuartier( $quartiers[0]['id'] );
=> dans le 2ème SELECT (sous-quartier), c'est les données du 1er quartier(id=1 ) qui apparaissent:
<span><label for="quartier"><?php echo $lang['quartier'];?></label></span> <br> <select name="quartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php // 1- on récupère les quartiers principaux $quartiers = getQuartier( 0 ); // 0 : catégories principales (niveau 0) $sousquartiers = getQuartier( $quartiers[0]['id'] ); if($quartiers){ foreach($quartiers as $quart){ echo "<option value='".$quart['id']."'>".$quart['qua']."</option>"; } ?> </select> <br> <br> <span><label for="quartier"><?php echo $lang['quartier'];?>2</label></span> <br> <select name="sousquartier"> <option value="" disabled selected><?php echo $lang['quartier'];?></option> <?php foreach($sousquartiers as $sq){ echo "<option value='".$sq['id']."'>".$sq['qua']."</option>"; } }//fin accolade if $quartiers ?> </select>
Je suis arrivé à faire apparaitre la div (d) des sous-quartiers avec du javascript
Mais après l'Ajax ... ! Jamais fait. Je vais donc poster un nouveau sujet dans le forum de JS de CCM.
Merci à toi :)
<script> function choisirsous() { var sous= document.getElementById("quartier"); if(sous.value >= 1 ) { console.log('yes'); document.getElementById("d").style.display="block"; } else{ console.log('no'); document.getElementById("d").style.display="none"; } } </script>
Mais après l'Ajax ... ! Jamais fait. Je vais donc poster un nouveau sujet dans le forum de JS de CCM.
Merci à toi :)
Avant d'ouvrir une nouvelle question sur le forum .. commence déjà par faire des recherches sur le sujet
https://www.google.com/search?q=tutoriel+ajax
https://www.google.com/search?q=tutoriel+ajax