Validation de formulaire (php4)

Description

Il s'agit de valider en un rien de temps un formulaire, quelque soit le nombre de champs. Le script vérifie le contenu de chaque champ en fonction ce que qu'il devrait contenir (email, nombre, texte...).
Pratique quand on passe son temps à traiter des formulaires (je gagne un temps monstre en utilisant ce script), et indispensable lorsqu'on génère des champs dynamiquement.

Source / Exemple :


Le nom des champs du formulaire commencent par une variable définie : "obl" pour un champ obligatoire, "mel" pour un champ email, etc.
Par exemple : 
<input type="text" name="obl_nom" class="<?= @$err["obl_nom"]; ?>" />
<input type="text" name="mel_email" class="<?= @$err["mel_email"]; ?>" />

Lors de la soumission du formulaire, on appelle une fonction qui va vérifier le contenu de chaque objet du formulaire :

<?php
$err = array(); // déclaration de la variable qui contiendra les erreurs
$err=errForm($_POST); // on appelle la fonction
?>

La fonction :

<?php
function errForm($myForm) {
   $errArray = Array(); 	// ce tableau va contenir toutes les variables qu'on souhaite renvoyer. 
   $class_ok="chp_ok"; 		// on définit une var pour si le champ est ok. "chp_ok" est le nom du style CSS
   $class_nok="chp_nok"; 	// cette var est attribuée si le champ n'a pas été rempli correctement. "chp_nok" est le nom du style CSS
   $errArray["myErr"]=0; 	// var d'erreur : 0 si le formulaire est correctement rempli, sinon, 1 

    // on parcourt le tableau qu'on a récupéré en argument 
    foreach ($myForm as $key => $myVar) {
      $myVar=trim($myVar); // histoire de virer les espaces en trop
      
      $errArray[$key]=$class_ok; // par défaut, on considère que le champ a été rempli correctement

      switch ( substr($key, 0, 3) ) { // on récupère le préfixe de chaque nom de champ (obl, mel pour l'exemple ci-dessus)
      case "obl":
         if ($myVar=="") { // si la variable commence par obl, elle ne doit pas être vide (champ obligatoire) 
            $errArray[$key]=$class_nok; // si le champ n'a pas été correctement rempli, on le "tagge" : $key est le nom du champ. $errArray[$key] stocke une valeur ("chp_nok") qui correspondra dans la partie html du formulaire, à une classe CSS
            $errArray["myErr"]=1;
         }
         break;

      case "mel": // si la variable est un mail
         if ( !ereg("[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]",$myVar) ) {
            $errArray[$key]=$class_nok;
            $errArray["myErr"]=1;
         }
         break;

      }
      return $errArray;
}
?>

Juste après l'appel de la fonction, on vérifie s'il y a des erreurs et on réagit en fonction :
<?php
if ($err["myErr"]==0) {
      // récuperation des valeurs, ...
}else {
      // renvoyer sur formulaire, indiquer un message...
}
?>

Dans le CSS, on indique les styles associés à un champ en erreur et à un champ OK
.chp_ok {
   border:1px solid #000000;
}

.chp_nok {
   border:1px solid #CC0000;
}

Conclusion :


La fonction fonctionne également avec $_GET, $_SESSION, n'importe quel tableau à une dimension passé en paramètre.
Pour traiter une date, un nombre... il suffit d'ajouter à la fonction les quelques lignes correspondantes :
case "dat": // si la variable commence par dat, elle doit être une date
if ($myVar!="") {
$jour=substr($myVar,0,2);
$mois=substr($myVar,3,2);
$annee=substr($myVar,6,4);
if (!checkdate($mois,$jour,$annee)) {
$errArray["myErr"]=1;
}
}
break;

case "pwd": // si la variable est un mot de passe, elle doit contenir entre 6 et 12 caratères et ne doit contenir que des caratères alphanumériques
if ( (strlen($myVar)<6) || (strlen($myVar)>12) || (!ereg("^:alnum:+$", $myVar)) ) {
$errArray["myErr"]=1;
}
break;

Les combinaisons sont infinies. On peut augmenter ou réduire la taille du préfixe, inclure le "_" dans le substr, bref c'est compètement modulable et adaptable à chaque besoin et développeur.

Dans cet exemple j'ai utilisé des champs "text" mais ça fonctionne avec tout type de champ. Attention cependant avec le CSS qui fonctionne bizarrement avec les boutons radio et les checkbox.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (niteowl)