[php5] - classe de vérification de formulaire

Soyez le premier à donner votre avis sur cette source.

Vue 13 538 fois - Téléchargée 908 fois

Description

Bonjour à tous ! :)
Voila, je devais me faire une classe afin de vérifier les entrées d'un formulaire. J'ai fait trois classes et deux gestionnaires d'erreur que vous trouverez dans le zip.

Alors la classe de vérification (formCheck) s'appele en statique. Du coup, vous pouvez l'appeler pour n'importe quel usage tant qu'elle reste accessible là ou vous l'appelez :)

Alors voila comment cela se passe.
Vous instanciez la classe formHandler.
Ensuite vous instanciez autant de formRule que vous voulez pour vos éléments (une instance de formRule pour un élément).
Vous leur appliquer des regles définies dans formCheck, en utilisant : setNomFunctionDansFormCheck (mettre le set avant), avec en premier parametre (optionnel), une valeur à transmettre à la fonction de formCheck (int, string ou array), et en deuxieme parametre (ou premier s'il n'y a rien à passer à la fonction formCheck), le message d'erreur à afficher.

Ensuite vous pouvez mettre votre instance de formRule pour l'element dans la méthode addRule de formHandler.
(Vous pouvez mettre toutes les instances à la suite dans addRule, ou appeler addRule pour chaques éléments)

La fonction validate de formHandler va vérifier s'il n'y a pas eu d'erreurs retournée par les instances de formRule.
Vous pouvez afficher la valeur de l'élément dans l'instance de formRule juste en appelant l'instance (voyez l'exemple) (utilisation de __toString ())

Vous pouvez récuperer une erreur, toutes les erreurs pour un élément ($oFormRuleInstance->getError ($NumErreur) ou $oFRI->getAllErrors ()), ou juste récuperer la premiere erreur apparue : $oFormHandler->getFirstError () (voir exemple).
S'il n'y a pas eu d'erreur, getFirstError retourne null.

Wala :)

Voici le résultat :

Source / Exemple :


<?php
require_once ('genericException/genericException.class.php');
require_once ('formHandler/formRule.class.php');
require_once ('formHandler/formHandler.class.php');

$oFh = new formHandler ();

$oLogin = new formRule ('login');
$oLogin->setIsRequired ('Veuillez indiquer un pseudo !');
$oLogin->setMaxLength (25, 'Votre pseudo ne doit pas faire plus de 25 caractères !');

$oPass = new formRule ('passwd');
$oPass->setIsRequired ('Veuillez indiquer un mot de passe');
$oPass->setMinLength (6, 'Votre mot de passe doit avoir plus de 6 caractères');

$oConf = new formRule ('confpass');
$oConf->setIsRequired ('Veuillez indiquer une Confirmation de mot de passe');
$oConf->setMinLength (6, 'Votre Confirmation de mot de passe doit avoir plus de 6 caractères');
$oConf->setIsEqual ($oPass, 'Votre mot de passe doit être identique a sa confirmation');

$oMail = new formRule ('email');
$oMail->setIsRequired ('Votre email est obligatoire !');
$oMail->setIsEmail ('Votre email est invalide !');

$oWeb = new formRule ('web');
$oWeb->setIsRequired ('Votre site Web est requis !');
$oWeb->setIsUrl ('l\'Url de votre site est invalide !');

$oGenre = new formRule ('genre');
$oGenre->setIsRequired ('Genre requis !');
$oGenre->setIsNotEqual('---------', 'Veuillez choisir un genre !');

$oAnimaux = new formRule ('animaux');
$oAnimaux->setIsRequired ('Animaux requis !');

$oFh->addRule($oLogin, $oPass, $oConf, $oMail, $oWeb, $oGenre, $oAnimaux);

if ($oFh->validate ()) {
	echo "Le formulaire à parfaitement été validé ! :)";
}
else {
	?>
	<form method="post" action=".">
	Login : <input type="text" name="login" value="<?php echo $oLogin; ?>" /><br />
	Password : <input type="text" name="passwd" value="<?php echo $oPass; ?>" /><br />
	Confirmation : <input type="text" name="confpass" value="<?php echo $oConf; ?>" /><br />
	Email : <input type="text" name="email" value="<?php echo $oMail; ?>" /><br />
	Site Web : <input type="text" name="web" value="<?php echo $oWeb; ?>" /><br />
	<select name="genre[]">
		<option>---------</option
		<option value="H">Homme</option>
		<option value="F">Femme</option>
	</select>
	<br />
	<select size="9"  MULTIPLE="MULTIPLE" name="animaux[]">
		<option>Chat</option>
		<option>Chien</option>
		<option>Hamster</option>
		<option>Lapin</option>
		<option>Autre</option>
	</select><br />
	<?php echo $oFh->getFirstError (); ?><br />
	<input type="submit" name="Envoyer !" />
	</form>
	<?php
}
?>

