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 :

Problème avec mon formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Par défaut Problème avec mon formulaire
    Bonsoir!
    J'ai un problème dans mon formulaire avec la fonction trim(), j'aimerais que les espaces rentré par l'utilisateur dans les textes de saisies soit supprimés avant que j'effectue les tests mais sans résultat..
    Quand je rentre par exemple comme identifiant " R" sachant que l'identifiant doit comporter 3 caractères au minimum, grâce à la fonction trim() ce dernier ne devrait pas être valide et pourtant si..

    Voici mon code:

    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
    <?php
    function validerPassword($PasswordATester)
    {
    	return (strlen($PasswordATester) >= 3) ? sha1('Gr@1n2s3l1' . md5($PasswordATester) . 'gRaIn2$eL2') : false;
     
    }
    function fonctionErrorIdentifiant($identifiantATester)
    {
    	if(strlen($identifiantATester) < 3)
    	{
    		$error='Votre identifiant doit être égale ou plus grand que 3 caractères';
    	}
    	elseif(strlen($identifiantATester) > 20)
    	{
    		$error='Votre identifiant ne doit pas excédé plus de  20 caractères';
    	}
    	else
    	{
    		$error='Cet identifiant comporte des caractères non autorisés.';
    	}
    	return $error;
    }
    function trim_value($value) 
    { 
        $value = trim($value); 
    }
     
    $options = array(
    			'Identifiant' => array(
    							  'filter' => FILTER_VALIDATE_REGEXP, //fait un preg_match() en arrière plan.
    							  'options' =>array(
    										   'regexp' => ('#^[a-z0-9àáâãäçèéêëìíîïñðòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜŽÝ._ \'-]{3,20}$#i')
    											   )
    								  ),
    			'Password' => array (
    						   'filter' => FILTER_CALLBACK, //on crée un filtre. 
    						   'options' => 'validerPassword'//On appelle la fonction "validerPassword" pour tester si le mot de passe à le bon format.
    						        ),
    			'Email' => FILTER_VALIDATE_EMAIL //Valider l'adresse e-mail.
    );
     
    array_walk($_POST, 'trim_value');
     
    $resultat = filter_input_array(INPUT_POST, $options); 
     
    if($resultat != null)//Si le formulaire a bien été posté.
    { 	//Enregistrer des messages d'erreur perso.
    		$messageErreur = array(
    						  'Identifiant' => fonctionErrorIdentifiant($_POST['Identifiant']),
    						  'Email' => 'Vous avez inséré une adresse email non valide.',
    						  'Password' => 'Le mot de passe n\'est pas valide, il doit comporter au minimum 3 caractères.'
    							  );
     
        $nbrErreurs = 0; 
    ?>		
     
    	<ul>
    <?php
    	foreach($options as $cle => $valeur)  //Parcourir tous les champs voulus.
    	{	
    		if(empty($_POST[$cle])) //Si le champ est vide.
    		{ 
                echo '<li> Veuillez compléter le champ requis « ' . $cle . ' ».</li><br/>';
                $nbrErreurs++;
    		}
            elseif($resultat[$cle] == false) //S'il n'est pas valide.
    		{ 
                echo '<li>' .$messageErreur[$cle] . '</li><br/>';
                $nbrErreurs++;
    		}
    	}
    ?>  </ul>
    <?php	if($nbrErreurs == 0)
    		{
    			echo 'Bonjour ' . $resultat['Identifiant'] . ' !<br/> ';
    			echo 'Ton adresse de messagerie est bien ' . $resultat['Email'] . '.<br/>';
    			echo 'Ton mot de passe est ' . $resultat['Password'] . '.<br/>';
    		}
    }	
    else
    {
    	echo 'Vous n\'avez rien posté.';
    }
    ?>
    Si vous avez une idée je suis preneur

    Merci d'avance pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Royade Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function trim_value($value) 
    { 
        $value = trim($value); 
    }
    Telle quelle, ta fonction ne travaille pas directement sur la chaîne de caractères transmise dans $value mais sur une copie de celle-ci.

    Il faut que la variable soit passée par référence. Tu peux préciser cela avec le & dans ton paramètre, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function trim_value(&$value) 
    { 
        $value = trim($value); 
    }
    Ça devrait résoudre le problème

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Par défaut
    Merci de ta réponse!
    Ça devrait résoudre le problème
    Non du tout, ca ne marche pas j'ai fais quelque test;

    j'ai fais ces tests autour de array_walk($_POST, 'trim_value'); et $resultat = filter_input_array(INPUT_POST, $options):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo strlen($_POST['Identifiant']);
    array_walk($_POST, 'trim_value');
    echo strlen($_POST['Identifiant']);
    echo strlen(trim($_POST['Identifiant']));
    $resultat = filter_input_array(INPUT_POST, $options); 
    echo strlen($_POST['Identifiant']);
    echo strlen($resultat['Identifiant']);
    print_r($resultat);
    ce qui me donne en rentrant (3espaces + 2t) ça me donne:
    52225Array ( [Identifiant] => tt [Password] => 96797da42df0824bd08677cd1f16d02683225dd0 [Email] => ogg@hkk.hj )

    en rentrant 10 espaces + 2t:
    1222212Array ( [Identifiant] => tt [Password] => 96797da42df0824bd08677cd1f16d02683225dd0 [Email] => ogg@hkk.hj )

    Je pense qu'au lieu de prendre le changement effectué grâce a la fonction trim() il reprend avc IMPUT_POST la valeur initial..

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Si cela peu t'aider une autre fonction :
    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
     
     
    //suprime les espaces de début , de fin et double
     
    function check_space($string){
         $temp=trim($string);
         $string="";
         for ( $i = 1 ; $i < strlen($temp) +1 ; $i ++ ){
              if ( $temp[$i-1]==" " &&  $temp[$i]==" "){
              }
              else{
              $string.= $temp[$i-1] ;
              }
         }
         return $string;
    }
     
     
    $identifiant = check_space($_POST['Identifiant']);
    //ou $_POST['Identifiant'] = check_space($_POST['Identifiant']); si tu veux absolument garder $_POST['Identifiant']  mais c pas top

    cela dit qu'a tu mis dans $options ?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Pour que ton script filtre fonctionne tu peu te servir d'un fonction de callback
    ( et du coup pas besoin d'utiliser les 2 méthodes )
    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
    <?php
     
    function trim_value(&$value) 
    { 
        $value = trim($value);
        return $value;
    }
     
    $filtres = array(
        'Identifiant' => array(
            'filter' => FILTER_CALLBACK,
            'options' => 'trim_value'
        )
    );
     
    $POST = $_POST;
     
    //////////avec array_walk
    echo strlen($POST['Identifiant']).'<br/>';
    array_walk( $POST, 'trim_value').'<br/>';
    echo strlen($POST['Identifiant']).'<br/>';
    print_r($POST);
     
    //////////avec filtre
    $resultat = filter_input_array(INPUT_POST, $filtres); 
    echo strlen($resultat['Identifiant']).'<br/>';
    print_r($resultat);
     
    ?>

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Par défaut
    Merci d'avoir répondu, oui c'est se que j'ai fais mais ça marche qu'a moitié:

    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
     
    function trim_value(&$value) 
    { 
        $value= trim($value); 
    }
     
    function validemoiça($ATester)	
    { return preg_match('#^[a-z0-9àáâãäçèéêëìíîïñðòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜŽÝ ._\'-]{3,20}$#i', trim($ATester)) ? trim($ATester) : false;
    }
     
    $options = array(
    			'Identifiant' => array(
    							  'filter' => FILTER_CALLBACK,
    							  'options' =>'validemoiça'
    								  ),
    			'Password' => array (
    						   'filter' => FILTER_CALLBACK, //on crée un filtre. 
    						   'options' => 'validerPassword'//On appelle la fonction "validerPassword" pour tester si le mot de passe à le bon format.
    						        ),
    			'Email' => FILTER_VALIDATE_EMAIL //Valider l'adresse e-mail.
    );
    Dans options j 'ai déja la regex, comme ça ca marche sauf que je suis obligé de mettre la fonction trim un px partout : 2 fois ici trim($ATester)) ? trim($ATester) : false; et aussi dans la fonction qui test les erreurs d'identifiant:
    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
    function fonctionErrorIdentifiant($identifiantATester)
    {
    	if(strlen(trim($identifiantATester)) < 3)
    	{
    		$error='Votre identifiant ne peut pas être plus court que 3 caractères';
    	}
    	elseif(strlen(trim($identifiantATester)) > 20)
    	{
    		$error='Votre identifiant ne peut pas être plus long que 20 caractères';
    	}
    	else
    	{
    		$error='Cet identifiant est déjà utilisé ou ne correspond pas aux exigences de l\'administrateur.';
    	}
    	return $error;
    }
    donc c'est un px contourner le problème parce qu'au lieu d'utiliser une fois la fonction trim et qu'elle enlève les espaces partout a chaque fois que je fais des test avec $resultat[''] en l'occurence la $resultat['Identifiant'] bah je suis obligé de remettre la fonction trim() avant parce que celui ci contient se qu'a rentrer l'utilisateur et non la valeur modifié!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec mon champ date dans le formulaire
    Par PetitChris dans le forum IHM
    Réponses: 4
    Dernier message: 28/08/2014, 09h37
  2. [HTML 4.0] Problème avec mon formulaire
    Par Diamond26 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/10/2012, 23h39
  3. Problème avec mon formulaire
    Par sisidu08 dans le forum Langage
    Réponses: 0
    Dernier message: 04/07/2012, 18h45
  4. Problème avec mon formulaire
    Par didigue dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2009, 18h38
  5. Réponses: 3
    Dernier message: 21/06/2006, 19h48

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