Classe pour gérer les formulaires html

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

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.