La validation est peut-être la chose la plus importante que vous puissiez faire sur un site Web. Pour cela les filtres en PHP nous permettront de s’assurer que les données reçues sont du bon type (entier, réel,…) et éventuellement de la bonne forme (URL, adresse de messagerie). En effet, PHP est un langage  faiblement typé de telle sorte qu’il est préférable de vérifier le type des données que l’utilisateur envoie pour ne pas avoir de surprise.

Avec ce ticket je vous propose des exemples de bouts de code

L’extension filtre est une nouvelle extension, qui est implémenté dès la distribution PHP 5.2.0

 1- Vérifier le type de la variable

 Pour valider une variable, il faut utiliser la fonction filter_var().

 1.1 Les entiers

 

$entier = 10;
if(filter_var($entier, FILTER_VALIDATE_INT) !== false){
echo 'La variable est bien un entier';
}

Si vous testez ce code, vous pouvez constater que le texte s’affiche.

La question qui se pose que renvoie la fonction  filter_var() ?

Elle renvoie la donnée filtrée (dans ce cas, c’est la valeur de la variable) ou false si elle n’est pas valide.

 1.2 Les nombres réels

 

$reel = 14.56;
if(filter_var($reel,FILTER_VALIDATE_FLOAT) !== false){
echo 'La variable est un nombre réel valide ';
}

2- Vérifier la forme de la variable

IL est possible de valider les adresses de messagerie, les liens et les adresses IP grâce aux filtres.

2.1 Les adresses de messagerie

 

$email = 'exemple@exemple.com';
if(filter_var($email,FILTER_VALIDATE_EMAIL) !== false){
echo filter_var($email,FILTER_VALIDATE_EMAIL);
}

Ici , on ne fait vérifier que la forme de l’adresse.

J’ai essayé d’enlever le point(.) et ça marcher toujours, donc ce n’est pas normal !!!

Pour cela il vaux mieux d’utiliser un « FILTER_VALIDATE_REGEXP »

Pour la vérification de la forme des variables, il existe aussi des filtres pour les URL (FILTER_VALIDATE_URL) et les adresses IP (FILTER_VALIDATE_IP)

Maintenant nous passons vers un autre type de validation, la validation avec options:

$var = 200;
$int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
var_dump(filter_var($var, FILTER_VALIDATE_INT, $int_options));

Dans ce cas le résultat affiché sera : int(200), si le nombre donné par exemple 257 le résultat sera bool(false).

3- Les cas des données utilisateurs

 Nous allons voir maintenant le cas des données utilisateur.

La fonction utilisée est : filter_input ()

Elle prend comme paramètres :

Type   :  une constante parmi  INPUT_GET,INPUT_POST, INPUT_COOKIE, INPUT_SERVER ou INPUT_ENV.

Le nom de la variable à récupérer .

Le filtre à appliquer . (exemple FILTER_VALIDATE_FLOAT).

Tableau associatif d’options ou des drapeaux (facultatif).

Cette fois la valeur de retour est différente  par rapport au filter_var().

1.La valeur de la variable demandée en cas de succès.

2.False si le filtre échoue.

3.NULL si la variable passée en deuxième paramètre  n’est pas définie.

Noter bien qu’il existe la fonction filter_has_var()  qui nous permet de vérifier l’existence d’une donnée utilisateur. (donc nous éviter de tester sur la troisième valeur de retour de la fonction filter_input()).

Voici un exemple d’utilisation de ces deux fonctions :

if(filter_has_var(INPUT_POST,'name')){ // 'name' est le nom d'une zone de texte d'un formulaire par exemple
$resultat = filter_input(INPUT_POST,'name',FILTER_VALIDATE_INT);
if($resultat !== false ){
echo "La variable est un entier valide".$resultat;
}
else{
echo "La variable n'est pas du bon type";
}
}

4. Nettoyer une variable

Un autre usage des filtres, c’est le nettoyage des variables.

Pour valider une donnée, nous utilisons un filtre du genre  « FILTER_VALIDATE_*. »

Maintenant, nous allons utiliser un filtre du genre  « FILTER_SANITIZE_*.

$string = "<p>text</p>";
echo filter_var($string, FILTER_SANITIZE_STRING);

Conclusion

Ce que nous avons vu ici sont quelques exemples de ce que nous  pouvons faire avec PHP FILTERS. Bien sûr si vous utilisez des Framework ou bien des CMS, la validation est intégrée par défaut, mais on s’est jamais si quelqu’un souhaite  travailler avec PHP, il a cette possibilité.

Documentation  : www.php.net/manual/fr/ref.filter.php  ; www.siteduzero.com/tutoriel-3-423618-les-filtres-en-php-pour-valider-les-donnees-utilisateur.html