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>