Obliger selectionner option menu déroulant

Fermé
val - 23 févr. 2011 à 15:29
 val - 24 févr. 2011 à 11:59
Bonjour,
J'ai créé un formulaire, tout fonctionne mais je n'ai pas réussi à créer le code en php (pas de script) pour vérifier les champs d'un "menu déroulant" ou "case à cocher" et mettre un message d'erreur si aucune sélection n'a été faite.

if(!empty($_POST)){
extract($_POST);
	$valid = true;
 
 if (empty($_POST['type'])){
		$valid=false;
		$erreurtype="Vous n'avez pas rempli le Type";
	}
 if (empty($_POST['palier'])){
		$valid=false;
		$erreurpalier="Vous n'avez pas rempli le champ Palier";
	}
 if (empty($_POST['escalier'])){
		$valid=false;
		$erreurescalier="Vous n'avez pas rempli l'Escalier actuel";
	}
 if (empty($_POST['escaliers'])){
		$valid=false;
		$erreurescaliers="Vous n'avez pas rempli le type d'Escalier";
	}	
 if (empty($_POST['emplacement'])){
		$valid=false;
		$erreuremplacement="Vous n'avez pas rempli l'Emplacement";
	}	

	


Formulaire :
<td><label for="type">
              <div align="right">Type :* </div>
              </label></td>
            <td>&nbsp;
              <select name="type" size="1" class="texte" id="type">
                <option value="Sélectionnez" selected>Séléctionnez</option>
                <option value="Type: Maison">Maison</option>
                <option value="Type: Appartement">Appartement</option>
                <option value="Type: Immeuble">Immeuble</option>
              </select>
              <br />
              <span class="error-message">
              <?php if(isset($erreurtype)) echo $erreurtype; ?>
            </td>
            <td><label for="palier">
              <div align="right">Palier :* </div>
              </label></td>
            <td>&nbsp;
              oui&nbsp;&nbsp;<input name="oui" type="checkbox" id="palier" value="oui">
&nbsp;non&nbsp;&nbsp;<input name="non" type="checkbox" id="palier" value="non">
              <br />
              <span class="error-message">
              <?php if(isset($erreurpalier)) echo $erreurpalier; ?>
            </td>
          </tr>
          <tr>
            <td><label for="escalier">
              <div align="right">Escalier actuel :* </div>
              </label></td>
            <td>&nbsp;
              <select name="escalier" size="1" class="texte" id="escalier">
                <option value="selectionnez">Sélectionnez</option>
                <option value="Escalier actuel: bois">Bois</option>
                <option value="Escalier actuel: granito">Granito</option>
                <option value="Escalier actuel: beton">Béton</option>
                <option value="Escalier actuel: pierre">Pierre</option>
                <option value="Escalier actuel: metallique">Métallique</option>
                <option value="Escalier actuel: autre">Autre</option>
              </select>
             <br />
              <span class="error-message">
              <?php if(isset($erreurescalier)) echo $erreurescalier; ?>
            </td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td width="117"><label for="matiere">
              <div align="right">Si autre matière : </div>
              </label></td>
            <td width="252">&nbsp;
              <input name="matiere" type="text" id="matiere" value="<?php if(isset($matiere)) echo $matiere;?>"/>
              </td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td><label for="escaliers">
              <div align="right">Type d'escalier :* </div>
              </label></td>
            <td>&nbsp;
              <select name="escaliers" size="1" class="texte" id="escaliers">
                <option value="selectionnez" selected>Sélectionnez</option>
                <option value="Escalier: Tournant">Tournant</option>
                <option value="Escalier: double quart tournant">double quart tournant</option>
                <option value="Escalier: Balancé">Balancé</option>
                <option value="Escalier: hélicoïdal">hélicoïdal</option>
                <option value="Escalier: droit">droit</option>
                <option value="Escalier: autre">Autre</option>
              </select>
              <br />
              <span class="error-message">
              <?php if(isset($erreurescaliers)) echo $erreurescaliers; ?>
            </td>
            <td><label for="emplacement">
              <div align="right">Emplacement :* </div>
              </label></td>
            <td>&nbsp;
              <select name="emplacement" size="1" class="texte" id="emplacement">
                <option value="selectionnez" selected>Sélectionnez</option>
                <option value="Emplacement: exterieur">Extérieur</option>
                <option value="Emplacement: interieur">Intérieur</option>
              </select>
              <br />
              <span class="error-message">
              <?php if(isset($erreuremplacement)) echo $erreuremplacement; ?>
            </td>


Merci d'avance pour votre aide

A voir également:

7 réponses

ça a l'air d'être très compliqué.............................................
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
23 févr. 2011 à 21:36
Tu te contredit là
if(!empty($_POST)){
extract($_POST);
	$valid = true;
 
 if (empty($_POST['type'])){

ou bien faire un else ou bien enlever la première condition if
0
Bonjour et merci pour ton message

Je suppose que tu veux dire:

if(!empty($_POST)){
extract($_POST);
$valid = true;
}
else{

if (empty($_POST['type'])){
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
24 févr. 2011 à 09:23
Bonjour, oui c bien ça
0
Ca ne fonctionne pas
En faite si je rajoute cette fonction, lorsque j'ouvre la page de mon formulaire (sur Internet) Tous les champs "obligatoire" sont activés (Les messages erreur vous n'avez pas remplis le champs X) S'AFFICHENT. si j'en rempli 1 et que je fais "envoyé, il envoi le contenu VIDE hormis le ou les champs remplis. Mais sans m'obliger à remplir ceux obligatoires.

Par contre, les messages d'erreur de mes menus s'affichent alors que sans cette fonction... Rien Grrrrrrrrrrrr
0
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
24 févr. 2011 à 10:16
Bonjour.

Pour tester des valeurs, il faut les connaitre. Pour les connaitre il faut qu'elles soient quelque part. Or ici je ne sais pas comment vous souhaitez faire votre vérification mais le plus simple et de rappeler son formulaire une fois le clic sur "Envoyer" par exemple et de tester que tous les champs sont remplis.

Il suffit de déclarer son form comme ceci:
<form action="<?php echo($_SERVER['PHP_SELF']);?>" method="POST" enctype="multipart/form-data" name="nomForm" >

Le
echo($_SERVER['PHP_SELF']);
charge la page courante. Comme ça si un jour on change le nom ou l'emplacement du fichier, on a pas besoin de retaper l'adresse.

A partir de là il suffit de récupérer les variables qui sont transmises dans le $_POST et de les vérifier.

Si on a des valeurs dans les $_POST on les traite puis SI tout est bon on peut faire un header location pour aller sur la page de traitement des infos (ajout dans une base, affichage etc)
Sinon, on ré affiche le formulaire avec des messages d'erreur style "*champs obligatoire*.


Ex:
<?php if(isset($_POST['Envoyer'])){
//Test existance de la variable puis afectation de la variable.
if(isset($_POST[type'])) $type = $_POST['type'];
//La même chose pour tous vos champs.

//Puis à la fin vous vérifiez si tous les champs ne sont pas vides
if(empty($type) or Empty($var2) ....)
//message d'erreur
$MsgError = "Champs Obligatoire";
else{
//Envoi vers autre fichier o insertion dans base etc
}
else{//Affichage du Formulaire
<form action="<?php echo($_SERVER['PHP_SELF']);?>" method="POST" enctype="multipart/form-data" name="nomForm" >

<select name="type" size="1" class="texte" id="type">
                <option value="Sélectionnez" selected>Séléctionnez</option>
                <option value="Type: Maison">Maison</option>
                <option value="Type: Appartement">Appartement</option>
                <option value="Type: Immeuble">Immeuble</option>
              </select>
}?>

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
merci pour votre message Skeletyon

Mais je ne suis pas assez calée dans le php pour utiliser cette méthode.
J'ai testé mais il y a sans cesse des erreurs.

Par contre le
echo($_SERVER['PHP_SELF']);
Ca c'est bien vu merci
0
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
24 févr. 2011 à 11:40
Le PHP est à votre portée. Allez sur le siteduzero et en quelques heures vous saurez faire votre vérification ^^

Il faut que vous fassiez des tests pour savoir si vos valeurs sont correctes. Et le faire en PHP est mieux qu'en JavaScript car il peut être désactivé sur le poste client.

Donnez vos erreurs, les lignes sont indiquées :p
0
ps: le Javascript ne me plait pas du tout. Je suis d'accord avec vous php c'est plus sur. Sinon j'avais trouvé dans cette fonction mais je suis vraiment anti javascript.
En tout les cas merci beaucoup pour votre aide
0
en faite pour les erreurs:

if(empty($type) or Empty($var2) ....) il n'en veut pas j'ai modifié
if(empty($type) or Empty($var2));
Là non plus....
Plusieurs possibilité mais rien
Ensuite j'ai testé avec juste type en solo pour vérifier si tout fonctionnait:

<?php 
define('MAIL_DESTINATAIRE','contact@escaliers-style.fr'); // remplacer par votre email
define('MAIL_SUJET','Demande de renseignement(s)');
if(isset($_POST['Envoyer'])){
//Test existance de la variable puis afectation de la variable.
if(isset($_POST['type'])) $type = $_POST['type'];
//La même chose pour tous vos champs.
if(!empty($_POST)){
extract($_POST);
	$valid = true;
//Puis à la fin vous vérifiez si tous les champs ne sont pas vides
if (empty($_POST['type'])){
		$valid=false;
		$erreurtype="Vous n'avez pas rempli le Type";
	}
if($valid){
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="utf-8"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

// préparation du corps du mail
$mail_corps = "Nom : $type\n";
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
 $erreur = "Votre message nous a bien été transmis";
 }
		else{
			$erreur = "Une erreur est survenue, votre message n'est pas parti";
		}
	}
	}
	}	
?>


en affichant le corps du formulaire:

<form action="<?php echo($_SERVER['PHP_SELF']);?>" method="POST" enctype="multipart/form-data" name="nomForm" >

<select name="type" size="1" class="texte" id="type">
                <option value="Sélectionnez" selected>Séléctionnez</option>
                <option value="Type: Maison">Maison</option>
                <option value="Type: Appartement">Appartement</option>
                <option value="Type: Immeuble">Immeuble</option>
              </select>
              <br />
              <span class="error-message">
              <?php if(isset($erreurtype)) echo $erreurtype; ?>
			 <p>&nbsp;
                <input type="submit" value="Envoyer" id"envoyer"/>
              </p>



             
              </form>


Mais aucun message d'erreur (si je n'ai pas sélectionne) ni message mail n'est envoyé

Et si je le fait en php à votre façon il affiche le menu mais avec "la fonction method post"ex

<form action="<?php echo($_SERVER['PHP_SELF']);?>" method="POST" enctype="multipart/form-data" name="nomForm" > la barre select de mon menu


En visuel sur la page tel quel

C'est dejà une première d'avoir réussi à faire ce formulaire, j'ai mis 3 jours a le faire et presque 1 semaine pour essayer de corriger mes erreurs pour obliger a sélectionner ces foutus menus.... Grr je craque
0