Conclusion :


Voila pour le petit exemple :)

Après modifications, cette classe permet une meilleur flexibilité pour la gestion des éléments.
Maintenant, pour la structure ou les avis, j'attends vos commentaires :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Banish
Messages postés
1
Date d'inscription
jeudi 11 mars 2010
Statut
Membre
Dernière intervention
2 juillet 2010

Zipzip n'a pas dû beaucoup chercher ^^

Bref, c'est vrai que le code exemple n'est pas à jour. Si vous voulez rapidement tester cette classe, il faut:

1) Ajouter la classe genericException qui manque dans le zip, et que l'on peut trouver ici:
http://files.codes-sources.com/fichier.aspx?id=44038&f=genericException%2fgenericException.class.php

2) Remplacer les require du code de test par:
require_once ('formHandler/formRule.class.php');
require_once ('formHandler/formHandler.class.php');

3) Ajouter un
require_once ('genericException.class.php');
dans formHandlerException.class.php et formRuleException.class.php

Sinon, code bien fichu, que je vais tester et éventuellement compléter pour qu'il livre des valeurs sécurisées (addslashes, htmlentities etc).
zipzip2005
Messages postés
1
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 mai 2009

Jamais vu un code aussi merdique !!
la classe generic handler est manquante dans la livraison
l'auteur nous demande d'aller chercher dans ses autres sources , la lasse manquate
apres avoir qq minutes de recherches , je trouve une classe a peu pres du meme nom, est ce la bonne version ? je l'ignore
je teste ... et là je vois s'afficher des erreurs interne au pretendu frame work de validation des formulaire .

Codefalse , tu portes bien ton nom
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
à la place du return false, il faisait quoi ? s'il retournait null, fallait tester if (is_null ($tonretour));

pour la condition, essaye plutot :
if (!empty ($this->pro))
return $this->pro;
else
return false; // null ?

Ca fait plaisir de voir que ma classe est utilisée sur tes sites :) vraiment :)
marciv
Messages postés
6
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
21 janvier 2009

Bon ça marche avec la fonction suivante et en remettant toutes les variables en protected :

public function __get($pro) {
if($this->$pro!="") {
return $this->$pro;
}
else {
return false;
}
}

thanks et bon dimanche
marciv
Messages postés
6
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
21 janvier 2009

Merci codefalse de tes précisions, peut être qu'un jour les classes n'auront plus de secrets pour moi :-) ce jour étant loin je précise :

mon problème n'est pas exactement de voir un si un email à été renseigné mais de faire un test spécifique en fonction de la valeur d'un champs du formulaire,
exemple
formulaire:
<select style="background-color:#D6DEF5;" name="devis_type_de_bien">
<option>-----</option>
<option value="maison">Maison</option>
<option value="appartement">Appartement</option>
<option value="autre">Autre</option>
</select>

Si autre, précisez :


donc j'ai besoin d'un truc du genre :

if (($devis_type_de_bien->_aElementValue=="autre")) {
$devis_type_de_bien_autre->setIsRequired ('Veuillez indiquer des précisions sur le type de bien !');
$devis_type_de_bien_autre->setMinLength (3, 'Vos précisions sur le type de bien doivent comporter plus de 3 caractères (Exemple : parking ouvert, commerce rdc, box etc...) !');
}

Je n'ai pas trouvé comment faire autrement...

j'ai bien essayé de rajouter un truc du genre :
public function __getVal() {
return ($this->aElementValue);
}
avec
test sur $devis_type_de_bien_autre->__getVal()
mais ça marche pas

PS au fait quand tu fait le test :
(is_object ($devis_type_de_bien_autre) && $devis_type_de_bien_autre instanceof formRule)
le retour est toujours true que le champs du formulaire soit renseigné ou pas et quand je print j'ai toujours ça :

formRule Object ( [_sDelimiter:protected] => . [_aElementValue] => [_iCountErrors:protected] => 0 [_aErrors:protected] => Array ( ) [_aRules:protected] => Array ( ) )

En tout cas merci de tes précisions et de ta classe qui ne quitte plus mes site :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.