[RESOLU] Selected sur une valeur donnée en base, dans menu déroulant

Avatar du membre
Eléphanteau du PHP | 17 Messages

10 mai 2021, 14:24

Bonjour,
je cherche à faire un selected sur une valeur d'un menu déroulant, indiquée en base de donnée avec un test d'égalité sur les id de 2 tables.

Code : Tout sélectionner

<td> <select id="animReseau" name="animReseau"> <?php //LISTE DES ANIMATEURS RESEAU $sqlListSalarie = "SELECT * FROM employe WHERE anim_reseau=1"; $resultListSalarie = $mysql->query($sqlListSalarie); //SELECTION DE L'ANIMATEUR RESEAU QUI SUIT L'ADHERENT $sqlAnimAdh = "SELECT prenom FROM employe WHERE id='".$row_suivi['anim_adh']."'"; $resultAnimAdh = $mysql->query($sqlAnimAdh); $prenomAnim = $resultAnimAdh->fetch(); foreach ($resultListSalarie as $row_salarie){ ?> <option selected="<?php echo $prenomAnim ?>" value="<?php echo $row_salarie['id'] ?>"><?php echo $row_salarie['prenom'] ?></option> <?php };?> </select> </td>
Merci d'avance à celles et ceux qui voudront bien se pencher sur mon problème.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mai 2021, 15:13

Salutations !

Afin de sélectionner une option par défaut dans un select, il suffit d'ajouter l'attribut "selected" dans l'option concernée (et uniquement dans celle-ci). Dans ton code, l'attribut selected est ajouté dans chaque option, ce qui n'est pas le résultat attendu.

Il te faut donc comparer les deux valeurs dans ta boucle et inclure l'attribut "selected" uniquement si celles-ci sont identiques, sinon, tu n'ajoutes pas l'attribut :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2021, 17:24

Ok, je regarde ça.
Merci de ton retour.

Avatar du membre
Eléphanteau du PHP | 17 Messages

10 mai 2021, 17:25

Ok je regarde ça.
Merci de ton retour.

Avatar du membre
Eléphanteau du PHP | 17 Messages

11 mai 2021, 15:42

Bon ben j'ai testé pas mal de chose mais rien qui ait fonctionné.
je ne vois pas comment stipuler sur quelle valeur faire mon selected.
Je ne peux pas faire un selected='xxxx' ?

Mammouth du PHP | 2703 Messages

11 mai 2021, 15:46

$prenomAnim = $resultAnimAdh->fetch();
echo $prenomAnim;
cela affiche ce qui est attendu ?

Avatar du membre
Eléphanteau du PHP | 17 Messages

11 mai 2021, 15:59

Comment ça, ce qui est attendu ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 mai 2021, 16:19

Bon ben j'ai testé pas mal de chose mais rien qui ait fonctionné.
je ne vois pas comment stipuler sur quelle valeur faire mon selected.
Je ne peux pas faire un selected='xxxx' ?
Non ce n'est malheureusement pas comme ça que fonctionne le select en html. Par défaut, la première option est toujours sélectionnée :
<select ... >
  <option value="1">AAA</option>
  <option value="2">BBB</option>
  <option value="3">CCC</option>
</select>
Affichera AAA


Pour que celui-ci soit positionné sur une autre valeur, il faut ajouter l'attribut "selected" dans la balise option correspondante
<select ... >
  <option value="1">AAA</option>
  <option value="2">BBB</option>
  <option value="3" selected>CCC</option>
</select>
Ceci te permet de sélectionner la valeur 3 / CCC par défaut.

Il faut donc que dans ton code, lorsque tu génères dynamiquement les lignes d'option avec ta boucle, il faut que tu compares la valeur de la ligne tu es en train d'afficher, avec la valeur que tu veux mettre par défaut. Si ces deux valeurs sont identiques, alors tu ajoutes l'attribut selected dans l'option. Si par contre les valeurs sont différentes, alors tu n'ajoutes rien.
<select ... >
<?php 
$valeurDefaut = 3;
for ($i = 1; $i <= 3 ; $i++) {

  if ($i == $valeurDefaut)
    $defaut = "selected";
  else
    $defaut = '';

  echo '<option value="' . $i . '" ' . $defaut . '>' . $i . '</option>';
}
?>
</select>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Eléphanteau du PHP | 17 Messages

