Sécuriser un formulaire en php : les bases

 Sécuriser un formulaire

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

 <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>

Définir ses variables

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

Tester l’envoi du formulaire

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. 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

Le formulaire au complet

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>