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 a 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>

Donne comme résultat à l'écran 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 si celui-ci est vide ou non. Une chaîne vide, c’est :

  • "" (une chaîne vide)
  • 0 (0 en tant qu’entier)
  • '0' (0 en tant que chaîne de caractères)
  • NULL
  • 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' peuvent être considérés comme équivalents)
  • ===  identique, exactitude des données et du type de données. (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 vous devez toujours vous rappeler que PHP commence à compter à 0 et non pas 1.

Vérification d'un email en une seule page

Grâce à la fonction isset() qui permet de vérifier si la variable $_POST['email'] existe, et par conséquent de vérifier si le formulaire a été soumis, on peut é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 (isset($_POST['email'])) {
			$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>

Articles connexes