begin process at 2012 05 27 22:08:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > CLASS DE CONTRÔLE DE FORMULAIRE

CLASS DE CONTRÔLE DE FORMULAIRE


 Information sur la source

Note :
Aucune note
Catégorie :Formulaires Classé sous :contrôle, formulaire, class, simple Niveau :Débutant Date de création :08/02/2009 Date de mise à jour :08/02/2009 15:00:38 Vu :6 941

Auteur : baxterio

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Une petite classe de contrôle de formulaire pour continuer mon apprentissage de la POO, simple et rapide d'utilisation, optimisable.

Les critiques constructives sont les bienvenues.

Source

  • <?php
  • class CheckForm{
  • # Instantiation des variables avec des valeurs par defaut
  • # Pour CheckLongTxt()
  • public $lenmin = 5;
  • public $lenmax = 255;
  • # Pour CheckChp()
  • public $lenchpmax = 25;
  • # Pour CheckPasswd()
  • public $lenminpwd = 6;
  • # Contôle du mail
  • public public function CheckMail($value){
  • return preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i',$value);
  • }
  • # Contrôle de l'égalité du mail et de sa confirmation
  • public function CheckEgalMail($value,$cvalue){
  • return ($this->CheckMail($value) == true && $value == $cvalue) ? true : false;
  • }
  • # Contrôle la longueur du mot de passe
  • public function CheckPasswd($value){
  • return (strlen($value) >= $this->lenminpwd) ? true : false;
  • }
  • # Contrôle de l'égalité du mot de passe et de sa confirmation
  • public function CheckEgalPasswd($value,$cvalue){
  • return (strlen($value) >= $this->lenminpwd && $value == $cvalue) ? true : false;
  • }
  • # Contrôle du numéro de téléphone
  • public function CheckPhone($value){
  • return preg_match('#^0[1-68]([-. ]?[0-9]{2}){4}$#', $value);
  • }
  • # Contrôle du code postal
  • public function CheckCp($value){
  • return preg_match('#^[0-9]{5}$#', $value);
  • }
  • # Contrôle d'un champ ordinaire (longueur min / max)
  • public function CheckChp($value){
  • return preg_match('#[-a-z]{2,'.$this->lenchpmax.'}#i', $value);
  • }
  • # Contrôle d'un champ texte long, type message (longueur min / max)
  • public function CheckLongTxt($value){
  • return (strlen($value) < $this->lenmin || strlen($value) > $this->lenmax) ? false : true;
  • }
  • # Function de validation du formulaire
  • public function ValidForm($arr_nb_form){
  • # On compte le nombre d'entrée du tableau
  • $count_arr = count($arr_nb_form);
  • # On additionne les valeurs du tableau
  • $sum_total = array_sum($arr_nb_form);
  • # Contrôle si les deux résultats sont égaux
  • return ($count_arr !== $sum_total || $sum_total == false) ? false : true;
  • }
  • }
  • # EXEMPLE :
  • # Si le temoin existe
  • if(isset($_POST['temoin'])){
  • # Objet CheckForm()
  • $checkf = new CheckForm();
  • $checkf->lenmin = 10;
  • $checkf->lenmax = 150;
  • # Vérification de la validitée des champs
  • $champ = array();
  • $champ[0] = $checkf->CheckChp($_POST['prenom']);
  • $champ[1] = $checkf->CheckChp($_POST['nom']);
  • $champ[2] = $checkf->CheckMail($_POST['email']);
  • $champ[3] = $checkf->CheckPhone($_POST['phone']);
  • $champ[4] = is_numeric($_POST['type']);
  • $champ[5] = $checkf->CheckLongTxt($_POST['msg']);
  • $champ[6] = $checkf->CheckPasswd($_POST['pass']);
  • $champ[7] = $checkf->CheckEgalPasswd($_POST['pass'], $_POST['cpass']);
  • # Si les champs sont tous valides alors ...
  • if($checkf->ValidForm($champ)){
  • # Formulaire valide
  • # Instruction ...
  • }
  • else # Sinon ...
  • # Instruction ...
  • }
  • ?>
  • <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
  • <p><input type="text" name="prenom" maxlength="32" /> <?php if(isset($champ[0]) && $champ[0] == false) echo "Prénom incorrect" ;?></p>
  • <p><input type="text" name="nom" maxlength="32" /> <?php if(isset($champ[1]) && $champ[1] == false) echo "Nom incorrect" ;?></p>
  • <p><input type="text" name="email" maxlength="32" /> <?php if(isset($champ[2]) && $champ[2] == false) echo "Email incorrect" ;?></p>
  • <p><input type="text" name="phone" maxlength="10" /> <?php if(isset($champ[3]) && $champ[3] == false) echo "Téléphone incorrect" ;?></p>
  • <p><input type="text" name="pass" maxlength="10" /> <?php if(isset($champ[6]) && $champ[6] == false) echo "Mot de passe incorrect" ;?></p>
  • <p><input type="text" name="cpass" maxlength="10" /> <?php if(isset($champ[7]) && $champ[7] == false) echo "Confirmation du mot de passe incorrect" ;?></p>
  • <select name="type">
  • <option value="1">Particulier</option>
  • <option value="2">Professionnel</option>
  • </select>
  • <p>
  • <textarea cols="50" rows="10" name="msg"></textarea>
  • </p>
  • <p>
  • <?php if(isset($champ[5]) && $champ[5] == false) echo "Message incorrect" ;?>
  • </p>
  • <p><input type="submit" name="temoin" value="envoyer"/></p>
  • </form>
<?php
	class CheckForm{
	
		#	Instantiation des variables avec des valeurs par defaut
		#	Pour CheckLongTxt()
		public $lenmin = 5;
		public $lenmax = 255;
		#	Pour CheckChp()
		public $lenchpmax = 25;
		#	Pour CheckPasswd()
		public $lenminpwd = 6;

	
		#	Contôle du mail
		public public function CheckMail($value){
			return preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i',$value);
		}
		
		#	Contrôle de l'égalité du mail et de sa confirmation
		public function CheckEgalMail($value,$cvalue){
			return ($this->CheckMail($value) == true && $value == $cvalue) ? true : false;
		}
		
		#	Contrôle la longueur du mot de passe
		public function CheckPasswd($value){
			return (strlen($value) >= $this->lenminpwd) ? true : false;
		}
		
		#	Contrôle de l'égalité du mot de passe et de sa confirmation
		public function CheckEgalPasswd($value,$cvalue){
			return (strlen($value) >= $this->lenminpwd && $value == $cvalue) ? true : false;
		}
		
		#	Contrôle du numéro de téléphone
		public function CheckPhone($value){
			return preg_match('#^0[1-68]([-. ]?[0-9]{2}){4}$#', $value);
		}	
		
		#	Contrôle du code postal
		public function CheckCp($value){
			return preg_match('#^[0-9]{5}$#', $value);
		}
		
		#	Contrôle d'un champ ordinaire (longueur min / max)
		public function CheckChp($value){
			return preg_match('#[-a-z]{2,'.$this->lenchpmax.'}#i', $value);
		}
		
		#	Contrôle d'un champ texte long, type message (longueur min / max)
		public function CheckLongTxt($value){
			return (strlen($value) < $this->lenmin || strlen($value) > $this->lenmax) ? false : true;
		}
		
		#	Function de validation du formulaire
		public function ValidForm($arr_nb_form){
			#	On compte le nombre d'entrée du tableau
			$count_arr = count($arr_nb_form);
			#	On additionne les valeurs du tableau
			$sum_total = array_sum($arr_nb_form);
			#	Contrôle si les deux résultats sont égaux
			return ($count_arr !== $sum_total || $sum_total == false) ? false : true;
		}
	}
	
	#	EXEMPLE :
	
	#	Si le temoin existe
	if(isset($_POST['temoin'])){
	
		#	Objet CheckForm()
		$checkf = new CheckForm();
		$checkf->lenmin = 10;
		$checkf->lenmax = 150;
		
		#	Vérification de la validitée des champs
		$champ = array();
		$champ[0] = $checkf->CheckChp($_POST['prenom']);
		$champ[1] = $checkf->CheckChp($_POST['nom']);
		$champ[2] = $checkf->CheckMail($_POST['email']);
		$champ[3] = $checkf->CheckPhone($_POST['phone']);
		$champ[4] = is_numeric($_POST['type']);
		$champ[5] = $checkf->CheckLongTxt($_POST['msg']);		
		$champ[6] = $checkf->CheckPasswd($_POST['pass']);		
		$champ[7] = $checkf->CheckEgalPasswd($_POST['pass'], $_POST['cpass']);		
		
		#	Si les champs sont tous valides alors ...
		if($checkf->ValidForm($champ)){
			#	Formulaire valide 
			#	Instruction ...
		}
		else	#	Sinon ...
			#	Instruction ...
			
	}

