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 :

Verification de champ formulaire


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Verification de champ formulaire
    Bonjour à tous,

    Je me doute que la question a été posée plus d'une fois, mais puisque je débute en php je souhaite vraiment bien comprendre les bases de vérification d'un formulaire.

    Dans mon formulaire j'ai plusieurs champs à envoyer de différents types.
    Champs "Numéro de compte"
    Champs "Type de paiement"
    Champs "Montant"

    Je lis sur les forums l'utilisation des fonctions "empty()" et "isset()", cependant quant est-il lorsque l'on souhaite vérifier le type de donnée?
    Par exemple, pour le champs montant, il ne doit pas être vide, mais peut également prendre la valeur 0. Les fonctions ci-dessus ne peuvent donc convenir.
    Est-il judicieux de directement vérifier le type de la donnée attendu?

    Voici le code de vérification que j'ai fait.

    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
    <?php require "connexion.php"?>
     
     
    <!--Verification des données avant envoie 
     
    Je commence par vérifier si la variable du bouton envoyer existe. 
    Ensuite je teste si les variables des champs sont non vides.
    Par contre pour le champs "Montant" je teste directement s'il s'agit d'une valeur numérique, puisque ce dernier peut être égal à 0-->
    <?php 
    if (!isset($_POST['EnvoieDepense'])||
    	empty($_POST['Comptebancaire'])||  
    	empty($_POST['TypePaiement'])||  
    	!is_numeric($_POST['Montant'])  
     
    {CONDITION SI VRAI}
    else {CONDITION SI FAUX}
     
    ?>
    Ce code fonctionne mais je ne sais pas si "is_numercic()" est bien placé pour la vérification.


    Merci par avance

  2. #2
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    il te faut utiliser les filtres (filter_var(...)), les exceptions, et les regex
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Merci je vais regarder cela.
    J'ai trouvé un tuto l'expliquant en détail.

    A ce que je lis, l'utilisation des filtres peux dispenser celui des regex.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Donc je reviens vers vous après avoir suivi vos conseils.

    Je dois vérifier 3 champs venant de l'utilisateur.
    Par conséquent j'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_input_array(INPUT_POST,$OptionsFiltre);
    J'ai crée 2 fonctions pour mes filtres callBack.
    Pour le champs montant, j'ai utilisé le filtre J'obtiens donc ce code
    Par contre je suppose que mes fonctions ne sont pas correctements codées. Lorsque je change volontairement les valeurs, des messages d'erreurs apparaissent.

    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
    //--Verification des données avant envoie   -->
     
    function validerTypePaiement($TPaiement){
     
    	If ($TPaiement=='Virement'||
    		$TPaiement=='Carte'||
    		$TPaiement=='Cheque'||
    		$TPaiement=='Liquide')
    		{
    		return $TPaiement;
    		}
    	else
    		{
    		return false;
    		}
    }
     
    function validerComptebancaire($CBancaire){
     
    	If ($CBancaire=='C/C Boursorama Banque'||
    		$CBancaire=='C/C Hello banque'||
    		$CBancaire=='PorteMonnaie'||
    		$CBancaire=='Fortuneo C/C')
    		{
    		return $CBancaire;
    		}
    	else
    		{
    		return false;
    		}					
    }
     
     
    $OptionsFiltre=array(
    			'Comptebancaire'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'option'=>'validerComptebancaire'
    							),
    			'TypePaiement'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'option'=>'validerTypePaiement'
    							),			
    			'Montant'=>array(
    						'filter'=>FILTER_VALIDATE_INT,
    						'options'=>array(
    									'min_range'=>0
    								   )	
    							)
    			);
     
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);	
     
     
     
    	if ($resultatChampsFormulaire === false || $resultatChampsFormulaire === null)
    		{
    		// Si les champs ne sont pas remplis
    		$Condition1=false;
    		}
     
    		//Si verification OK On procéde à l'execution de la requête.
    	else 
    		{
    		$req = $bdd->prepare('INSERT INTO depense(compte, datedepense, montant, typepaiement, infovendeur) 
    		VALUES(:compte, NOW(), :montant, :typepaiement, :infovendeur)');
     
    		$req->execute(array(
    		'compte' => $_POST['Comptebancaire'],
    		'montant' => $_POST['Montant'],
    		'typepaiement' => $_POST['TypePaiement'],
    		'infovendeur' => $_POST['Informations']
    		));					 
    		$id_derniere_ligne =  $bdd->lastInsertId();
    		}

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ tu as écrit 'option'=>... au lieu de 'options'=>...

    2/ On peut simplifier les fonctions:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Verification des données avant envoi
    function validerTypePaiement($TPaiement)
    {
    	return ( in_array($TPaiement, array('Virement','Carte','Cheque','Liquide')) )? $TPaiement : false;
    }
     
    function validerComptebancaire($CBancaire)
    {
    	return ( in_array($CBancaire, array('C/C Boursorama Banque','C/C Hello banque','PorteMonnaie','Fortuneo C/C')) )? $CBancaire : false;	
    }

    3/ Pour le Montant, il vaudrait mieux FILTER_VALIDATE_FLOAT.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Merci, j'ai pris note.

    J'ai utilisé la fonction suivante afin de parcourir les résultats renvoyés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(in_array(null,$resultatChampsFormulaire,false))
    Je me retrouve donc avec ce code.
    Pour l'instant j'ai laissé volontaire le filtre FILTER_VALIDATE_INT, puisque je me rend compte que lorsque je marque 0 dans le montant, le formulaire n'est pas envoyé, comme si le filtre ne l'indique pas.
    Pour les autres champs, les filtres fonctionnent lorsque je créer des erreurs volontaires.

    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
     
    function validerTypePaiement($TPaiement)
    {
    	return ( in_array($TPaiement, array('Virement','Carte','Cheque','Liquide')) )? $TPaiement : false;
    }
     
    function validerComptebancaire($CBancaire)
    {
    	return ( in_array($CBancaire, array('C/C Boursorama Banque','C/C Hello banque','PorteMonnaie','Fortuneo C/C')) )? $CBancaire : false;	
    }
     
     
    $OptionsFiltre=array(
    			'Comptebancaire'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerComptebancaire'
    							),
    			'TypePaiement'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerTypePaiement'
    							),			
    			'Montant'=>array(
    						'filter'=>FILTER_VALIDATE_INT,
    						'options'=>array(
    									'min_range'=>0
    								   )	
    							)
    			);
     
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);
     
    	if(in_array(null,$resultatChampsFormulaire,false))
    	{
    		$Condition1=false;
    	}
     
     
     
     
    		//Si verification OK On procéde à l'execution de la requête.
    	else
    		{
    		$req = $bdd->prepare('INSERT INTO depense(compte, datedepense, montant, typepaiement, infovendeur) 
    		VALUES(:compte, NOW(), :montant, :typepaiement, :infovendeur)');
     
    		$req->execute(array(
    		'compte' => $_POST['Comptebancaire'],
    		'montant' => $_POST['Montant'],
    		'typepaiement' => $_POST['TypePaiement'],
    		'infovendeur' => $_POST['Informations']
    		));					 
    		$id_derniere_ligne =  $bdd->lastInsertId();
    		}

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    J'ai donc pris en compte les remarques mais quelque chose doit m'échapper.
    Je pense que le problème se situ autour des valeurs de renvoie de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_input_array(INPUT_POST,$OptionsFiltre);

    Si, dans le champs "montant" je marque "0" le filtre de contrôle ne l'autorise pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'filter'=>FILTER_VALIDATE_INT,
    						'options'=>array(
    									'min_range'=>0
    								   )	
    							)
    Pareil, pour les deux autres champs, lorsque j'appelle mon filtre de CALLBACK, si je provoque des erreurs volontaires avec des donnée érronée, la fonction ne le détecte pas.



    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
    function validerTypePaiement($TPaiement)
    {	
    	$returnNull=null;
    	if($TPaiement='Virement'||$TPaiement='Carte'||$TPaiement='Cheque'||$TPaiement='Liquide')
    		{
    		return $TPaiement;
    		}		
     
    }
     
    function validerComptebancaire($CBancaire)
    {	
    	$returnNull=null;
    	if ($CBancaire='C/C Boursorama Banque'||$CBancaire='C/C Hello banque'||$CBancaire='PorteMonnaie'||$CBancaire='Fortuneo C/C')
    	{
    		return $CBancaire;
    	}
     
     
    }
     
     
    $OptionsFiltre=array(
    			'Comptebancaire'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerComptebancaire'
    							),
    			'TypePaiement'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerTypePaiement'
    							),			
    			'Montant'=>array(
    						'filter'=>FILTER_VALIDATE_INT,
    						'options'=>array(
    									'min_range'=>0
    								   )	
    							)
    			);
     
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);
     
    	if($resultatChampsFormulaire ===false)
    	{
    		 $Condition1=false;
    		}
     
    	else {
     
    		$req = $bdd->prepare('INSERT INTO depense(compte, datedepense, montant, typepaiement, infovendeur) 
    		VALUES(:compte, NOW(), :montant, :typepaiement, :infovendeur)');
     
    		$req->execute(array(
    		'compte' => $_POST['Comptebancaire'],
    		'montant' => $_POST['Montant'],
    		'typepaiement' => $_POST['TypePaiement'],
    		'infovendeur' => $_POST['Informations']
    		));					 
    		$id_derniere_ligne =  $bdd->lastInsertId();
     
        }
    Si quelqu'un à une idée.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est == et pas = dans tes conditions.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Invité
    Invité(e)
    Par défaut
    Si en plus tu reviens à ton ancien code...
    ...quel intérêt de t'aider ?...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    D'accord, j'ai modifié les conditions.
    Cependant cela ne fonctionne toujours pas.

    J'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($resultatChampsFormulaire);
    pour lire les valeurs retournées.
    En effet, sur ce point, mes fonctions me renvoies la valeur si ok, ou "false" en cas d'echec.

    Ci dessous, j'ai volontairement généré une erreur pour le montant, la fonction me revoie bien "false".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    F:\wamp64\www\SuiviCompte\EnvoieDepenseBdd.php:62:
    array (size=3)
      'Comptebancaire' => string 'C/C Boursorama Banque' (length=21)
      'TypePaiement' => string 'Carte' (length=5)
      'Montant' => boolean false

    Il me semble, que la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_input_array(INPUT_POST,$OptionsFiltre)
    renvoie "false" si au moins une valeur qu'elle contient est fausse.


    Mais c'est lorsque je rentre dans ma boucle "if" ci dessous que je n'arrive pas à comprendre. Puisque, sauf mauvaise compréhension de ma part, la condition est bien égale à "false"
    le résultat du "else" ne devrait par conséquent pas s'afficher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);
    ]if($resultatChampsFormulaire === false)
    		{
    		 $Condition1=false;
    		}
     
    	else 
    	{
     
    	echo var_dump($resultatChampsFormulaire);
    }

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Si en plus tu reviens à ton ancien code...
    ...quel intérêt de t'aider ?...
    Désolé, j'ai fait modif sur modif...au final je me suis emmêlé..j'ai bien tenu compte de tes remarques et j'optimiserai dans ce sens.
    Mais je n'arrive pas comprendre le problème des valeurs renvoyé par la fonction

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas echo var_dump c'est var_dump tout court.

    Et évidemment effectivement tu ne peux pas avoir le resultat du if et du else en même temps.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Au final je pense avoir trouvé.

    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_input_array(INPUT_POST,$OptionsFiltre);
    renvoie un tableau.
    J'ai donc testé chacun de ces éléments dans une boucle if.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);
    if($resultatChampsFormulaire['Comptebancaire'] === false 
    		||$resultatChampsFormulaire['TypePaiement']===false 
    		|| $resultatChampsFormulaire['Montant']===false 
    		||$resultatChampsFormulaire['Comptebancaire'] === null
    		||$resultatChampsFormulaire['TypePaiement']===null
    		|| $resultatChampsFormulaire['Montant']===null)
    De cette manière, si un des filtres renvoie "false" ou "null" j'arrive à le piéger. Et le déroulement dans la boucle if se passe sans problème

    Bon l'écriture n'est pas très optimisée, je vais m'y affairer par la suite.

    Voici donc mon code complet pour l'instant.
    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
     
    function validerTypePaiement($TPaiement)
    {	
    	return ( in_array($TPaiement, array('Virement','Carte','Cheque','Liquide')) )? $TPaiement : false;
    }
     
    function validerComptebancaire($CBancaire)
    {	
    	return ( in_array($CBancaire, array('C/C Boursorama Banque','C/C Hello banque','PorteMonnaie','Fortuneo C/C')) )? $CBancaire : false;		
    }
     
     
    $OptionsFiltre=array(
    			'Comptebancaire'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerComptebancaire'
    							),
    			'TypePaiement'=>array(
    							'filter'=>FILTER_CALLBACK,
    							'options'=>'validerTypePaiement'
    							),			
    			'Montant'=>array(
    						'filter'=>FILTER_VALIDATE_INT,
    						'options'=>array(
    									'min_range'=>0
    								   )	
    							)
    			);
     
    $resultatChampsFormulaire=filter_input_array(INPUT_POST,$OptionsFiltre);
     
     
    	if($resultatChampsFormulaire['Comptebancaire'] === false 
    		||$resultatChampsFormulaire['TypePaiement']===false 
    		|| $resultatChampsFormulaire['Montant']===false 
    		||$resultatChampsFormulaire['Comptebancaire'] === null
    		||$resultatChampsFormulaire['TypePaiement']===null
    		|| $resultatChampsFormulaire['Montant']===null)
     
    		{
     
    		var_dump($resultatChampsFormulaire);
     
     
    		}
     
    	else 
    	{
    		$req = $bdd->prepare('INSERT INTO depense(compte, datedepense, montant, typepaiement, infovendeur) 
    		VALUES(:compte, NOW(), :montant, :typepaiement, :infovendeur)');
    		$req->execute(array(
    		'compte' => $_POST['Comptebancaire'],
    		'montant' => $_POST['Montant'],
    		'typepaiement' => $_POST['TypePaiement'],
    		'infovendeur' => $_POST['Informations']
    		));					 
    		$id_derniere_ligne =  $bdd->lastInsertId();
    		header('location:CategorieDepenses.php?IdDepense='.$id_derniere_ligne);	
    	}

Discussions similaires

  1. verification des champs dans un formulaire
    Par king10481 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/04/2008, 12h40
  2. [MySQL] verification des champs entrées par un formulaire
    Par a7med06 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/04/2008, 09h31
  3. verification champs formulaire
    Par Junior_jef dans le forum Access
    Réponses: 6
    Dernier message: 24/08/2006, 16h40
  4. Verification champ formulaire
    Par calitom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 14h54
  5. Verification des champs d'un formulaire
    Par 164emie dans le forum ASP
    Réponses: 5
    Dernier message: 19/11/2003, 14h03

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