PHP Facile!
existe aussi en version
SQL et XML

6.Le langage PHP

6.12.Validation de formulaire

6.12.5.Au quotidien

6.12.5.1.Validation avec PEAR

6.12.5.1.2.Validation du formulaire

Nous pouvons alors remplacer le script précédent par
<?php
require_once("include_path_inc.php");
require_once("Validate.php");

// Tableau contenant les messages d'erreur lies a la validation de chaque 
// champ du formulaire.
// On utilisera le nom du champ comme cle du tableau
$errs = array();

$nom = "";
$prenom = "";
$naissance = "";
$email= "";

// S'il s'agit du premier affichage, le bouton submit n'a pas ete presse
// il n'y a pas de validation a effectuer. Sinon $_POST["submit"] n'est pas
// vide (et contient la valeur "Enregistrer")
if (strlen($_POST["submit"]) > 0) {

    $nom = stripSlashes($_POST["nom"]);
    if (!Validate::string($nom, array("min_length" => 1))) 
        $errs["nom"][] = "Le nom est obligatoire";
    if (!Validate::string($nom, array("max_length" => 64))) 
        $errs["nom"][] = "Le nom ne doit pas exceder 64 c.";
        
    $prenom = stripSlashes($_POST["prenom"]);
    if (!Validate::string($prenom, array("max_length" => 64))) 
            $errs["prenom"][] = "Le prenom ne doit pas exceder 64 c.";
        
    $naissance = stripSlashes($_POST["naissance"]);
    if (strlen($naissance) == 0) {
        $errs["naissance"][] = "La date de naissance est obligatoire";
    } else if (!Validate::date($naissance, array("format"=>"%d/%m/%Y"))) {
        $errs["naissance"][] = "La date de naissance n'est pas valide.";
    }

    $email = stripSlashes($_POST["email"]);
    if (strlen($email) == 0) {
        $errs["email"][] = "L'email est obligatoire";
    } else if (!Validate::email($email)) {
        // REM: Ce test de conformite est certainement incomplet
        $errs["email"][] = "L'email n'est pas au bon format.";
    }
    
    $motDePasse = stripSlashes($_POST["motdepasse"]);
    $motDePasseVerif = stripSlashes($_POST["motdepasseverif"]);
    if (!Validate::string($motDePasse, array("min_length" => 1))) {
            $errs["motdepasse"][] = "Le mot de passe est obligatoire";
    } else if (!Validate::string($motDePasse, array("min_length" => 1))) {
            $errs["motdepasse"][] = "Le mot de passe doit etre saisi 2 fois";
    } else if ($motDePasse != $motDePasseVerif) {
        $errs["motdepasse"][] = "Les 2 mots de passe saisis sont différents";
    } else if (!Validate::string($motDePasse, array("min_length" => 8))) {
        $errs["motdepasse"][] = "Le mot de passe doit contenir au moins 8 c.";
    } else if (!Validate::string($motDePasse, array("max_length" => 16))) {
        $errs["motdepasse"][] = "Le mot de passe ne peut exceder 16 c.";
    }
    
        // Inserer validation du nom: 
    // ajouter $errs["nom"][] = "Erreur blabla" en cas d'erreur de validation

    // Inserer validation du prenom: stripSlashes($_POST["prenom"])
    // ajouter $errs["prenom"][] = "Erreur blabla" en cas d'erreur de validation

    // etc.

    if (count($errs) == 0) {
        // Les donnees du formulaires ont ete validee (pas d'erreur trouvee)
        // faire ce qui doit etre fait (envoi de mail, enregistrement en base)
        // et rediriger vers la page suivante
        // header("Location: pagesuivante.php");
        die("Formulaire valide !");
    }
}
?>
<body style="font-size:12pt">
<?php
// Si des erreurs ont été trouvée, les afficher sous forme de liste
if (count($errs) > 0) {
    echo "<ul>";
    foreach ($errs as $champEnErreur => $erreursDuChamp) {
        foreach ($erreursDuChamp as $erreur) {
            echo "<li>".$erreur."</li>";
        }
    }
    echo "</ul>";
}
?>
<form method="post">
Nom: <input type="text" name="nom" 
            value="<?php echo htmlEntities($nom);?>" /><br />
Prenom: <input type="text" name="prenom" 
               value="<?php echo htmlEntities($prenom);?>" /><br />
Date de naissance (JJ/MM/AAAA): 
   <input type="text" size="10" maxlength="10" name="naissance" 
          value="<?php echo htmlEntities($naissance);?>" /><br />
Email: <input type="text" name="email" value="<?php echo htmlEntities($email);?>" /><br />
Mot de passe: <input type="password" name="motdepasse" /><br />
Mot de passe (verif): <input type="password" name="motdepasseverif" /><br />
<input type="submit" name="submit" value="Enregistrer" />
</form>
</body>
include_path_inc.php est un script chargé d'ajouter la bibliothèque PEAR à l'ensemble des chemins de recherche des fichiers PHP (afin que le fichier Validate.php puisse être trouvé).
<?php 
// Adaptez les chemins de recherche a votre environnement
set_include_path(get_include_path().PATH_SEPARATOR.
                 // Si la bibliotheque PEAR est au meme niveau que ce fichier
                 dirname(__FILE__)."/pear".PATH_SEPARATOR.
                 // Si la biblotheque PEAR est a la racine du site
                 $_SERVER["DOCUMENT_ROOT"]."/pear".PATH_SEPARATOR.
                 // Si la biblotheque PEAR est au niveau superieur
                 $_SERVER["DOCUMENT_ROOT"]."/../pear".PATH_SEPARATOR);
                 ?>
Ce qui donne