Securiser un formulaire

Securiser un formulaire

 

Ici je fais suite au petit rappel php sur la transmission des données via un petit formulaire.Je vais reprendre exactement le meme formulaire simple:

 <form method="POST" action="test.php">
                <label for="name">Name</label>
                <input type="text" name="name" value="">
                <input type="submit" name="submit" value="valider">
            </form>

Tout au début de mon fichier et avant le formulaire, je définis mes variables

$nameError ="";//on initialize notre message erreur
$name = "";//on initialize notre variable nom

Ensuite je teste l’envoi du formulaire, et dans celui ci le champ ‘name’, en testant s’il est rempli et si c’est bien un mot.

if ($_SERVER["REQUEST_METHOD"] == "POST") {//je teste la methode d'envoi
   if (empty($_POST["name"])) {//si l'input name est vide
     $nameError = "Name is required";//message d'erreur
   } else {
     $name = test_input($_POST["name"]);//sinon on assigne l'input récupéré dans une  variable
     
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {//si c'est pas un mot
       $nameError = "Only letters and white space allowed"; //erreur
     }else{//ici dernière condition optionnelle pour montrer $name que si ce n'est pas un nombre
         echo $name;
     }
   }
}
//fonction pour sécuriser les données
function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

J’ai commenté le code pour explication.La dernière condition est la car sans elle, si on met des chiffres on a bien le message d’erreur, mais il nous les affiche quand meme.En gros

si on insère des chiffres:

ulber

si on valide sans rien mettre:

required

et si on insère un mot on l’affiche juste au dessus..

name

Et voici le formulaire actualisé avec l’affichage des messages d’erreurs:

 <form method="POST" action="test.php">
                <label for="name">Name</label>
                <input name="name" type="text" value="<?php echo !empty($name)? $name : '';?>">
                                 <?php if (!empty($nameError)): ?><!--on vérifie sil y a une erreur-->
                               <p> <span class="red"><?php echo $nameError;?></span></p><!--dans ce cas on l'affiche-->
                            <?php endif; ?>
                <p><input type="submit" name="submit" value="valider"></p>
            </form>

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.