11 mai 2021, 16:50

Ok, donc je n'étais pas loin de la vérité avec ça ?

Code : Tout sélectionner

<select id="animReseau" name="animReseau"> <?php $sqlListSalarie = "SELECT * FROM employe WHERE anim_reseau=1"; $resultListSalarie = $mysql->query($sqlListSalarie); $reqPrenomAdh="SELECT * FROM suivi_adh"; $resultPrenomAdh = $mysql->query($reqPrenomAdh); $suiviAdh = $resultPrenomAdh->fetch(); foreach ($resultListSalarie as $row_salarie){ if($suiviAdh['anim_adh']==$_GET['animReseau']){ ?> <option selected value="<?php echo $row_salarie['prenom'] ?>"><?php echo $row_salarie['prenom'] ?></option> <?php } else{ ?> <option value="<?php echo $row_salarie['prenom'] ?>"><?php echo $row_salarie['prenom'] ?></option> <?php } }; ?> </select>

Avatar du membre
Eléphanteau du PHP | 17 Messages

11 mai 2021, 17:11

Voila ce que j'ai fais, en suivant ton exemple mais ça ne fonctionne pas mieux malheureusement.

Code : Tout sélectionner

<select id="animReseau" name="animReseau"> <?php $sqlListSalarie = "SELECT * FROM employe WHERE anim_reseau=1"; $resultListSalarie = $mysql->query($sqlListSalarie); $reqPrenomAdh="SELECT * FROM suivi_adh"; $resultPrenomAdh = $mysql->query($reqPrenomAdh); $suiviAdh = $resultPrenomAdh->fetch(); foreach ($resultListSalarie as $row_salarie){ if($suiviAdh['anim_adh']==$row_salarie['prenom']) $defaut = "selected"; else $defaut =""; echo '<option value="'.$row_salarie['prenom'].'" '.$defaut.'>'.$row_salarie['prenom'].'</option>'; }; ?> </select>
Vois tu ce qui peut clocher ?

Mammouth du PHP | 2703 Messages

11 mai 2021, 17:17

2 personnes peuvent-elles avoir le même prénom ? bien sur, donc se baser sur le prénom est une mauvaise idée. c'est l'id qu'il faut comparer, à $_GET['animReseau'] ou $row_suivi['anim_adh'] ou autre chose.

Avatar du membre
Eléphanteau du PHP | 17 Messages

11 mai 2021, 17:21

Effectivement, je vais modifier ça. Merci

Avatar du membre
Eléphanteau du PHP | 17 Messages

12 mai 2021, 14:06

Bon ben ça ne fonctionne toujours pas. je ne vois pas ce qui peut clocher.

Avatar du membre
Eléphanteau du PHP | 17 Messages

12 mai 2021, 15:07

J'ai également testé avec une boucle while à la place de la boucle foreach mais pas mieux.

Code : Tout sélectionner

while ($row_salarie = $resultListSalarie->fetch()) [code]

Avatar du membre
Eléphant du PHP | 70 Messages

12 mai 2021, 16:45

Salut gadje,

Si je ne me trompe pas tu cherche à mettre l'attribut "selected" à l'option de ton select qui correspond à ton entrée en BDD ?

Si en BDD ta valeur est 3, alors tu veux que ça retourne quelque chose dans ce genre la :
<select ... >
  <option value="1">AAA</option>
  <option value="2">BBB</option>
  <option value="3" selected>CCC</option>
</select>
Si c'est la cas, alors rien de bien compliqué ! Récupéré ta valeur puis compare la avec ta condition, si elle est respecté alors tu echo ton selected
<option value="3" <?php if($row_salarie['condition'] === "3") echo "selected" ?>>CCC</option>
Assure toi de faire ta comparaison sur un champs unique, afin d'éviter d'avoir plusieurs selected.
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala