Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 18h02   #1
Invité de passage
 
Homme Bernard AVALLET
Photographe
Inscription : mai 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Bernard AVALLET
Âge : 67
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Photographe

Informations forums :
Inscription : mai 2011
Messages : 13
Points : 4
Points : 4
Par défaut Mise en mémoire d'un champs de liste déroulante

Bonjour,
Je travaille sur un formulaire assez long avec validation des champs en php.
Certain champs sont obligatoires.
Si l'internaute oubli un champs après validation PHP bloque le déroulement du test avec un message qui indique le champs concerné.
Jusque la rien de nouveau.
Le pblm c'est que quand l'internaute revient au formulaire tous les champs sont vides....
J'ai donc créé des variables en session pour les champs saisis.
En ce qui concerne les champs de texte pas de pblm cela fonctionne....
Pour les listes déroulant...hum c'est pas gagné.
Voici mon pblm :
Quand je valide pour la première fois mon formulaire tout ce déroule normalement, affichage du champs incriminé, retout au formulaire.
Gagné la saisie dans la liste déroulante est bien la: .
Je revalide pour 2ième fois mon formulaire tjr en oubliant de saisir un champs. déroulement avec message sur le champs incriminé.
Donc je reviens à mon formulaire et la....
La saisie dans ma liste déroulante à disparue; en faite la variable de ma session c'est réinitialisée.
Et la je bloque grave.
Voici mon code sur la 1er page :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 <form action="traitement_devis.php" method="post">
<!--RENSEIGNEMENTS SUR ETABLISSEMENT-->
<fieldset >
     <legend>Renseignements sur votre établissements</legend>
      <p>
      <label class="red">Le status de votre étabblissement :</label>
          <select name="status" id="status">
             <option value="" selected="selected" ><?php if (!empty($_SESSION["status"])) {echo htmlspecialchars($_SESSION["status"]);} ?></option>
              <option value="société" >Société</option>
              <option value="PME">PME</option>
              <option value="Commerce">Commerce</option>
              <option value="Agence Immobilière">Agence Immobilière</option>
              <option value="Profession Lib&eacute;rale">Profession libérale</option>
              <option value="Auto entreprenneur">Auto-entreprenneur</option>
               <option value="Association">Association</option>
               <option value="Particuliers">Particulier</option>
               <option value="Autre">Autre</option>
        </select>
</p>
<p>
<label class="red" for="activite">Votre activité :</label>
    <input  name="activite" size="30" id="act" maxlength="27" value="<?php if (!empty($_SESSION["activite"])) {echo htmlspecialchars($_SESSION["activite"]);}?>" type="text"/>
<p>
<label class="red">Public ciblé :</label> 
   <input type="text" name="public" size="30" maxlength="27" value="<?php if (!empty($_SESSION["public"])) { echo htmlspecialchars($_SESSION["public"]);}?>" /
</p>
<p>
<label class="red">Entreprise en cours de création :</label>
  <select name="entrcreation" id="ent">
     <option value="<?php if (!empty($_SESSION["entrcreation"])){echo htmlspecialchars($_SESSION['entrcreation']);}else{echo '?';}?>" selected="selected">?</option>
    <option value="oui">Oui</option>
    <option value="Non">Non</option>
    </select></p>
  </fieldset>
Sur ma feuille de validation PHP le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<!--**** TRAITEMENT DU FORMULAIRE *************-->               	
			<?php
				// Traitement des oublis champs
				$status = $_POST["status"];
				$activite = $_POST["activite"];
				$public = $_POST["public"];
				$entrcreation = $_POST["entrcreation"];
 
//Mise en mémoire des champs remplis
				$_SESSION["status"] = $status;
				$_SESSION["activite"] = $activite;
				$_SESSION["public"] = $public;
				$_SESSION["entrcreation"] = $entrcreation;
 
 if(empty($status) OR empty($activite) OR empty($public) OR empty($entrcreation))
    echo '<p class="oubli_champs">Vous avez oublié des champs..!</p>';
if(empty($status)) { echo '<p class="champs_manquants">Vous devez choisir le status de votre établissement !</p>'; }
				if(empty($activite)) { echo '<p class="champs_manquants">Vous devez indiquer votre activité !</p>'; }
				if(empty($public)) { echo '<p class="champs_manquants">Vous devez indiquer le type de public ciblé ! !</p>'; }
				if(empty($entrcreation)) { echo '<p class="champs_manquants">Vous devez indiquer si c'est une création ou non !</p>'; }				
echo '<p class="retour"><a href="devis.php">Retour au formulaire</a></p>';include("include/footer.php");exit(0);
{
else
}
Ensuite le code PHP gère l'envoi du mail si tout est ok plus haut.

Je dois dire que je suis débutant en PHP.....

Si qq pouvait me donner un tuyau se serait super sympas

Merci à tous
antinarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 18h11   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
L'"option" que tu ajoutes n'a pas de "value"
Il est plus simple de se servir de PHP pour écrire ta liste déroulante :
Code :
1
2
3
4
5
6
7
8
9
 
<?php
$tblStatus = array('Société','PME','Commerce', 'Agence Immobilière');
echo '<select name="status" id="status">';
foreach ($tblStatus as $value) {
    $selected = (isset($_SESSION['status']) && $_SESSION['status'] == $value) ? ' selected="selected" ' : "";
    echo '<option value="' . $value . '"' . $selected .'>' . htmlspecialchars($value) . '</option>';
}
echo '</select>';
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 18h15   #3
Invité de passage
 
Homme Bernard AVALLET
Photographe
Inscription : mai 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Bernard AVALLET
Âge : 67
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Photographe

Informations forums :
Inscription : mai 2011
Messages : 13
Points : 4
Points : 4
Ok merci Vincent j'éssaie de suite ton code Merci
antinarius est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 10/05/2011, 18h33   #4
Invité de passage
 
Homme Bernard AVALLET
Photographe
Inscription : mai 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Bernard AVALLET
Âge : 67
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Photographe

Informations forums :
Inscription : mai 2011
Messages : 13
Points : 4
Points : 4
Bingo ça marche super, Vincent, une question pour éclairer ma lanterne :

Code :
$selected = (isset($_SESSION['status']) && $_SESSION['status'] == $value) ? ' selected="selected" ' : "";
Que veux dire le ? $value et 'selected....
Merci pour ta réponse
antinarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 19h25   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est un operateur ternaire
(condition) ? si vrai : si faux

J'aurais pu écrire en plus long :
Code :
1
2
3
4
5
6
if (isset($_SESSION['status']) && $_SESSION['status'] == $value) {
   $selected =  ' selected="selected" ';
}
else {
    $selected = "";
}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 19h49   #6
Invité de passage
 
Homme Bernard AVALLET
Photographe
Inscription : mai 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Bernard AVALLET
Âge : 67
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Photographe

Informations forums :
Inscription : mai 2011
Messages : 13
Points : 4
Points : 4
Merci Vincent pour ton explication
antinarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h42.


 
 
 
 
Partenaires

Hébergement Web