?>
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">

	<p><input type="text" name="prenom" maxlength="32" /> <?php if(isset($champ[0]) && $champ[0] == false) echo "Prénom incorrect" ;?></p>
	<p><input type="text" name="nom" maxlength="32" /> <?php if(isset($champ[1]) && $champ[1] == false) echo "Nom incorrect" ;?></p>
	<p><input type="text" name="email" maxlength="32" /> <?php if(isset($champ[2]) && $champ[2] == false) echo "Email incorrect" ;?></p>
	<p><input type="text" name="phone" maxlength="10" /> <?php if(isset($champ[3]) && $champ[3] == false) echo "Téléphone incorrect" ;?></p>
	<p><input type="text" name="pass" maxlength="10" /> <?php if(isset($champ[6]) && $champ[6] == false) echo "Mot de passe incorrect" ;?></p>
	<p><input type="text" name="cpass" maxlength="10" /> <?php if(isset($champ[7]) && $champ[7] == false) echo "Confirmation du mot de passe incorrect" ;?></p>
	<select name="type">
		<option value="1">Particulier</option>
		<option value="2">Professionnel</option>
	</select>
	<p>
		<textarea cols="50" rows="10" name="msg"></textarea>
	</p>
	<p>
	<?php if(isset($champ[5]) && $champ[5] == false) echo "Message incorrect" ;?>
	</p>
	<p><input type="submit" name="temoin" value="envoyer"/></p>
</form>

 Conclusion

Ne pas oublier addslashes() pour >CheckChp() & >CheckLongTxt() avant un éventuel enregistrement en Bdd.


 Historique

08 février 2009 12:57:19 :
"else" en trop supprimé
08 février 2009 13:01:27 :
dernier probleme réglé
08 février 2009 15:00:38 :
Modification suite à la remarque de MFARADAY, merci pour ta remarque au passage ;) ! Ajout de variable pour la longueur minimum et maximum de CheckLongTxt(), et CheckChp() ainsi qu'une variable pour la longueur minimum du mot de passe. Ajout d'une petite fonction CheckPasswd(), et correction d'erreurs dans le nom de l'array champ[]

 Sources de la même categorie

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture SELECTEUR DE NOTE par Reldan
Source avec Zip Source avec une capture ESPACE MEMBRE , AVEC CASE OPTIONNEL , SANS MYSQL par sartoz

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
TESTEUR DE REGEX par hornetbzz
Source avec Zip CLASSE : GÉNÉRATEUR DE MINIATURE STRICTE OPTIMISÉ par GauldoMagique
Source avec une capture FORMULAIRE DE CONTACT MULTICHAMPS par viki53

Commentaires et avis

Commentaire de mfaraday le 08/02/2009 13:43:14

Bonjour,

J'aime bien le principe... même si j'aurais tendance à faire une vérif préliminaire en JS.

Par contre ce qui m'embête, c'est que la classe est configurée pour ton utilisation, pourquoi ne pas mettre en variables les paramètres de fonctions par exemple le nombre mini et maxi de caractères pour la fonction checkCp ? ou même pour la vérification du mot de passe qui est d'une longueur 6 chez toi.

Voila je pense que ce serait utile de regrouper ces valeurs en début de classe.

Florian

