Classe pour gérer les formulaires html

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 186 fois - Téléchargée 32 fois

Contenu du snippet

Vous devez disposez de php5, le reste va de suite...

Source / Exemple :


################## CPhanaticFormHTML.class.php ##################
<?php
/**

  • class représentant un formulaire HTML
  • /
abstract class CPhanaticFormHTML { /** @var array liste des champs enregistrés*/ private $registerInputs=array(); /** @var array liste des methodes de validation */ private $inputValidationMethods=array(); /** @var array liste des messages d'erreur */ private $inputErrorMessages=array(); /** @var string nom du formulaire */ private $formName; /** @var boolean comportement sur la validation */ private $cleanOnValidat; /**
  • @param string $formName identifiant du formulaire ( unique pour une session )
  • @param boolean $cleanOnValidat deternime si l'etat du formulaire doit être sauvegardé aprés sa validation
  • /
function __construct($formName="_DEFAULT", $cleanOnValidat=TRUE){ $this->formName = $formName; $this->cleanOnValidat = $cleanOnValidat; if(empty($_SESSION[$this->formName])){ $this->initialize(); $_SESSION[$this->formName] = "ready"; } } /**
  • enregistrement d'un champ de formulaire
  • @param string $inputName nom du champ ( nom HTML )
  • @param string $validationMethodeName methode qui sera appelée pour valider le champ : public boolean methodName(string $value)
  • @param string $errorMessage message renvoyé en cas d'erreur sur le champ
  • /
protected function resigsterInput($inputName,$validationMethodeName, $errorMessage){ if(!in_array($inputName, $this->registerInputs)){ $this->inputValidationMethods[$inputName] = $validationMethodeName; $this->inputErrorMessages[$inputName] = $errorMessage; } } /**
  • netoyage de la session
  • /
public function clean(){ foreach($this->registerInputs as $input){ $validValueInputName = $this->formName . "_" . $inputName . "_VALUE"; $validMessageInputName = $this->formName . "_" . $inputName . "_MSG"; if(!empty($_SESSION[$validValueInputName])){ unset($_SESSION[$validValueInputName]); } if(!empty($_SESSION[$validMessageInputName])){ unset($_SESSION[$validMessageInputName]); } } } /**
  • teste s'il le formulaire a été posté
  • @return boolean - true si oui
  • - false dans tous les autres cas
  • /
public function isPosted(){ return !empty($_POST[$this->formName]); } /**
  • obtenir la valeur d'un champ
  • @param string $inputName nom du champ ( nom HTML )
  • @return string
  • /
public function getInputValue($inputName){ $validInputName = $this->formName . "_" . $inputName . "_VALUE"; if(array_key_exists($validInputName,$_SESSION)){ $_SESSION[$validInputName] = ""; } return $_SESSION[$validInputName]; } /**
  • définir la valeur d'un champ
  • @param string $inputName nom du champ ( nom HTML )
  • @param string $inputValue valeur du champ
  • /
public function setInputValue($inputName, $inputValue){ $validInputName = $this->formName . "_" . $inputName . "_VALUE"; $_SESSION[$validInputName] = $inputValue; } /**
  • obtenir le message d'un champ
  • @param string $inputName nom du champ ( nom HTML )
  • @return string
  • /
public function getInputMessage($inputName){ $validInputName = $this->formName . "_" . $inputName . "_MSG"; if(array_key_exists($validInputName,$_SESSION)){ $_SESSION[$validInputName] = ""; } return $_SESSION[$validInputName]; } /**
  • définir le message d'un champ
  • @param string $inputName nom du champ ( nom HTML )
  • @param string $inputMessage message du champ
  • /
public function setInputMessage($inputName, $inputMessage){ $validInputName = $this->formName . "_" . $inputName . "_MSG"; $_SESSION[$validInputName] = $inputValue; } /**
  • teste s'il le formulaire est valide
  • @return boolean - TRUE si oui
  • - FALSE dans tous les autres cas
  • /
public function isValidate(){ $result = TRUE; // vider la pile des anciens messages unset($this->messages); $this->messages = array(); //interogation de la classe d'implémentation $cls = new ReflectionClass(get_class($this)); $validatMethod = null; // effecter le travail pour tous les champs enregistrés foreach($this->registerInputs as $input){ if(!array_key_exists($input, $_POST)){ $this->messages[$input] = "Ce champ n'existe pas dans le formulaire !"; $result = FALSE; break; } $validatMethod = $cls->getMethod($this->inputValidationMethods[$inputName]); // teste de la valeur if(!$validatMethod->invoke($this,$_POST[$inputName])){ $this->messages[$input] = $this->inputErrorMessages[$inputName]; $result = FALSE; break; } } //notification de l'évennement de validation if($result){ $this->onValidate(); if($this->cleanOnValidat){ $this->clean(); } } else { $this->onInvalidate(); } return $result; } /**
  • appeler l'or de la premiere instentiation
  • /
protected function initialize(){ } /**
  • appeler en cas de non validation ( ne pas faire de redirection )
  • /
protected function onInvalidate(){ } /**
  • appeler en cas de validation ( ne pas faire de redirection )
  • /
protected function onValidate(){ } /* validations prédéfinies */ public static function isNotEmty($string){ return !empty($string); } public static function isUSZipCode($string){ return preg_match("/^[2-9][0-9]{4}([-]{1}[0-9]{4})?$/",$string)); } public static function isUSPhoneNumber($phonenumber){ return preg_match("/^[0-9]{3,3}[-]{1,1}[0-9]{3,3}[-]{1,1} [0-9]{4,4}$/", $phonenumber); } public static function isIPAddress($ip_addr){ $num="(1?\d\d|2[0-4]\d|25[0-5]|[0-9])"; return preg_match("/$num\.$num\.$num\.$num/",$ip_addr); } public static function isEmail($email){ // j'ai la flème .... return !empty($email); } } ?> ################## CMyFormHTML.class.php ################## <?php include_once ("CPhanaticFormHTML.class.php"); class CMyFormHTML extends CPhanaticFormHTML { function __construct(){ parent::__construct("_MYFORMHTML"); $this->resigsterInput("_NAME","isValidateName", ""); $this->resigsterInput("_EMAIL","isValidateEmail", ""); $this->resigsterInput("_PHONE","isValidatePhone", ""); } protected function initialize(){ $this->setInputValue("_NAME","Alce"); } protected function onInvalidate(){ } protected function onValidate(){ } public static function isValidateName($value){ return self::isNotEmpty($value); } public static function isValidateEmail($value){ if(!self::isNotEmpty($value)) return FALSE; if(!self::isEmail($value)) return FALSE; return TRUE; } public static function isValidatePhone($value){ if(!self::isNotEmpty($value)) return FALSE; if(!self::isUSPhoneNumber($value)) return FALSE; return TRUE; } } ?> ################## index.php ################## <?php include_once ("CMyFormHTML.class.php"); $myForm = new CMyFormHTML(); if($myForm->isPosted()){ if($myForm->isValidate()){ // ... } else { // ... } } ?> <html> <head> <title>Sample: CPhanaticFormHTML</title> </head> <body> <form name="_MYFORMHTML" method="post"> <!-- ne pas oublier de déclarer un champ chaché du même nom que le formulaire --> <input type="hidden" name="_MYFORMHTML" value="OK"> <p>name&nbsp;:&nbsp; <input name="_NAME" value=\"<?php=$myForm->getInputValue("_NAME")?>\"> <font color="red"><?php=$myForm->getInputMessage("_NAME")?></font> </p> <p>email&nbsp;:&nbsp; <input name="_EMAIL" value=\"<?php=$myForm->getInputValue("_EMAIL")?>\"> <font color="red"><?php=$myForm->getInputMessage("_EMAIL")?></font> </p> <p>phone&nbsp;:&nbsp; <input name="_PHONE" value=\"<?php=$myForm->getInputValue("_PHONE")?>\"> <font color="red"><?php=$myForm->getInputMessage("_PHONE")?></font> </p> <p> <input type=submit value=Submit name=B1> </p> </form> </body> </html>

A voir également

Ajouter un commentaire

Commentaires

morpheus507
Messages postés
1
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
7 janvier 2009
-
Bonjour,

C'est vrai que cela manque de commentaires c'est dommage, sinon je trouve le code bon (je l'ai testé).

Personne ne sait comment réaliser un formulaire d'authentification à l'aide de ZendFramework ?

Merci.
issam_vb
Messages postés
1
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
6 janvier 2009
-
Bonjours,

c'est un bon code, sauf qelques erreurs dans la syntaxe au niveau de la page index.php il faut enlever les = apres les balises php. et au niveau de la page CPhanaticFormHTML.class.php dans la ligne 167 enlève la derniere pranthese.

bon courage
marik7335
Messages postés
117
Date d'inscription
samedi 27 décembre 2003
Statut
Membre
Dernière intervention
11 mai 2009
-
Salut,
Ton code est interessant. Par contre, je trouve qu'il n'y a pas assez de commentaires sinon je te félicite pour ton travail.
Cordialement
Marik7335

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.