IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier les champs d'un formulaire


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut Vérifier les champs d'un formulaire
    Bonjour;

    Est ce qu'il y a quelqu'un qui a une idée comment faire une classe de vérification des champs d'un formulaire, dans mon exemple, j'ai déterminé deux fonctions pour voir si un champs est vide et s'il contient un min et max de caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
     
    class verifFields{
     
    	public final function isEmpty($field, $emMsg) // nom du champs a controler et le message d'erreur
    		{
    			if(empty($field))
    			{
    				echo $emMsg;	
    			}
    			else
    			{
    				echo 'name est bien';
    			}
    		}
     
    	public final function tailleField($field, $mix=3, $max=10) 
    		{
    			$field = strlen($field;
    			// code
    			return $field;
    		}
     
     
     
     
     
     
    }
     
    $verif = new verifFields();
    $verif->isEmpty('name', 'mon Message');
     
    ?>
     
    <form action="<?php $_SERVER['php_self']; ?>" method="POST">
    <input type="text" name="name" />
    <input type="submit" />
    </form>
     
    <?php
    echo 'nom est:  '.$name.'<br>';
    ?>
    merci pour votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Salut,

    Je ne sais pas si c'est ce que tu souhaites faire, mais en utilisant les Expressions Régulières (RegEx) tu peux vérifier que tes champs respectent bien un certain format (adresse mail, numéro de téléphone, etc ...). Quand aux dates, les fonctions natives de PHP te permettent déjà de la faire facilement.

  3. #3
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par unnamed-anonymous Voir le message
    Salut,

    Je ne sais pas si c'est ce que tu souhaites faire, mais en utilisant les Expressions Régulières (RegEx) tu peux vérifier que tes champs respectent bien un certain format (adresse mail, numéro de téléphone, etc ...). Quand aux dates, les fonctions natives de PHP te permettent déjà de la faire facilement.
    La fonction filter_input() est là pour ça...
    Les Regex à toutes les sauces c'est le plus mauvais assaisonnement.

  4. #4
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par transgohan Voir le message
    La fonction filter_input() est là pour ça...
    Les Regex à toutes les sauces c'est le plus mauvais assaisonnement.
    Je n'avais jamais utilisé cette fonction, c'est toujours bon à savoir ;-)
    Mais en l’occurrence comme je disais, tout dépend du type de vérifications à effectuer ... Je ne suis pas familier de cette fonction mais il semblerait qu'elle ne couvre pas toutes les fonctionnalités des RegEx ?

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par unnamed-anonymous Voir le message
    Je n'avais jamais utilisé cette fonction, c'est toujours bon à savoir ;-)
    Mais en l’occurrence comme je disais, tout dépend du type de vérifications à effectuer ... Je ne suis pas familier de cette fonction mais il semblerait qu'elle ne couvre pas toutes les fonctionnalités des RegEx ?
    Elle couvre bien plus que ce que tu pourrais imaginer.
    Et couplée avec d'autres vérifications si besoin est cela reste 10 000 fois plus rapide et optimisé qu'une regex.

  6. #6
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Ca fait bien longtemps que je ne me suis plus penché sur du PHP, mais la prochaine fois j'essaierai d'y penser ...

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

    + Vérifier la longueur d'un texte,
    + Les regex d'un texte,
    + Email valide ou non,
    + L'insertion des textes,
    + Etc,..

    Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par isitien Voir le message
    Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

    + Vérifier la longueur d'un texte,
    + Les regex d'un texte,
    + Email valide ou non,
    + L'insertion des textes,
    + Etc,..

    Merci
    Salut,

    Je me suis bricolé cette fonction que tu n'as qu'a ajouter dans ta class:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    class TaClass {
    public $message;
     
    	public function check_FormData($champs){
     
    		// tous les champs du formulaire ne sont pas tous obligatoire
    		// liste des champs obligatoirs. Il doivent correspondre au nom de ton formulaire
    		$champs_obligatoirs = array('nom'=>'','prenom'=>'','adresse'=>'','cp'=>'','ville'=>'','email'=>'');
     
    		foreach($champs as $key=>$value){
     
    			if (array_key_exists($key, $champs_obligatoirs)) {
     
    				if(empty($value)){
     
    					$this->message= 'Le champ '. $key.' ne peut pas rester vide.';
    					return false;
     
    				}
     
    			}
     
    		}
    		// Vérification de l'email
    		if($champs['email'] != ''){
     
    			//Appel de la function check_eamil()
    			if($this->check_email($champs['email'])){
     
    				} else {
     
    					$this->message =  '<div class="error">Le format de votre email n\'est pas correct ('. $champs['email'] .')</div>';
    					return false;
     
    				}
     
    		} else {
     
    			$this->message =  '<div class="error">L\'email ne peut pas rester vide</div>';
    			return false;
     
    		} // fin de vérification de l'email
     
     
     
    		// Si tout est OK, on appel la fonction pour incérer les données dans la table mysql  
    		$this->insert_FormData($data);
     
    	}
     
    	public function check_email($email){
     
    	  if(preg_match('`^\w([-_.]?\w)*@\w([-_.]?\w)*\.([a-z]{2,4})$`',$email)){
     
    		  return true;
     
    	  } else {
     
    		  return false;
     
    	  }
     
     
       }
     
       private function insert_FormData($champs){
     
    	  //Le scripte qui insert dans ta mysql en classique ou PDO
       }
    }
    Après il te suffit d'appeler la fonction lorsque on envoi un formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $test= new TaClass ();
     
    	if(isset($_POST['form_example'])){
     
                  $test->check_FormData($_POST);
     
           }
    Ensuite libre à toi de vérifier chaque champ de ton formulaire avec $champs['nom_de_champ']

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    merci Sp4tz: j'ai pris quelques lignes de votre code, le seul soucis est pour la fonction sendData(), je veux verifier si check_FormData() retourne un true/false afin d'inserer mes donnees dans une BDD ou bien les afficher, etape transitoire qui serait de securise mes donnees envoyes par POST:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <?php
     
    		public function check_FormData($champs=array()){
     
    		$champs_obligatoirs = array('MyName');
     
     	if(is_array($champs)) {
    		foreach($champs as $key=>$value){
     
     			if(array_key_exists($key, $_POST))
     			{ 				
     				foreach($value as $v1=>$v2)
     				{
     
     					switch($v1)
     					{
     						case 'empty':
    						if($_POST[$key] == '')
    						{
    							echo $key.' est '.$v2.'<br />';
    							return FALSE;
    						}
     
    						break;	
     
     						case 'min':
    						if(strlen($_POST[$key]) < $v2)
    						{
    							echo ' le champs ' .$key.' doit contenir au moins: '.$v2.' chars<br />';
    							return FALSE;
    						}
     
    						break;
     
    						case 'max':
    						if(strlen($_POST[$key]) > $v2)
    						{
    							echo ' le champs ' .$key.' ne doit pas contenir plusque: '.$v2.' chars<br />';
    							return FALSE;
    						}
     
    						break;
     
    					 } // EnD switch
     
     				}
     			}
     			else
     			{
     				echo $key.' ohooooooo<br>';
     
     			}
     
     
    		}
    		}
     
     
    	} // end check fields
     
     
     	public function sendData() {
     
     
    		if($this->check_FormData($champs)){
    				echo 'ouiiiiiiiiiiiiiiiiiiii Greatz';
     
    				} else {
    					echo 'nooooooooooooon';
    					}
    				}
     
    } // end class
     
    // utilisation
    	if(isset($_POST['send'])){ //form_example
     
                  $f->check_FormData(array(
    			  'MyName'=>array('empty'=>'le champs est vide', 'min'=>5, 'max'=>15)
     
    			  ));
     
     
                  echo $f->sendData();
           }
     
     
    ?>

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par isitien Voir le message
    Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

    + Vérifier la longueur d'un texte,
    + Les regex d'un texte,
    + Email valide ou non,
    + L'insertion des textes,
    + Etc,..

    Merci
    Les filtres sont faits pour toi

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par isitien Voir le message
    merci Sp4tz: j'ai pris quelques lignes de votre code, le seul soucis est pour la fonction sendData(), je veux verifier si check_FormData() retourne un true/false afin d'inserer mes donnees dans une BDD ou bien les afficher, etape transitoire qui serait de securise mes donnees envoyes par POST:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
     
    		public function check_FormData($champs=array()){
     
    		[...]
     			}
     			else
     			{
     				echo $key.' ohooooooo<br>';
     
     			}
     
     [...]
     
     
    ?>
    je mettrai un return true ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else
     			{
     				// echo $key.' ohooooooo<br>';
                                     return true;
     
     			}
    ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function sendData() {
     
     
    		if($this->check_FormData($champs)){
    				echo 'ouiiiiiiiiiiiiiiiiiiii Greatz';
                                    // retour du true et on pass a la fonction qui insert les données. attention a bien sécuriser les données avant (injections sql)
    				} else {
    					echo 'nooooooooooooon';
    					}
    				}
     
    } // end class

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    est ce que vous avez une proposition au niveau de protection contre les injection au sein de la meme class?

  13. #13
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utilise des requêtes préparées pour te prémunir contre les injections SQL.

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Utilise des requêtes préparées pour te prémunir contre les injections SQL.
    est ce que vous pouvez me donner un exemple sur les requetes preparees et executees en PDO?

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "INSERT INTO table (a, b, c) VALUES (:a, :b, :c)";
    $stmt = $pdo->prepare($query);
    if ($stmt->execute(array(':a' => 1, ':b' => 2, ':c' => 3)))
     echo "Insert done."
    C'est dans la doc.

  16. #16
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Les filtres sont faits pour toi
    oui, mais qu'à partir de PHP 5.2.0


  17. #17
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    j'ai fait un test de ma fonction dans une class, le teste retourne toujours 'this is false' alors le var_dump retourn bool(true) si TRUE et bool(false) si FALSE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php
    class isFunction {
     
    function isTrue($string)
    {
        if($string == 'Test')
        {
            return TRUE;
        }
        else
        {
            return False;
        }
    }
     
    function checkData()
    {
        if($this->isTrue($string))
        {
            echo 'this is true';
        }
        else
        {
            echo 'this is false';
        }
    }
     
     
    }
     
    $row = new isFunction();
    var_dump($row->isTrue('Test'));
    $row->checkData();
     
    ?>
    c'est quoi le probleme dans ma class

    merci

  18. #18
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($this->isTrue($string))
    Je pense que ta méthode cherche encore le chapeau d'où $string doit sortir
    Si tu utilises une variable dans une méthode, tu dois la définir au préalable (comme tu le fais d'ailleurs dans le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($row->isTrue('Test'));

  19. #19
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Points : 90
    Points
    90
    Par défaut
    pardon c'etait un exemple pour me situer, je les ai declare ici mais ca marche pas

Discussions similaires

  1. Vérifier les champs d'un formulaire
    Par linouchka dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/05/2014, 21h18
  2. Vérifier les champs d'un formulaire
    Par paikan06 dans le forum Langage
    Réponses: 4
    Dernier message: 18/05/2012, 18h25
  3. Réponses: 4
    Dernier message: 14/11/2009, 17h27
  4. Vérifier les champs d'un formulaire
    Par Olivier Regnier dans le forum Web
    Réponses: 6
    Dernier message: 12/11/2007, 11h04
  5. [Formulaire] vérifier les champs d'un formulaire
    Par mariafan dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/12/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo