champs obligatoires

Par Bloomingsakura, il y a 8 ans


Bonjour,

Alors j ai créer un formulaire html et php . J'ai ajouter les champs obligatoires mais voila des que je clique pour aller sur la page on me montre que les champs ne sont pas complété et que les valeurs sont indéfinies mais une fois que j appuie sur "envoyer" il n y a plus de problème .

<H3>Votre Logement :</H3> </br> <p> <h4> Type d'habitation</h4> <select name="habitation" id="habitation"> <option value="appartement">Appartement</option> <option value="maison">Maison</option> </select> </br></br> <H4><label for="Code postal" >Code Postal</label></H4> <input type="number" name="cpostal " id="cpostal"/></br></br> <H4><label for="date">Date de contruction</label></H4> <input type="date" name="date" id="date"/></br></br> <h3>Vos Projets</h3></br></br> <h3>Votre Situation</h3></br> <h4> Civilité</h4> <select name="civilite"id="civilite" > <option value="mr">Mr</option> <option value="mme">Mme</option> <option value="mlle">Mlle</option> </select> <h4><label for="nom" >Nom</label></h4> <input type="text" name="nom" id="nom"/></br> <H4><label for="prenom" >Prénom</label></H4> <input type="text" name="prenom" id="prenom"/></br> <H4><label for="email" >Email</label></H4> <input type="email" name="email" id="email" /></br> <H4><label for="telephone" >Téléphone</label></H4> <input type="tel" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$" name="telephone" id="telephone"/></br></br> <input type="submit" value="envoyer"/></p> </form> <?php $habitation=$_POST['habitation']; //$cpostal=$_POST['cpostal']; $date=$_POST['date']; $civilite=$_POST['civilite']; $nom=$_POST['nom']; $prenom=$_POST['prenom']; $mail=$_POST['email']; $tel=$_POST['telephone']; if (empty($_POST['date'])) { echo "<font color=red>Il manque la date!<br/></font>"; } if (empty($_POST['cpostal'])) { echo "<font color=red>Il manque le code postal!<br/></font>"; } if (empty($_POST['nom'])) { echo "<font color=red>Il manque le nom!<br/></font>"; } if (empty($_POST['prenom'])) { echo "<font color=red>Il manque le prénom!<br/></font>"; } if (empty($_POST['email'])) { echo "<font color=red>Il manque votre email!<br/></font>"; } if (empty($_POST['telephone'])) { echo "<font color=red>Il manque le telephone!<br/></font>"; } else { header('Location: formulaire.php'); echo "message envoyé</br>"; $msg="$prenom $nom $mail $tel $message"; mail('exemple@gmail.com', 'contact', $msg); } ?> Entourez votre code pour bien le mettre en forme

7 réponses

Mehdikacim, il y a 8 ans

Tu peux un peu mieux expliquer ton code ?
Sinon, de préférence utilise

<?php !isset($champs); //ceci empty($champs);// que cela ?>

Tu as aussi, pour simplifier tes:

$habitation=$_POST['habitation']; //$cpostal=$_POST['cpostal']; $date=$_POST['date']; $civilite=$_POST['civilite']; $nom=$_POST['nom']; $prenom=$_POST['prenom']; $mail=$_POST['email']; $tel=$_POST['telephone'];

la fonction extract:

<?php extract($_POST); ?>

Par exemple si un champs posté : $_POST['champ'], par la fonction extract, la variable $champ sera automatiquement créee :) soit, une ligne au lieu de tes 8 lol

Mehdikacim, il y a 8 ans

Et puis je viens de comprendre ta demande, comme tu es placé sur la même pas, il faut bien utiliser la fonction isset qui te donne si une variable est définie ou non, c'est normal que quand tu postes le formulaire, l'erreur disparaît, les valeurs sont renseignées.

Bloomingsakura, il y a 8 ans

donc isset va definir les variable ?
et pourquoi quand je clique pour aller sur la page avec le formulaire j'ai les messages " il manque ..." pour tout les champs meme si je n'ai pas cliquer sur envoyer ?

Mehdikacim, il y a 8 ans

isset ne définie pas les variables !
ça verifie si un variable est définie.

Carouge10, il y a 8 ans

Bonsoir,
Pour faire un champ obligatoire, tu as aussi la possibilité de mettre "required" dans ta balise input en html.
Sinon pour ton php, le else que tu as fais que fonctionne que pour ton dernier if.

Voilà une façon de faire qui est simple et compréhensible

$errors = "" // Si habitation n'existe pas OU est vide if (!isset($_POST['habitation']) || empty($_POST['habitation']) { $errors .= "Votre lieu est vide<br>"; } // Si email n'existe pas OU est vide if (!isset($_POST['email']) || empty($_POST['email']) { $errors .= "Votre email est vide<br>"; } ... // Si errors est vide alors on envoie le message if (empty($errors)){ // J'envoie mon message } else { // Sinon j'affiche un message d'erreur echo $errors; }

Voilà quelque chose de simple, après il te faudra l'adapter à ton code et l'optimiser

Bloomingsakura, il y a 8 ans

Merci pour vos reponse j'ai pu regler mon probleme ! merci

Laznet, il y a 8 ans

En espérant que l'auteur lise encore ce topic :
Petite réaction à la réponse de Mehdikacim, la fonction extract doit être utilisé avec une extrème prudence, en effet cette fonction n'est présente dans PHP uniquement pour comprendre son fonctionnement (comme indiqué dans la doc). Mais pourrait être considéré comme obsolète à cause de la directive register_globals obsolète depuis PHP 5.3.*.

Donc dans le cas où nous récupérons des données utilisateurs il n'est vraiment pas conseillé d'utiliser cette fonction (sur des $_POST, $_FILES, $_GET) (ne jamais faire confiance à l'utilisateurs.. xD)

Infos et sources :
Un topic Openclassroom où on en parle
La doc de php qui t'expliquera ceci mieux que moi