26 Jan2016
Traiter et valider un formulaire de coordonnées personnelles
Objectif:
- Traiter et valider les données envoyées via les formulaires.
Énoncé :
- Créer un formulaire de coordonnées personnelles composé des champs suivants : Nom complet du client l'email téléphone adresse et code postal.Les données sont ensuite traitées par un fichier PHP séparé récupérant les données et les affichant dans un tableau HTML.
- Améliorer le script de traitement en vérifiant ce qu suit :
- Tous les champs sont obligatoires
- Le champs email doit contenir le caractère @.
- Le champs téléphone doit être sous la forme (06 ou 05) 00 00 00 00.
- Le code postale doit contenir 5 chiffres seulement.
-
Comment faire en sorte que les données soient traitées par le même fichier que celui qui contient le formulaire.
- Le document contenant le formulaire de coordonnées personnelles:
<!doctype html> <html> <head> <title> Formulaire coordonnées personnelles</title> <meta charset="utf-8"> </head> <body> <form action="traitement.php" method="post"> <fieldset> <legend><b>Saisissez vos coordonnées </b></legend> <table border="0" > <tr> <td>Nom & Prénom: </td> <td><input type="text" name="nom" /></td> </tr> <tr> <td>Email :</td> <td><input type="text" name="email" /></td> </tr> <tr> <td>Tél :</td> <td><input type="text" name="tel" /></td> </tr> <tr> <td>Adresse : </td> <td><input type="text" name="adresse" /></td> </tr> <tr> <td>Code postal :</td> <td><input type="text" name="code" maxlength="5"/></td> </tr> <tr> <td><input type="submit" value="ENVOI" name="Envoyer"/></td> </tr> </table> </fieldset> </form> </body> </html>
Le fichier php "traitement.php" dans lequel on affiche les données dans un tableau html :
<?php echo "<table border=\"1\" >"; echo "<caption><b>Coordonnées personnelle </b></caption>"; //Avec une boucle foreach on va parcourir le tableau (superglobale) $_POST et afficher les données envoyées. foreach($_POST as $cle=>$val) { echo "<tr> <td> $cle : </td> <td>".$val ."</td></tr>"; } echo "</table>";
- On va améliorer le script précédant en ajoutant les contrôles de données nécessaires:
// Après clic sur le bouton "Envoyer" if(isset($_POST['Envoyer'])){ $erreurs="";//chaîne de caractère ou on va stocker les erreurs détectées extract($_POST);//permet de créer des variables à partir du tableau $_POST //par exemple il va créer $nom à partir de $_POST["nom"]...donc on pourra travailler simplement avec les variable $nom,$tel... if(empty($nom) OR empty($email) OR empty($tel) OR empty($adresse) OR empty($code) ){ $erreurs.="Le formulaire est incomplet : tous les champs sont obligatoires<br>"; } //empty détermine si une variable est vide if(strpos($email,"@")===false){ $erreurs.="l'adresse email est incorrect <br>"; } //strpos renvoie la position d'une sous chaîne dans une chaîne si elle existe sinon renvoie false if(!preg_match("/^(06|05)(\s[0-9]{2}){4}$/",$tel)){ $erreurs.="Format du tel est invalide .Format valide: (06 ou 05)00 00 00 00<br>"; } //preg_match permet de faire un test basé sur une expression régulière if(!ctype_digit($code)){ $erreurs.="le code postal est invalide"; } //ctype_digit détermine si une chaîne est un entier // si aucune erreur on affiche les données if($erreurs==""){ echo "<table border=\"1\" >"; echo "<caption><b>Confirmation de vos coordonnées</b></caption>"; foreach($_POST as $cle=>$val) { echo "<tr> <td> $cle : </td> <td>".$val ."</td></tr>"; } echo "</table>"; } //sinon on affiche les erreurs else echo $erreurs; }
- Pour effectuer le traitement par le même fichier qui contient le formulaire , il suffit d'affecter à l'attribut action de l’élément <form> , le nom du fichier contenant le formulaire .
-
<form action="formulaire.php" method="post">
Ou bien utiliser la variable de serveur $_SERVER['PHP_SELF'] ] qui renvoie le nom du fichier du script en cours d'exécution.
htmlentities pour remédier à la faille d'injection de code html.action=
"<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"