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