TUTORIELS 
Méthodologie de validation de formulaires en PHP
Une structure-cadre pour écrire un script de validation de données de formulaire, et d'affichage de celui-ci. Pour aller plus vite et adopter une approche méthodique de la programmation.  (7 mars 2002)
 

Le but de cet article est moins de fournir le code "best of breed" de validation de formulaires via le PHP, que de présenter une structure type de script effectuant le travail.
Si l'étape de validation est souvent réalisée en Javascript (pour décharger le serveur et parfois pour des raisons de sécurité, les données confidentielles pouvant être "préparées" avant leur transmission par requête POST), il est tout à fait possible et souvent plus élégant d'utiliser un langage côté serveur (ne serait-ce que si, par exemple, l'utilisateur a désactivé le Javascript sur son poste!) et nous choisirons, ici, le PHP.

Nous déciderons de n'utiliser qu'un fichier, que nous nommerons par exemple validation.php, et qui "s'appellera lui-même" lorsque l'utilisateur aura appuyé sur le bouton de type "submit". Ce fichier aura la structure suivante:

<?
// instructions empêchant le caching de la page:
// pour le protocole HTTP 1.1
header("Cache-control: private, no-cache");
// pour les anciennes versions du protocole HTTP
header("Expires: Mon, 25 Feb 2002 01:00:00 GMT"); // une date du passé
header("Pragma: no-cache");
?>

// affichage du code HTML précédant le formulaire

<?

if($validation){ // s'il y a eu envoi de données au script (voir plus bas)...
  $error=array(); // initialisation du tableau des erreurs éventuelles

  // instructions traitant les champs et alimentant le cas échéant le tableau $error
  // par exemple (expression régulière retournant TRUE si la variable $email,
  // qui doit correspondre au nom du champ de formulaire concerné,
  // est bien de la forme d'une adresse e-mail
)
  if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email)){
    // si l'adresse n'est pas valide, on insère une entrée supplémentaire
    // à la fin du tableau $error avec la fontion array_push()

    array_push($error,"Attention, l'adresse e-mail saisie n'est pas valide");
  }
  // etc...


  if(count($error)){ // si le tableau $error n'est pas vide
    // affichage des différentes erreurs, par exemple:
    echo "<font face=Verdana size=2 color=#CC0000><b>";
    while($error){ // tant que le tableau n'est pas vide
      echo array_shift($error)."<br>"; // on le "dépile" par le haut
    }
    echo "</b></font>"
;
  }else{ // s'il n'y a pas d'erreurs
    // traitement des données saisies (insertion en base de données par exemple)
    // redirection vers une page confirmant la bonne saisie des données
 
  }

?>

<form action="validation.php" method="POST">

  // affichage des différents champs de formulaires,
  // EN RAPPATRIANT LES DONNEES DEJA SAISIES!
  // par exemple:

  <input type="text" name="email" value="<?echo $email;?>">
  // etc...
  <input type="hidden" name="validation" value="1"> // caractérise l'envoi de données
  <input type="submit" value="OK">

</form>


// affichage du code HTML suivant le formulaire

A vous de bâtir, à partir de ce cadre ou en l'adaptant, votre propre système de validation. Pour des formulaires très longs, il peut-être bon, en cas d'erreurs trop nombreuses, de n'afficher que les plus flagrantes, afin de ne pas décourager l'internaute, et quitte à afficher les autres erreurs dans un deuxième temps. D'un autre côté, afficher toutes les erreurs d'un coup permet à l'internaute de les corriger toutes d'un coup s'il le peut. Un arbitrage est à trouver.

 
[ Jérôme Morlon,JDNet
 
Accueil | Haut de page