26 Jan2016
Valider un formulaire d'inscription avec les filtres
Objectif :
Validation et nettoyage d'un formulaire en utilisant les "Filters validate" et les "Filters Sanitize".
Énoncé :
- Créez une page HTML comprenant le formulaire suivant :
-
Validez la page obtenue par un script sur une page séparée "traitement.php" en testant les contraintes suivantes :
- Tous les champs sont obligatoires.
- Utiliser un FILTER_VALIDATE_EMAIL pour valider l’email.
- Utiliser un FILTER_SANITIZE_SPECIAL_CHARS pour nettoyer le nom et prénom.
Champs Valeurs Nom Said Prenom naji Email dev [AT] exelib [DOT] net Sexe M Domaine Informatique , Gestion Pays Maroc Langages C,PHP
- Le document contenant le formulaire d'inscription :
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>formulaire inscription</title> <style type="text/css"> td{ height: 40px; } </style> </head> <body> <form method="Post" action="traitement.php"> <fieldset> <legend>Formulaire d'inscription</legend> <!-- La balise Table pour formater l'affichage du formulaire --> <table> <tr> <td><label>Nom</label></td> <td><input type="text" placeholder="saisir votre nom" name="nom"/> </td> </tr> <tr> <td><label>Prenom</label></td> <td><input type="text" placeholder="saisir votre prenom" name="prenom"/></td> </tr> <tr> <td><label>Email</label></td> <td><input type="email" placeholder="saisir votre Email" name="email"/></td> </tr> <tr> <td>Sexe</td> <!-- Les deux inputs radio doivent avoir le meme nom --> <td> Masculin <input type="radio" name="sexe" value="M" checked="checked"> Féminin <input type="radio" name="sexe" value="F"> </td> </tr> <tr> <td><label>Pays</label></td> <td> <select name="pays"> <option value="">Choisissez un pays</option> <option value="fr">France</option> <option value="es">Espagne</option> <option value="it">Italie</option> </select> </td> </tr> <tr> <!-- l'utilisation l'attribut multiple permet le choix de plusieurs valeurs des options --> <td>Les langages préférés </td> <td><select multiple="multiple" name="lang[]"> <option value="java">Java</option> <option value="c">C</option> <option value="c++">C++</option> <option value="php">PHP</option> <option value="html">HTML</option> </select> (Pour faire plusieurs choix maintenir la touche CTRL enfoncée)</td> </tr> <tr> <td><label>Domaines d’activités</label></td> <td><input type="checkbox" value="informatique" name="domaine[]"> Informatique <input type="checkbox" value="Gestion" name="domaine[]"> Gestion <input type="checkbox" value="pedagogie" name="domaine[]" > Pédagogie</td> </tr> <tr> <td colspan="2"><input type="submit" name="Envoyer" value="Envoyer"/> <input type="reset" value="Annuler"/></td> </tr> </table> </fieldset> </body> </html>
NoteRemarquer des crochets [] à la fin de la valeur de l'attribut "name" pour des éléments à choix multiple afin que PHP puisse traiter ce champs comme un tableau et pas comme une chaîne de caractères unique.
<select multiple="multiple" name="lang[]">
Pendant le traitement des données envoyées par le formulaire on va gérer $_POST["lang"] comme un tableau.
- Le script "traitement.php"
<?php if(isset($_POST['Envoyer'])){ $erreurs=""; extract($_POST); //nettoyer le nom et le prenom $nom=filter_var($nom,FILTER_SANITIZE_SPECIAL_CHARS); $prenom=filter_var($prenom,FILTER_SANITIZE_SPECIAL_CHARS); //Validation de l'email if(filter_var($email, FILTER_VALIDATE_EMAIL)===false ){ $erreurs.="email incorrect<br>"; } //Les autres champs sont obligatoire //$domaine et $lang sont des tableaux if(!isset($domaine) ){ $erreurs.="vous devez choisir un domaine<br>"; } if(!isset($lang)){ $erreurs.="vous devez choisir au moins un langage<br>"; } if(!isset($pays) || empty($pays)){ $erreurs.="vous devez choisir votre pays<br>"; } if(!isset($sexe)) $erreurs.="vous devez choisir votre sexe<br>"; //afficher les erreurs if($erreurs!=""){ die($erreurs); } else{ //afficher le resultat $resultat="<table border>"; $resultat.="<tr><td>champs</td><td>valeurs</td></tr>"; $resultat.="<tr><td>Nom</td><td>$nom</td></tr>"; $resultat.="<tr><td>Prenom</td><td>$prenom</td></tr>"; $resultat.="<tr><td>Email</td><td>$email</td></tr>"; $resultat.="<tr><td>Sexe</td><td>$sexe</td></tr>"; //implode rassemble les éléments d'un tableau en une chaine de valeurs séparées (ici par des virgule) $resultat.="<tr><td>Domaine</td><td>".implode(",", $domaine)."</td></tr>"; $resultat.="<tr><td>Pays</td><td>".$pays."</td></tr>"; $resultat.="<tr><td>langage</td><td>".implode(",", $lang)."</td></tr>"; echo $resultat; } }