- ################## 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 :
- <input name="_NAME" value=\"<?php=$myForm->getInputValue("_NAME")?>\">
- <font color="red"><?php=$myForm->getInputMessage("_NAME")?></font>
- </p>
- <p>email :
- <input name="_EMAIL" value=\"<?php=$myForm->getInputValue("_EMAIL")?>\">
- <font color="red"><?php=$myForm->getInputMessage("_EMAIL")?></font>
- </p>
- <p>phone :
- <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 :
<input name="_NAME" value=\"<?php=$myForm->getInputValue("_NAME")?>\">
<font color="red"><?php=$myForm->getInputMessage("_NAME")?></font>
</p>
<p>email :
<input name="_EMAIL" value=\"<?php=$myForm->getInputValue("_EMAIL")?>\">
<font color="red"><?php=$myForm->getInputMessage("_EMAIL")?></font>
</p>
<p>phone :
<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>