Chapitre 18 : Filtres et validation

Apprenez à sécuriser vos applications PHP avec ce guide complet sur la validation et le filtrage des données utilisateur.

1. Introduction

Lorsque vous récupérez des données depuis un formulaire ou une URL, il est crucial de les valider et de les nettoyer avant de les utiliser. PHP propose des fonctions puissantes via l'extension filter.

2. Nettoyage vs Validation

  • Nettoyer = supprimer les caractères indésirables
  • Valider = vérifier qu'une donnée respecte un format

Les deux peuvent être effectués avec filter_var().

3. Nettoyer une chaîne

Supprimer les balises HTML ou les espaces :

<?php
  $nom = "<b>Sami</b>";
  $nettoye = filter_var($nom, FILTER_SANITIZE_STRING);
  echo $nettoye; // Affiche : Sami
?>
Note : Depuis PHP 8.1, ce filtre est obsolète. Utilisez strip_tags() ou htmlspecialchars() à la place.

4. Valider un email

<?php
  $email = "test@example.com";
  if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "Email valide";
  } else {
    echo "Email invalide";
  }
?>

5. Valider un entier ou un nombre

<?php
  $age = "25";
  if (filter_var($age, FILTER_VALIDATE_INT)) {
    echo "C'est un entier";
  }
?>

Pour un nombre à virgule :

filter_var($valeur, FILTER_VALIDATE_FLOAT)

6. Valider une URL

<?php
  $url = "https://monsite.com";
  if (filter_var($url, FILTER_VALIDATE_URL)) {
    echo "URL valide";
  }
?>

7. Valider avec une plage de valeurs

<?php
  $note = 14;
  $options = ["options" => ["min_range" => 0, "max_range" => 20]];
  if (filter_var($note, FILTER_VALIDATE_INT, $options)) {
    echo "Note correcte";
  }
?>

8. Filtrer un tableau de données

Pour valider plusieurs champs simultanément :

<?php
  $data = [
    "email" => "user@mail.com",
    "age" => "30"
  ];

  $filtre = [
    "email" => FILTER_VALIDATE_EMAIL,
    "age" => [
      "filter" => FILTER_VALIDATE_INT,
      "options" => ["min_range" => 0, "max_range" => 120]
    ]
  ];

  $resultat = filter_var_array($data, $filtre);
  print_r($resultat);
?>

9. Fonctions complémentaires

  • htmlspecialchars() : empêche le HTML malveillant
  • strip_tags() : supprime toutes les balises HTML
  • trim() : supprime les espaces inutiles

10. À retenir

  • filter_var() permet de valider ou nettoyer une donnée
  • Privilégier la validation pour tous les champs utilisateurs
  • Utiliser filter_var_array() pour les formulaires complets
  • Renforcer la sécurité avec htmlspecialchars() et strip_tags()

11. Exercices proposés

  1. Créer un formulaire avec champ email, et valider l'email côté PHP.
  2. Créer un champ pour âge, et le valider comme entier entre 1 et 120.
  3. Créer une fonction qui nettoie une chaîne et empêche le HTML malicieux.

12. Ce que vous apprendrez ensuite

Dans le chapitre 19, vous apprendrez à gérer les erreurs en PHP : détection, traitement, affichage personnalisé, exceptions, et bonnes pratiques pour déboguer efficacement.