OVH Community, votre nouvel espace communautaire.

[Source] Class de verification d'un formulaire


ekozan
09/06/2012, 18h54
Bonjour a tous
je suis actuellement entrain d’écrire une classe de validation des champs d'un formulaire et j'ai décidé de vous la donner. elle n'est pas fini mais actuellement elle répond déjà à mes besoin si quelqu'un vois des améliorations à y apporter.

je suis preneur

Faite en bon usage

Code PHP:

namespace Library\Validator {



    class 
Form {

        private 
$_data = array();
        private 
$_errors = array();
        private 
$_validates = array();
        private 
$_formVariables = array();

        public function 
__construct($methode 'POST') {
            
$this->_getForm(strtoupper($methode));
        }

        private function 
_getForm($methode) {
            if (
$methode == 'POST')
                
$this->_formVariables $_POST;
            elseif (
$methode == 'GET')
                
$this->_formVariables $_GET;
        }

        public function 
addValidation($name$arg) {
            
$arg explode('='$arg);
            
$tmp = new \stdClass;
            
$tmp->name $name;
            
$tmp->type $arg[0];
            
$tmp->option = isset($arg[1]) ? $arg[1] : FALSE;
            
array_push($this->_data$tmp);
            unset(
$tmp);
        }

        public function 
ValidateForm() {
            foreach (
$this->_data as $d) {
                
$input_value = empty($this->_formVariables[$d->name]) ? FALSE $this->_formVariables[$d->name];
                if (
$d->type == 'isSame')
                    
$d->option = empty($this->_formVariables[$d->option]) ? FALSE $this->_formVariables[$d->option];
                
$result $this->_validrooter($d->type$input_value$d->option);
                if (
$result) {
                    if (!
array_key_exists($d->name$this->_errors))
                        
$this->_validates[$d->name] = $input_value;
                } elseif (
$result != 'skip') {

                    if (!
array_key_exists($d->name$this->_validates))
                        unset(
$this->_validates[$d->name]);
                    if (isset(
$this->_errors[$d->name]))
                        
$this->_errors[$d->name][] = $d->type;
                    else
                        
$this->_errors[$d->name] = array($d->type);
                }
            }
            if (
count($this->_errors) != 0)
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validrooter($type$input_value$option) {

            switch (
$type) {
                case 
'req' :
                    return 
$this->_validREQ($input_value);
                    break;
                case 
'email':
                    return 
$this->_validEMAIL($input_value);
                    break;
                case 
'phone':
                    return 
$this->_validPHONE($input_value);
                    break;
                case 
'maxlen':
                    return 
$this->_validMAXLEN($input_value$option);
                    break;
                case 
'minlen':
                    return 
$this->_validMINLEN($input_value$option);
                    break;
                case 
'alnum':
                    return 
$this->_validSTR('/^([a-zA-Z0-9])+$/'$input_value);
                    break;
                case 
'alnum_s':
                    return 
$this->_validSTR('/^([a-zA-Z0-9 _-])+$/'$input_value);
                    break;
                case 
'num':
                    return 
$this->_validSTR('/^([0-9])+$/'$input_value);
                    break;
                case 
'alpha':
                    return 
$this->_validSTR('/^([a-zA-Z])+$/'$input_value);
                    break;
                case 
'alpha_s':
                    return 
$this->_validSTR('/^([a-zA-Z _-])+$/'$input_value);
                    break;
                case 
'lessthan':
                case 
'lt':
                    return 
$this->_validLT($input_value$option);
                    break;
                case 
'gt':
                case 
'greaterthan':
                    return 
$this->_validGT($input_value$option);
                    break;
                case 
'regexp':
                    return 
$this->_validSTR($option$input_value);
                    break;
                case 
'is':
                case 
'isSame':
                    return 
$this->_validIS($input_value$option);
                    break;
            }
        }

        private function 
_validREQ($input_value) {
            if (!isset(
$input_value) OR strlen($input_value) <= 0)
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validEMAIL($input_value) {
            if (empty(
$input_value))
                return 
'skip';
            if (!
preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/'$input_value))
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validPHONE($input_value) {
            if (empty(
$input_value))
                return 
'skip';
            if (!
preg_match('/^[0-9]{6}$/'$input_value))
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validIS($input_value$input_value2) {
            if (empty(
$input_value))
                return 
'skip';
            if (
$input_value != $input_value2)
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validMAXLEN($input_value$maxlen) {
            if (empty(
$input_value))
                return 
'skip';
            if (
strlen($input_value) > $maxlen)
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validMINLEN($input_value$minlen) {
            if (empty(
$input_value))
                return 
'skip';
            if (
strlen($input_value) < $minlen)
                return 
FALSE;
            return 
TRUE;
        }

        private function 
_validLT($input_value$value) {
            if (empty(
$input_value))
                return 
'skip';
            if (
$input_value $value)
                return 
TRUE;
            return 
FALSE;
        }

        private function 
_validGT($input_value$value) {
            if (empty(
$input_value))
                return 
'skip';
            if (
$input_value $value)
                return 
TRUE;
            return 
FALSE;
        }

        private function 
_validSTR($regex$input_value) {
            if (empty(
$input_value))
                return 
'skip';
            if (!
preg_match($regex$input_value))
                return 
FALSE;
            return 
TRUE;
        }

        public function 
GetErrors() {
            return 
$this->_errors;
        }

        public function 
GetValidates() {
            return 
$this->_validates;
        }

    }

}
?>

pour l'utilisation

Code PHP:
 $formvalidator = new \Library\Validator\Form();
                
$formvalidator->addValidation('pseudo''req');
                
$formvalidator->addValidation('pseudo''minlen=3');
                
$formvalidator->addValidation('pseudo''maxlen=10');
                
$formvalidator->addValidation('pseudo''regexp=/^[a-zA-Z]([a-zA-Z0-9])+$/');
                
$formvalidator->addValidation('email''req');
                
$formvalidator->addValidation('email''email');
                
$formvalidator->addValidation('pwd''req');
                
$formvalidator->addValidation('pwd''minlen=6');
                
$formvalidator->addValidation('rpwd''req');
                
$formvalidator->addValidation('rpwd''isSame=pwd');
                
$formvalidator->addValidation('captcha''req');
                
$captcha = isset($_SESSION['captcha']) ? $_SESSION['captcha'] : 'FALSE';
                
$formvalidator->addValidation('captcha''is=' $captcha);

                if (
$formvalidator->ValidateForm()) {
                   echo 
'ok';
                } else {
                    echo 
'pasok';
                    
$erreurs $formvalidator->GetErrors();
                    
$validinput $formvalidator->GetValidates();
                }