Garder Choix liste déroulante après validation

Résolu/Fermé
Raven76 Messages postés 250 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 21 février 2024 - Modifié le 8 févr. 2022 à 16:01
Raven76 Messages postés 250 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 21 février 2024 - 9 févr. 2022 à 09:56
Bonjour à tous,

Je vous décris rapidement mon soucis.
Je tente d'écrire un formulaire avec liste déroulante, champ texte etc...

J'ai mis une sécurité dans le cas où si l'utilisateur ne remplis pas certains champs obligatoires, la page se recharge avec un message erreur.
Le truc c'est que je souhaite que mes champs gardent la valeur que l'utilisateur a renseigné avant de valider dans le cas où la page a été recharger par ce bouton car il n'a pas respecté les conditions de remplissage.
ça fonctionne bien pour les champs texte mais pour les listes déroulante, je l'ai garde une seul fois si je click sur mon bouton 'submit', mais si je click une seconde fois, mon select reprends la valeur non sélectionnable par défaut affichée au premier chargement de la page.

<SELECT name="RESEAU">
<option disabled selected> <?php if(isset($reseau)) {echo $reseau;} else { echo "Réseau";}?></option>
<?php
$requser = $bdd->query("SELECT * FROM T_RESEAU ORDER BY NOM_RESEAU ASC");
while ($nom_reseau = $requser->fetch())
{
echo '<option>'.$nom_reseau['NOM_RESEAU'].'</option>';
}
?>
</SELECT>
A voir également:

3 réponses

jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
Modifié le 8 févr. 2022 à 16:43
Déjà ..
on essaye de placer le maximum de php AVANT tout le reste du html ..

<?php
//...
 $requser = $bdd->query("SELECT * FROM T_RESEAU ORDER BY NOM_RESEAU ASC");
//récupération PROPRE des variables AVANT de les utiliser
 $RESEAU = !empty($_POST['RESEAU']) ? $_POST['RESEAU']: NULL;
 ?>

Puis dans ton html
<select name="RESEAU">
<?php

while ($nom_reseau = $requser->fetch())
{
  $selected = $RESEAU == $nom_reseau['NOM_RESEAU'] ? ' selected="selected" ' : "";
  echo '<option value="'.$nom_reseau['NOM_RESEAU'].'" '.$selected.'>'.$nom_reseau['NOM_RESEAU'].'</option>';
}
?>
</select>


0
Raven76 Messages postés 250 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 21 février 2024 15
9 févr. 2022 à 08:58
Je vais tenter ça mais pour ce qui est du test de ma variable :
$RESEAU = !empty($_POST['RESEAU']) ? $_POST['RESEAU']: NULL;


Je le fais un peu plus haut dans mon code, avant le html car j'avais justement un warning sur l'index non défini.
0
Raven76 Messages postés 250 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 21 février 2024 15
Modifié le 9 févr. 2022 à 09:16
Avec ce code j'affiche par défaut la première valeur de ma liste déroulante et lorsque j'appuis sur mon "submit" avec méthode POST, je ne garde pas la valeur sélectionnée après rechargement de la page.

Je souhaite qu'au premier chargement de la page, ma liste déroulante affiche "Choisir le réseau"' sans que celui ci soit un choix sélectionnable.
Ensuite, je souhaite qu'en cas d'erreur (si l'utilisateur ne rempli pas tous les champs par exemple). la page recharge mon formulaire en affichant un message " Attention : tous les champs ne sont pas complétés".
Et que ce qui a été renseigné dans le formulaire précedement reste affiché dans les champs, ainsi l'utilisateur n'a a remplir que ce qu'il a oublié et non devoir tout recommencer.

Mon 1er code, bien que mal optimisé (j'en doute pas) répondait mieux à mon besoin mais après un second click sur mon bouton, les listes déroulantes reprennaient leur valeur non selectionnable par défaut, alors qu'au premier click, je la gardait bien.
0
Raven76 Messages postés 250 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 21 février 2024 15
9 févr. 2022 à 09:56
J'ai pu résoudre mon problème, c'était à cause de mon option disabled selected que ca ne fonctionnait pas.
En effet, j'indiquais à mon option de sélectionner et garder une valeur non selectionnable apres un rechargement de page.

J'ai donc ajouté une condition supplémentaire.
0