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

  1. #1
    Membre du Club
    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
    Points : 49
    Points
    49
    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 du Club
    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
    Points : 49
    Points
    49
    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 éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    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 ?
    Conception / Dev

  5. #5
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    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);
     
    ?>
    Conception / Dev

  6. #6
    Membre du Club
    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
    Points : 49
    Points
    49
    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é!

  7. #7
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Tu peu faire comme ca ( si tu es dans un context php5.3 tu peu utiliser __callStatic

    http://www.php.net/manual/fr/languag...ect.callstatic

    a la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     create_function('$a','return FilterTest::_call($a,"STRING_PASSWORD");')
    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
    <?php
    class FilterTest
    {
     
       public static function _call($a,$b)
        {
     
    	$string = self::check_space($a);
     
             switch ($b){
     
    		case "STRING_IDENT":
     
    			if(strlen($string)<3 || strlen($string)>10 ){
    				$string = false;
    			}
     		break;
     	    }
     
    	return $string;
        }
    	public static 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;
    	}
     
    }
     
    $filtres = array(
    	'Identifiant' => array(
    	'filter' => FILTER_CALLBACK,
    	'options' => create_function('$a','return FilterTest::_call($a,"STRING_IDENT");') 
    	),
    	'Password' => array (
    	'filter' => FILTER_CALLBACK,  
    	'options' => create_function('$a','return FilterTest::_call($a,"STRING_PASSWORD");') 
    	),
    	'Email' => FILTER_VALIDATE_EMAIL 
    );
     
     
    $resultat = filter_input_array(INPUT_POST, $filtres); 
    echo strlen($resultat['Identifiant']).'<br/>';
    print_r($resultat);
    ?>
    Conception / Dev

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Pour supprimer les espaces devant et derrière de toutes les entrées, il faut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_POST)) {
       array_walk_recursive($_POST, function(&$v, $k) { $v = trim($v); });
    }
    PS : pas de problèmes avec UTF-8, trim() est compatible avec à condition de ne pas définir de liste de caractères en deuxième paramètre.

  9. #9
    Membre du Club
    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
    Points : 49
    Points
    49
    Par défaut
    Tu peu faire comme ca ( si tu es dans un context php5.3 tu peu utiliser __callStatic
    Se que t 'appel php5.3 c'est de codé en orienté objet ?

    if (isset($_POST)) {
    array_walk_recursive($_POST, function(&$v, $k) { $v = trim($v); });
    }
    a quoi correspond function(&$v, $k) ??

    Merci

  10. #10
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    5.3 = la version de php

    essai le code, ca marche bien pour php 5.0, 5.1, 5.2 , 5.3.

    En fait , tu localise le traitement et les test unitaires au même endroit, cela doit répondre à ce que tu attends ?
    Conception / Dev

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Royade Voir le message
    a quoi correspond function(&$v, $k) ??
    C'est une fonction de rappel (callback) qui est prototypée pour fonctionner avec la fonction array_walk_recursive().
    En clair, chaque clé-valeur du tableau $_POST est passée à la moulinette de la fonction de rappel qui se charge de supprimer les espaces avant et après de chaque valeur. Si ton tableau $_POST contient un tableau, ce dernier sera également parcouru (récursivité oblige)
    La fonction array_walk_recurisve() attend une fonction de rappel qui accepte en paramètre d'abord la valeur puis la clé renvoyés par le la ligne du tableau. Ici, pour être sûr de nettoyer les valeurs de $_POST on passe les valeurs de ce tableau par référence (le &) et non par valeur qui correspond au fonctionnement par défaut de PHP.

    Un peu de lecture ici

  12. #12
    Membre du Club
    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
    Points : 49
    Points
    49
    Par défaut
    En fait , tu localise le traitement et les test unitaires au même endroit, cela doit répondre à ce que tu attends ?
    oki je vais tester ça..
    Ce que j 'attends c'est que chaque espace rentrer avant la zone de saisie et aprés soit enlever en recupérant le tableau $_POST et que tous les elements composant mon formulaire soient traité avec la même fonction qui enlève les espaces, comme ça : array_walk($_POST, 'trim_value'); sauf que ensuite quand je fais ça:$resultat = filter_input_array(INPUT_POST, $options); INPUT_POST reprend les élements du formulaire et non ceux traité avec array_walk();

  13. #13
    Membre du Club
    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
    Points : 49
    Points
    49
    Par défaut
    C'est une fonction de rappel (callback) qui est prototypée pour fonctionner avec la fonction array_walk_recursive().
    En clair, chaque clé-valeur du tableau $_POST est passée à la moulinette de la fonction de rappel qui se charge de supprimer les espaces avant et après de chaque valeur. Si ton tableau $_POST contient un tableau, ce dernier sera également parcouru (récursivité oblige)
    La fonction array_walk_recurisve() attend une fonction de rappel qui accepte en paramètre d'abord la valeur puis la clé renvoyés par le la ligne du tableau. Ici, pour être sûr de nettoyer les valeurs de $_POST on passe les valeurs de ce tableau par référence (le &) et non par valeur qui correspond au fonctionnement par défaut de PHP.
    Oki dans le manuel php je vois pourtant que ça marche comme array_walk() en prenant en paramètre uniquement le tableau et la fonction qui va traiter les données du tableau

  14. #14
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Royade Voir le message
    oki je vais tester ça..
    Ce que j 'attends c'est que chaque espace rentrer avant la zone de saisie et aprés soit enlever en recupérant le tableau $_POST et que tous les elements composant mon formulaire soient traité avec la même fonction qui enlève les espaces
    ça tombe bien, c'est ce que fait mon bout de code

  15. #15
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Royade Voir le message
    Oki dans le manuel php je vois pourtant que ça marche comme array_walk() en prenant en paramètre uniquement le tableau et la fonction qui va traiter les données du tableau
    Oui partiellement, on utilise la récursivité pour parser également tous les tableaux de tableaux et ensuite on passe les valeurs par référence histoire de bien modifier là où elles se trouvent (dans le tableau $_POST)

  16. #16
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Bon pour rawsrc, l'idée ct qd même de se se servir des filtres, et dans ce cas la, ca sert à rien de faire le traitement ( qui en plus n'ont pas d'effet sur la variable $_POST une fois filtrée)

    donc un exemple avec le code erreur qui fonctionne juste à faire copié collé

    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
    <?php
    class FilterTest
    {
     
       public static function _call($a,$b)
        {
     
    	$string = self::check_space($a);
    	$erreur = false;
             switch ($b){
     
    		case "STRING_IDENT":
     
    			if(strlen($string)<3 || strlen($string)>10 ){
    				$string = false;
    				$erreur = 'Votre identifiant doit contenir entre 3 et 10 caractères';
    			}
     		break;
     
     	    }
     
    	return array('value'=>$string,'erreur'=>$erreur);
        }
    	public static 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;
    	}
     
    }
     
    $filtres = array(
    	'Identifiant' => array(
    	'filter' => FILTER_CALLBACK,
    	'options' => create_function('$a','return FilterTest::_call($a,"STRING_IDENT");') 
    	),
    	'Password' => array (
    	'filter' => FILTER_CALLBACK,  
    	'options' => create_function('$a','return FilterTest::_call($a,"STRING_PASSWORD");') 
    	),
    	'Email' => FILTER_VALIDATE_EMAIL 
    );
     
     
    if(isset($_POST['envoyer'])){
    $resultat = filter_input_array(INPUT_POST, $filtres); 
    }
     
     
    ?> 
    <html>
    <body>
    <form action='#' method='post' >
    <?php echo isset($resultat) && $resultat['Identifiant']['erreur']!==false ?$resultat['Identifiant']['erreur'] :''?><br/>	
    <label>Identifiant</label><input name='Identifiant' type='input'><br/><br/>
    <?php echo isset($resultat) && $resultat['Password']['erreur']!==false ?$resultat['Identifiant']['erreur'] :''?><br/>	
    <label>Mot de passe</label><input name='Password' type='input'><br/><br/>
    <input type='submit' name='envoyer' >
    </form>
    </body>
    </html>
    Conception / Dev

  17. #17
    Membre du Club
    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
    Points : 49
    Points
    49
    Par défaut
    ça tombe bien, c'est ce que fait mon bout de code
    oui ça marche je te remercie mais ça fait quand même beaucoup de code alors que trim() est sensé marcher et en une ligne de code c était réglé!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('$a','return FilterTest::_call($a,"STRING_PASSWORD");')
    pourquoi utilisé ça sur le mot de passe, un mot de passe peux contenir que des espaces nan?

    Oui partiellement, on utilise la récursivité pour parser également tous les tableaux de tableaux et ensuite on passe les valeurs par référence histoire de bien modifier là où elles se trouvent (dans le tableau $_POST)
    J'ai utilisé ton bout de code mais ça marche pas

    Merci de me filer un coup de main en tout cas

  18. #18
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Bon comme je te l'expliquais je crois qu' il faut que tu soit en php>5

    Alors pourquoi ce code ?

    en centralisant le traitement, test plus génération de message d'erreur dans une classe tu pourra réutiliser cela dans tout le site de façon ergonome

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FilterTest::_call($a,$b)
    => c'est une fonction qui centralise tous les tests, tu peu donc créer autant de "case" que tu en à besoin.

    tu n'est pas obliger d'intéger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = self::check_space($a);
    au départ de la fonction, tu peu par exemple le mettre dans le case "STRING_IDENT" , comme cela tu ne t'en sert pas pour le case "STRING_PASSWORD" que tu doit créer ( je vois pas trop un password avec que des espaces mais bon...)

    moi ma fonction check_space supprime les espaces de début , de fin et double, mais c'est à toi de voir ce que tu veux en faire, c'est un exemple

    Finalement en faisant comme ça tout est bien rangé, tu peu te servir des filtres en créer, obtenir des messages d'erreurs personnels, tu a séparé le traitement (que tu ne fait qu'une fois) et l'affichage

    quoi d'autre ?
    Conception / Dev

  19. #19
    Membre du Club
    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
    Points : 49
    Points
    49
    Par défaut
    Bon comme je te l'expliquais je crois qu' il faut que tu soit en php>5
    D'accord mais la façon je suis en locale.. la version de php qu'on utilise c'est selon le serveur ?

    Je te remmercie de m'avoir aider ça fait un petit moment que je galerais!

    J'ai une dernière question en se qui concerne l'encodage, faut il à chaque fois qu'une personne rentre des données préciser l 'encodage ? et le mieux est il utf8 ?

    j'ai vu qu il existait quelque fonction:
    mysql_query("SET NAMES UTF8"); juste après la connection à la base MySQL
    mais bon moi j'utilise l'extension PDO pour ma base de donnée et non les fonction mysql ou autrement les focntions:
    utf8_encode() et utf8_decode() ;
    ou encore a chaque affichage utiliser ça:
    $titre=htmlentities($_POST['titre'],ENT_QUOTES,'UTF-8');
    $contenu=nl2br(htmlentities($_POST['contenu'],ENT_QUOTES,'UTF-8'));

    quand penses-tu ?

    Edit: problème: je rentre "ggggggggggg"(11g) comme identifiant ça me met :
    Cet identifiant est déjà utilisé ou ne correspond pas aux exigences de l'administrateur.
    ça me tue! et si j'enlève un "g", je mets "gggggggggg"(10g) ça marche!

  20. #20
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    pour être sur d’être en php5 et pour le utf-8 tu peu mettre cela dans un .htaccess à la racine de ton projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetEnv PHP_VER 5
    AddDefaultCharset UTF-8
    aussi je te conseil de vérifier dans la base de donnée le type des champs en utf-8
    Conception / Dev

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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