PHP Facile!
existe aussi en version
SQL et XML

6.Le langage PHP

6.12.Validation de formulaire

6.12.3.Exemple d'implémentation

Vous pouvez maintenant implémenter la validation des différents champs du formulaire comme bon vous semble. En voici, un exemple:
<?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();


// 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 (strlen($nom) == 0) 
        $errs["nom"][] = "Le nom est obligatoire";
    if (strlen($nom) > 64) 
        $errs["nom"][] = "Le nom ne doit pas exceder 64 c.";
        
    $prenom = stripSlashes($_POST["prenom"]);
    if (strlen($prenom) > 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 (!ereg("^([0-9]){2}/([0-9]){2}/([1-2])([0-9]){3}$", $naissance)) {
        $errs["naissance"][] = "La date de naissance n'est pas au bon format.";
    } else {
        $champsDate = explode("/", $naissance);
        if (!checkdate($champsDate[1], $champsDate[0], $champsDate[2])) {
            $errs["naissance"][] = "La date de naissance est invalide.";
        }
    }

    $email = stripSlashes($_POST["email"]);
    if (strlen($email) == 0) {
        $errs["email"][] = "L'email est obligatoire";
    } else if (!ereg("^([a-zA-Z0-9._-]*)@([a-zA-Z0-9._-]*)\.([a-zA-Z]*)$", $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 (strlen($motDePasse) == 0) {
        $errs["motdepasse"][] = "Le mot de passe est obligatoire";
    } else if (strlen($motDePasseVerif) == 0) {
        $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 (strlen($motDePasse) < 8) {
        $errs["motdepasse"][] = "Le mot de passe doit contenir au moins 8 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();
    }
}
?>
<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" /><br />
Prenom: <input type="text" name="prenom" /><br />
Date de naissance (JJ/MM/AAAA): 
   <input type="text" size="10" maxlength="10" name="naissance" /><br />
Email: <input type="text" name="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>

Comme vous pouvez le constater, techniquement, la validation fonctionne correctement mais le script reste incomplet. En effet, à chaque erreur, il faut à nouveau saisir tous les champs du formulaire. Le solution est pourtant bien simple, il suffit de remplir l'attribut value des balises input. Les valeurs ne peuvent toutefois pas être intégrées directement dans ces attributs, à cause de la possible présence de caractères comme <, > ou " qui peuvent interférer avec le code HTML. Il faut au préalable faire appel à la fonction htmlEntities.
<?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 (strlen($nom) == 0) 
        $errs["nom"][] = "Le nom est obligatoire";
    if (strlen($nom) > 64) 
        $errs["nom"][] = "Le nom ne doit pas exceder 64 c.";
        
    $prenom = stripSlashes($_POST["prenom"]);
    if (strlen($prenom) > 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 (!ereg("^([0-9]){2}/([0-9]){2}/([1-2])([0-9]){3}$", $naissance)) {
        $errs["naissance"][] = "La date de naissance n'est pas au bon format.";
    } else {
        $champsDate = explode("/", $naissance);
        if (!checkdate($champsDate[1], $champsDate[0], $champsDate[2])) {
            $errs["naissance"][] = "La date de naissance est invalide.";
        }
    }

    $email = stripSlashes($_POST["email"]);
    if (strlen($email) == 0) {
        $errs["email"][] = "L'email est obligatoire";
    } else if (!ereg("^([a-zA-Z0-9._-]*)@([a-zA-Z0-9._-]*)\.([a-zA-Z]*)$", $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 (strlen($motDePasse) == 0) {
        $errs["motdepasse"][] = "Le mot de passe est obligatoire";
    } else if (strlen($motDePasseVerif) == 0) {
        $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 (strlen($motDePasse) < 8) {
        $errs["motdepasse"][] = "Le mot de passe doit contenir au moins 8 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();
    }
}
?>
<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>

  • Si vos données sont encodées en UTF-8, songez à remplacer les appels htmlEntities($valeur) par htmlEntities($valeur, ENT_COMPAT, "UTF-8").