Liste déroulante réaffichée dans un formulaire

[Résolu]
Signaler
Messages postés
2
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
-
Messages postés
2
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
-
Je suis en train de faire un formulaire sur lequel il y a une liste déroulante avec une région à saisir. A la validation du formulaire je vérifie si l'adresse mail existe dans la base avant d'enregistrer. Si l'adresse existe je réaffiche le formulaire avec les données saisies par l'utilisateur précédemment.

Admettons que je saisisse "Aquitaine" dans la liste déroulante. La variable $_POST['id_region'] a donc pris la valeur 2 .
Si dans le formulaire je saisis une adresse mail qui existe dans la base, le formulaire est alors réaffiché avec "Aquitaine" selectionné dans la liste déroulante.

Le problème c'est que lors de cet affichage la variable $_POST['id_region'] a pris la valeur 0 à cause du "selected".

Conséquences :
Si au deuxième affichage je fais une validation sans changer l'adresse, au troisième affichage il me fait une erreur "undefined index" (Normal puisque j'essaie d'afficher dans le tableau la valeur $region [0] qui n'existe pas).

Si au deuxième affichage je change l'adresse mail pour une adresse valide, ça m'enregistre le champ "id_région" à 0 dans la base alors que j'avais "Aquitaine" affiché et que je devrais donc enregistrer 2.

Comment faire pour que la variable $_POST['id_region'] conserve la valeur affichée ?

Merci d'avance pour votre aide

Voici le code de la liste déroulante :

<select name="id_region" id="id_region" >
<option selected="selected">

<?php
// On passe ici lors du premier affichage
// car la variable $_POST['id_region'] n'existe pas
if (!isset($_POST['id_region']))
{$choix = "choisissez...";
echo $choix;}


// On passe ici dès le deuxième affichage si l'utilisateur
// a saisi une adresse mail qui existe dans la base.

if (isset($_POST['id_region'])){
$region array (1> 'Alsace','Aquitaine','Auvergne');
$choix = ($_POST['id_region']);
echo $region [$choix];
// Le deuxième affichage fonctionne mais si je change l'adresse
// pour une adresse valide, ça m'enregistre 0 dans la base car la variable
// $region[0] est déjà egale à 0.
// Si je laisse l'adresse qui existe déjà dans la base,
// j'ai une erreur "undefined variable" au troisième
// affichage sur la ligne du dessus. En effet j'essaie d'afficher
// la valeur $region[0], mais celle-ci n'existe pas
}
?>

</option>
// Le souci c'est qu'ici en sortant du "selected" lors
// du deuxième affichage, la variable $_POST['id_region']
// prend la valeur 0. c'est pour ça que ça plante.
<option value="1">Alsace</option>
<option value="2">Aquitaine</option>
<option value="3">Auvergne</option>
</select>

1 réponse

Messages postés
2
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008

J'ai trouvé la solution :

Voici le code d'une liste déroulante qui se réaffiche avec l'option sélectionnée précédemment par l'utilisateur :

<select name="id_region" id="id_region" >

<option value="0"<?php if(!isset($_POST['id_region'])) { echo "selected="selected""; } ?>>choisissez...</option>
<option value="1"<?php if((isset($_POST['id_region']))&&(($_POST['id_region'])== 1)) { echo "selected="selected""; } ?>>Alsace</option>
<option value="2"<?php if((isset($_POST['id_region']))&&(($_POST['id_region'])== 2)){ echo "selected="selected""; } ?>>Aquitaine</option>
<option value="3"<?php if((isset($_POST['id_region']))&&(($_POST['id_region'])== 3)){echo "selected="selected""; } ?>>Auvergne</option>

</select>