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 :

Formulaire : tester la validité d'un champ


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut Formulaire : tester la validité d'un champ
    Bonsoir à tous,

    Je dispose d'un formulaire qui me transmet plusieurs valeurs. Je voudrais effectuer des tests sur les valeurs qui me sont transmises. J'effectue donc des tests sur la longueur des champs (if strlen() ==0) ou autres types de tests mais par contre le champ ne devrait pas être valide s'il est uniquement rempli d'espaces.

    Existe-t-il une fonction spécifique en PHP pour tester la validité d'un champ dans ce cas de figure ?

    Merci beaucoup

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2011
    Messages : 247
    Par défaut
    Tu peux le faire facilement avec les expressions régulières. Utilise les fonctions de la famille de preg_match().
    Tu auras quelque chose de ce genre (je n'ai pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_match("#^ *$",$contenu_du_champ);

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Pour ce genre de test simple, il vaut mieux se passer des regex.
    C'est prendre un marteau pour tuer une mouche.
    Tu as des fonctions natives qui le font 100 fois plus rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    $a = '          ';
    $b = (strlen(trim($a)) === 0);
     
    ?>

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2011
    Messages : 247
    Par défaut
    Oh oui largement plus simple

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Par défaut
    Bonjour,

    Peut-être aussi avec quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( (strlen($string) == 0) || (strlen($string) == substr_count($string, ' ')) ){
    ...
    }

  6. #6
    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 moi le plus rapide c'est:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ct='Mon     avi  ne compte pas ';
    $s=  str_replace(array('  ',' '), array('.','.'),$ct );
    ensuite selon ta version php faire un traitement tableau avec comme separateur le '.' dans ce cas , il y des nouvelles fonctions PHP natives PHP 5, > 1 < 3 qui fonctionnent pour les tableaux

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Tu veux faire plusieurs contrôles je te conseille donc de les faire séparément car se sera plus lisible et tu pourras plus facilement modifier ton code.

    Pour supprimer les espaces invisibles en début et fin de chaine (espaces vides, retour ligne...) c'est trim. Pour vérifier la longueur d'une chaine c'est strlen (attention d'utiliser mb_strlen avec utf-8).

    Le plus logique est donc de vérifier que la variable est non vide puis sa longueur

    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
    //vérifie l'existence de la variable $_POST et que la chaine est non vide
    $var = isset($_POST['var']) && trim($_POST['var']) != '' ? $_POST['var'] : null;
     
    // 11 caractères minimum par exemple
    $var = strlen($var) > 10 ? $var : null;
     
    //si la variable a passé les tests
    if(isset($var))
    {
    // traitement php
    }
    else
    {
    /* $_POST['var'] n'est pas défini
    ou
    trim($_POST['var']) == ''
    ou
    strlen($var) <= 10
    */
    }

  8. #8
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Pour compléter la réponse d'ABCIWEB, il faut aussi signaler que trim() n'est pas compatible avec utf-8.
    Donc pour utiliser mb_strlen(), il faut au préalable utiliser mb_trim()... qui n'existe pas

    Voici l'équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
     * Supprime les espaces en début et fin de chaine
     * @param string $p
     * @return string
     */
    function mb_trim($p)
    {
       return preg_replace('/^(\s+)|(\s+)$/us', '', $p);
    }

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Pour compléter la réponse d'ABCIWEB, il faut aussi signaler que trim() n'est pas compatible avec utf-8.
    Heu... si si, "trim" est compatible avec utf-8 dans les conditions standard d'utilisation (sans utilisation du deuxième paramètre optionnel).

    Pour les mêmes raisons que htmlspecialchars d'ailleurs : les caractères traités font partie de la table ASCII 7 qui est codée de manière identique en iso ou en utf-8

    Il y a un topo intéressant ici des fonctions "dangereuses" avec l'utf-8.

Discussions similaires

  1. tester l'existence d'un champs de formulaire
    Par ridick dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/05/2010, 19h50
  2. Réponses: 9
    Dernier message: 07/05/2009, 19h12
  3. [RegEx] Tester un regex sur un champ de formulaire
    Par Olivier Regnier dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2007, 00h45
  4. tester la validité des champs d'un formulaire
    Par Maria1505 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/10/2007, 09h07
  5. Tester l'existance d'un champ de formulaire .
    Par maxos75 dans le forum ASP
    Réponses: 3
    Dernier message: 21/12/2005, 13h47

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