Les assertions et vérification de formulaire
CrazyCat » 06/ 09/2009 15:48
PHP
|
Envoyer à un ami |
Fil des commentaires de ce billet
Cette classe abstraite permet de vérifier certaines assertions, ou en d'autres termes de vérifier qu'une valeur répond à une condition.
Les vérifications présentées ici sont très simples mais permettent de traiter la plupart des conditions requises pour un formulaire. Voici le détail des fonctionnalités actuelles.
Détails des méthodes
Actuellement, la classe contient 5 vérifications, qui renvoient un booléen (true/false):
Champ vide
La fonction isEmpty renvoie true si la chaîne passée est vide, c'est à dire si elle ne contient que des caractères "blancs" (espace, tabulation, retour à la ligne).
<?php function isEmpty($string) { $string = preg_replace("!\s!m", "", $string); if (trim($string)=='') return true; else return false; } ?>
Champs égaux
La fonction isEqual vérifie que deux chaînes sont identiques.
<?php function isEqual($string1, $string2) { if ($string1==$string2) return true; else return false; } ?>
Champ Email
La fonction isEmail vérifie qu'un champ donné a la syntaxe d'une adresse email.
<?php function isEmail($email) { $pattern = '/^[a-z0-9\._\-\+]+@[a-z0-9\.-]{2,}\.[a-z]{2,4}$/i'; if (preg_match($pattern, $email) == 1) return true; else return false; } ?>
Champ normalisé
La fonction isNormalized permet de vérifier qu'une chaîne ne contient que des lettres, des chiffres, des tirets et des underline.
<?php function isNormalized($string) { $pattern = '![^a-z0-9\-_]!i'; return !preg_match($pattern, $string); } ?>
Longueur minimum d'un champ
La fonction isMini permet de vérifier qu'une chaîne fait au moins une taille minimum (3 caractères par défaut).
<?php function isMini($string, $length=3) { if (strlen($string) < $length) return false; return true; } ?>
Elle ne fait aucun contrôle sur les caractères eux-mêmes, ce qui signifie qu'une chaîne ne contenant que des tabulations ou des retours à la ligne en nombre suffisant renvoie true. Cette fonction est donc souvent associée à isEmpty().
Utilisation
Il suffit d'inclure la classe et de faire des appels des fonctions.
Prenons le cas d'un formulaire d'inscription qui demande:
- un login devant faire au moins 4 caractères
- un mot de passe (entré deux fois) devant faire au moins 6 caractères
- une adresse mail
$this->app->_pst correspond en fait au tableau $_POST
<?php define('INVALID_EMAIL', 'L\'email doit être valide'); define('MISMATCH_PASSWORD', 'Les mots de passe ne correspondent pas'); define('MINIMAL_LOGIN', 'Le pseudonyme doit faire au moins 4 caractères'); define('MINIMAL_PASSWORD', 'Le mot de passe doit faire au moins 6 caractères'); define('BADCHARS_LOGIN', 'Le pseudonyme ne peut contenir que des lettres non-accentuées, des chiffres, le signe "-" et le signe "_"'); if (Assert::isEmpty($this->app->_pst('login')) || !Assert::isMini($this->app->_pst('login'), '4')) { this->app->log(2, MINIMAL_LOGIN); } if (!Assert::isEmail($this->app->_pst('email'))) { $this->app->log(2, INVALID_EMAIL); } if (Assert::isEmpty($this->app->_pst('passwd')) || !Assert::isMini($this->app->_pst('passwd'), '6')) { $this->app->log(2, MINIMAL_PASSWORD); } if (!Assert::isEqual($this->app->_pst('passwd'), $this->app->_pst('passwd_2'))) { $this->app->log(2, MISMATCH_PASSWORD); } ?>
Sources
Cette petite classe est disponible ici, n'hésitez pas à la compléter et me transmettre vos modifications.
Commentaires
Le 15/ 02/2010 16:05
Bonjour CrazyCat, merci pour cette source.
Il n'y a pas longtemps que je m'intéresse aux classes (à la POO devrais-je dire) j'avance très doucement, je fais des tests... je n'y arrive pas tout le temps.
J'ai essayé de lire ce que j'ai trouvé à propos des classes abstraites, c'est encore plus difficile.
Tu vois, j'essaye de comprendre la logique qui doit réunir ta classe classPhpMail et celle-ci.
Si ce n'est pas trop compliqué... pourrais-tu m'éclairer un peu ?
Un grand merci !
C'est assez simple à utiliser en fait.
Il faut que la classe Assert soit chargée, soit à la main en utilisant un require_once(), soit automatiquement en utilisant un autoload.
Dans la classe PhpMail, il faut modifier les vérifications des données. Par exemple:
Le 16/ 02/2010 22:08
Bonjour CrazyCat,
je vous remercie pour votre réponse rapide, je comprends mieux quoique les résultats ne soient pas à la hauteur...
Je retourne piocher un peu... et merci encore