Formulaire et vérification de contenus
Vérification de la validité d'un email avec la fonction strpos()
Il existe toutes sortes de techniques pour vérifier la validité d'un email. La plus simple consiste à taper l'attribut required dans un champ de texte type email. On peut aussi utiliser le langage JavaScript, ce qui épargnera le serveur PHP. Enfin, la meilleure méthode consiste à expédier un message sur l'email tapé par l'internaute contenant un lien pour vérifier si l'email existe bien. C'est la méthode la plus sérieuse et la plus utilisée. L'exercice qui va suivre n'est donc pas le plus efficace pour vérifier la validité d'un email, mais il empêchera quelques fautes de frappe et il aura le mérite d'apprendre à manipuler les chaînes de caractères.
Dans cet exercice, nous allons vérifier si l'email comporte bien un "@" et un point.
Le code HTML du formulaire email.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post" action="email.php">
<label>Votre email : </label><input type="text" name="email">
<input type="submit" value="OK">
</form>
</body>
</html>
Le code PHP de email.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>
<?php
$email = $_POST['email'];
$point = strpos($email, ".");
$aroba = strpos($email, "@");
if (empty($_POST['email']))
echo 'Veuillez saisir un email.';
else if ($point === false)
echo 'Votre email doit comporter un point.';
else if ($aroba === false)
echo 'Votre email doit comporter un arobase.';
else
echo 'Votre email est : ' . $email;
?>
</p>
</body>
</html>
Affichera après un clic sur OK :
- Si erreur :
Veuillez saisir un email.
Votre email doit comporter un point.
Votre email doit comporter un arobase. - Si pas d'erreur :
Votre email est : jules.bidon@monsite.com
La fonction empty() permet de contrôler la vacuité, c’est à dire :
- "" : une chaîne vide ;
- 0 : en tant qu’entier ;
- '0' ou "0" : en tant que chaîne de caractères ;
- NULL : une sorte d’anti-valeur ;
- false ;
- array() : un tableau vide ;
- var $var; : une variable déclarée, mais sans valeur.
La fonction strpos() retourne la position d'un caractère dans une chaîne si celui-ci existe, sinon strpos() retourne false. C'est ce que nous utilisons pour savoir si les point et @ sont bien présents dans l'email. L'opérateur de comparaison === est plus précis que l'opérateur ==, car il sert non seulement à vérifier l'exactitude des données mais aussi le type de données. Contrairement à l'opérateur ==, l'opérateur === renvoie false si le point ou l'arobase se trouvent à la position 0, en début de chaine.
- == égalité, exactitude des données. (0 et '0' sont équivalents)
- === identique, exactitude des données et du type. (0 et '0' sont différents)
Si strpos() retourne 8, cela veut dire que le premier caractère recherché est placé juste après les 8 premiers caractères donc en 9ème position dans la chaîne, puisque le langage PHP commence à compter à 0 et non pas 1.
Vérification d'un email en une seule page
La condition if (!empty($_POST)) permet de vérifier si le formulaire a été soumis, on peut alors écrire le précédent code en une seule page et se débarrasser de la page email.html
Le code complet email.php :
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post">
<label>Votre email : </label>
<input type="text" name="email">
<input type="submit" value="OK">
</form>
<p>
<?php
if (!empty($_POST)) {
$point = strpos($_POST['email'], ".");
$aroba = strpos($_POST['email'], "@");
if ($point === false)
echo 'Votre email doit comporter un point.';
else if ($aroba === false)
echo 'Votre email doit comporter un arobase.';
else
echo 'Votre email est : ' . $_POST['email'];
} else {
echo 'Veuillez saisir un email.';
}
?>
</p>
</body>
</html>