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>
où
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