Page 1 sur 1

création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 18 janv. 2023, 18:46
par minwolf999
Bonjour, voilà j'ai actuellement un menu déroulant (codé comme ceci)

Code : Tout sélectionner

$competencesData = $db->query(' SELECT c.id, c.nom, cc.nom as categorie FROM competence c INNER JOIN categorie_competence cc ON cc.id = c.categorie_competence_id ')->fetchAll(); $competences = []; foreach ($competencesData as $row) { if (!array_key_exists($row['categorie'], $competences)) { $competences[$row['categorie']] = []; } $competences[$row['categorie']][] = $row; } ?> <form method="post" name="ajouterEleve"> <label for="competences">Compétences:</label> <select id="competences" name="competences[]"> <?php foreach ($competences as $competenceLabel => $competenceRows): ?> <optgroup label="<?= $competenceLabel ?>"> <?php foreach ($competenceRows as $competence): ?> <option value="<?= $competence['id'] ?>"><?= ucfirst($competence['nom']) ?></option> <?php endforeach; ?> </optgroup> <?php endforeach; ?> </select><br>
Cependant étant donnée la taille de chaque catégorie j'aimerais faire en sorte d'avoir un premier menu déroulant et lorsqu'on sélectionne une des catégories que cela affecte un second menu déroulant et affichant dedans les compétences de la catégories sélectionner.
Voilà que se pose un problème je ne sais pas si cela est faisable mais je bloque dessus depuis plusieurs jours sans trouver de solution. Pouvez vous m'aider, ou si cela n'est pas faisable me dire ce qui le rend infaisable ?

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 14:45
par Saian

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 15:52
par minwolf999
Merci pour ton aide. Je vois a peut près comment ça marche mais par contre je ne comprend pas comment faire pour mettre ce que j'obtiens de la bdd dans la var mList de ton lien

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 17:24
par Saian
Après avoir bien structuré le tableau $competences :
<script type="text/javascript">
var mList = <?php echo json_encode($competences); ?>;
</script>
L'id étant surement important dans ton cas il faut adapter le code javascript pour injecter les id dans l'attribut value des balises option et adapter la structure du tableau pour avoir l'id et le label (mais en fait tu dois déjà les avoir je crois).

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 17:37
par minwolf999
Ah oui en effet cela marche pour le premier menu déroulant cependant pour le second menu déroulent il y a bien le bon nombre de ligne cependant chaque ligne contient ceci or ce n'est pas la donnée enregistrer dans la bdd [object Object] faut il modifier quelque chose pour que ça marche ? (voici ce que j'ai mis)

Code : Tout sélectionner

<div class="wrapper"> <select id="parent_select"><option>----</option></select> <select id="child_select"></select> </div> <script language="javascript" type="text/javascript"> var mList = <?php echo json_encode($competences); ?> el_parent = document.getElementById("parent_select"); el_child = document.getElementById("child_select"); for (key in mList) { el_parent.innerHTML = el_parent.innerHTML + '<option>'+ key +'</option>'; } el_parent.addEventListener('change', function populate_child(e){ el_child.innerHTML = ''; itm = e.target.value; if(itm in mList){ for (i = 0; i < mList[itm].length; i++) { el_child.innerHTML = el_child.innerHTML + '<option>'+ mList[itm][i] +'</option>'; } } }); </script>

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 17:40
par Saian
En fait mList[itm][i] est un objet car $row est un tableau associatif.
Tu devrais pouvoir utiliser mList[itm][i]['nom'] et mList[itm][i]['id'].
Regarde le code source généré pour voir la valeur de mList.

Re: création d'un menu déroulant en modifiant un autre (contenant des données stockés dans une bdd mysql)

Posté : 19 janv. 2023, 18:43
par minwolf999
Ah oui en effet ça marche et j'ai réussi assez facilement a mettre une value (qui sert d'id) aux competences