Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE POUR GÉRER LES FORMULAIRES HTML


Information sur la source

Description

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

Source

  • ################## 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>
################## 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>

Commentaires et avis

signaler à un administrateur
Commentaire de marik7335 le 10/11/2004 21:51:30

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

signaler à un administrateur
Commentaire de issam_vb le 06/01/2009 23:01:00

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

signaler à un administrateur
Commentaire de morpheus507 le 07/01/2009 09:46:53

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.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.