Tester la validité des éléments d'un formulaire

Avant d'insérer les champs d'un formulaire dans une base de données il peut être utile de vérifier que les données sont conformes à ce qu'on attend. Voici quelques exemples de contrôle que l'on peut faire :

Vérifier que le champ est rempli

Voici la vérification la plus simple : pour tester si un champ a bien été saisi on utilise la fonction empty.

Par exemple, si on demande le nom d'une personne dans un formulaire et que celui-ci est stocké dans la variable $nom, le code ci-dessous permet de tester que le champ a bien été rempli :

if (empty($nom))
 {
 echo "Vous n'avez pas saisi votre nom";
 } 

Vérifier qu'un champ est numérique

Pour tester si un champ est numérique, on utilise la fonction is_numeric :

if (!is_numeric($chiffre))
 {
 echo "La donnée saisie n'est pas un chiffre";
 } 

Dans le même genre vous pouvez utiliser les fonctions : is_bool , is_float , is_int , is_string , is_object et is_array (teste les booléens, nombres décimaux, entiers, chaines de caractères, objets, tableaux).

La fonction ereg

La fonction ereg permet de rechercher une chaine de caractère dans une autre chaine.

Utilisation de ereg :

 ereg (chaine à chercher, chaine)

Par exemple :

ereg("@",$mail) recherche le symbole @ dans une variable contenant une adresse e-mail.

eregi est similaire à ereg, sauf que cette fonction n'est pas sensible à la casse.

Exercice
Créer un formulaire de saisie d'e-mail, puis une page qui teste que l'adresse contient bien le symbole @.

Les participants suivis peuvent reprendre les exercices du début de ce cours et les compléter puis les déposer dans "Vos travaux".

Les expressions régulières

Compliquons un peu. Les expressions régulières sont un système qui permet de manipuler des chaines de textes. On peut faire une recherche à partir d'un modèle de chaine à l'intérieur d'une autre chaine. Les expressions régulières s'utilisent entre autre avec les fonctions ereg et eregi.

En application, nous verrons comment tester la validité d'une adresse mail de façon plus complète que dans l'exercice précédent.

Voici la syntaxe des expressions régulières :

"^a" représente une chaine qui commence par a (ex : arbre, avion, aa, ...)

Si on veut tester qu'une chaine commence par "a", on pourra le faire ainsi :

if (ereg("^a",$chaine))
 {
 echo "Votre texte commence par un a";
 }

Le même exemple pourrait être appliqué aux cas suivants :

"a$" représente une chaine qui fini par "a" (ex : lalala, tata, ...)

"ab*" représente une chaine qui commence par a, suivi de 0 ou plusieurs b (ex : a, ab, abb, ...)

"ab+" représente une chaine qui commence par a, suivi de 1 ou plusieurs b (ex : ab, abb, ... mais pas a)

"abc?" représente une chaine qui commence par ab, suivi de 0 ou 1 c (ex : ab ou abc)

"o(ups)*" représente une chaine qui commence par o, suivi de 0 ou plusieurs chaine ups (ex: o, oups, oupsups, ...)

"abc{4}" représente une chaine commençant par ab et 4 fois la lettre c

"a(bc){2,4}" représente une chaine commençant par a et suivi de la chaine bc répétée entre 2 et 4 fois (ex : abcbc, abcbcbc, abcbcbcbc)

Le point (.) représente n'importe quel caractère.

"a|b" représente la caractère a ou b

Les crochets indiquent le type de caractères autorisés à un endroit donné du modèle :

[a-f] : un caractère entre a et f.

[0-9] : un chiffre entre 0 et 9.

[A-Z] : une lettre majuscule entre A et Z.

Un exemple :

Une utilisation classique des expressions régulières est de tester la validité d'une adresse mail.

Une adresse email est un texte séparé par le symbole @. A gauche on peut avoir un point, un - et un _. A droite on peut avoir un point ou un tiret, mais pas de _. L'adresse ne peut pas commencer par un point et il ne peut pas y avoir deux points de suite.

Essayons de paramétrer ces conditions :

La partie gauche doit commencer par un caractère autre que le point : ^[_a-z0-9-]

Il peut y avoir plusieurs caractères : ^[_a-z0-9-]+

Puis un point (l'anti-slash est nécessaire car le point a une signification dans les expressions régulières): ^[_a-z0-9-]+\.

Ensuite on affiche à nouveau 1 ou plusieurs caractères : ^[_a-z0-9-]+\.[_a-z0-9-]+

Mais le point n'est pas obligatoire, donc on place des parenthèses, le contenu de ces parenthèses est répété entre 0 et n fois : ^[_a-z0-9-]+(\.[_a-z0-9-]+)*

On impose la présence de @ : ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@

Puis la partie droite de l'adresse, idem à la partie gauche (avec _ en moins) :^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

Utilisation dans un script :

if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$mail))
 {
 echo "l'adresse mail est invalide";
 }
 else
 {echo "ok";}
Le point d'exclamation devant eregi, signifie "contraire" ou "n'est pas". Si la fonction eregi trouve la chaine recherchée, elle renvoie TRUE. Donc le point d'exclamation signifiant le contraire, le test de la condition if sera valide s'il retourne FALSE.

La fonction eregi ne tient pas compte de la casse. Elle va vérifier si l'adresse email est valide. Si ce n'est pas le cas, un message d'erreur sera affiché.
Cours suivant : chargement de fichiers par méthode POST
Skip En musique ...

En musique ...


Cliquez sur "Détacher" pour écouter la radio Muzeeli tout en naviguant sur le site sans que la musique soit coupée !
<PreviousNext>