Commentaire de webdeb le 08/02/2009 18:17:58

Salut,

Ton code n'est malheureusement pas spécialement réutilisable car tu l'as développé pour tes besoins très spécifiques. De plus, des méthodes de validation comme celle-ci n'ont visiblement rien à faire dans la même classe car elles ne sont pas de la même nature. Il vaut mieux faire une classe de validation par type de validation car c'est bien plus découplé et réutilisable. Par exemple, tu peux faire des classes comme :

ValidatorString, ValidatorEmail, ValidatorPostalCode, ValidatorPhoneNumber...

Toutes devraient implémenter une méthode isValid() pour vérifier la valeur soumise en paramètre. Ca te permet aussi de définir des paramètres particuliers à chaque validateur. Par exemple, une classe ValidatorString peut avoir les paramètres min_length, max_length, empty, trim... En fonction de ces paramètres, ta méthode isValid() effectue les traitements adéquats et jette des exceptions en cas d'erreur.

L'avantage aussi de tout découpler dans différentes classes, c'est de pouvoir rendre des objets les plus génériques possibles et de pouvoir effectuer facilement des tests unitaires dessus. Avec ta classe, le gros problème, c'est qu'il faudra à chaque fois ajouter une méthode supplémentaire si l'on a un besoin spécifique de validation (par exemple, valider un numéro de compte bancaire). Plus tu mets du code dans une classe, plus tu augmentes des risques d'effets de bord et moins le code est maintenable aussi.

Je te laisse méditer un peu sur la réflexion mais c'est là toute la puissance du paradigme objet. C'est de pouvoir créer tout plein d'objets qui sont chacun de petites unités fonctionnelles que tu fais interagir ensemble pour obtenir un résultat.

Commentaire de webdeb le 08/02/2009 18:20:07

Edit de mon commentaire, en anglais, C'est ZipCode pour code postal et non PostalCode ^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

code simple pour formulaire [ par bernard ] bonsoir à tous, je suis débutant de chez débutant et j'ai besoin d'aide.je voudrais réaliser un programme en php.il s'agit d'un formulaire où le visit formulaire sans bdd ? [ par ze_bassman ] voilà, j'ai un formulaire simple a creer (4 champs de texte, une zone de texte et un menu déroulant, je souhaiterai que les données soient envoyé par Mettre entre balise par simple click,un texte selectionné... [ par skab ] Bonjour! voila je voudrais savoir comment faire pour&nbsp; mettre entre balises un morceau de texte selection&#233; dans un formulaire j'utilise deja question simple dur l'action d'un formulaire [ par developvbdebut ] Bonjour tout le monde&nbsp;Je voudrais m&#234;ttre mon script php en&nbsp;dessou du formulaire, j'ignore quoi mettre dans l'action du formulaire.Voici Retour a la ligne affichage d'un formulaire [ par ArC3Nik ] BonjourMon problème et simple je pense...J'ai un page avec un formulaire :dans mon formulaire un un champ texte multilignesEt et quand ont clique sur Formulaire PHP + Script de contrôle... Ca ne marche pas! Pourquoi? [ par johann1 ] Bonjour tout le monde! Je viens de commencer &#224; m'initier au php,et depuis que je l'ai immiscer dans mon formulaire plus rien ne va! Y aurait-il u Ajouter formulaire par un simple clique [ par b_medamine ] Bonjour, J'ai un petit formulaire sur la m&#234;me ligne : &lt;form name='frm' action = 'action.php4'&gt; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt Erreur de formulaire PHP [ par Soul EX ] Bonjour &#224; tous,voici le code sur lequel j'ai travaill&#233; : switch (TRUE) {case ($class_officiel&gt;$class_maj & CLASS PERMETTANT DE CRÉER UNE IMAGE POUR LA VALIDATION D'UN FORMULAIRE [ par Tanaka56 ] Bonjour à tous.<br style="mso Formulaire simple newsletter [ par heder ] Bonjour à tous, Je suis en train de faire un formulaire simple pour [b]récupérer[/b] des emails pour une newsletter. L'idée est vraiment simple, les


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales