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