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 :

longueur de chaine avec filter_input [PHP 7]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut longueur de chaine avec filter_input
    Bonjour,
    J'ai besoin de vérifier la longueur d'une chaîne de caractère dans La variable $_post, je le fait manuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                  $options = array(
                                   'nom' => FILTER_SANITIZE_STRING, 
                                   'texte' => FILTER_SANITIZE_STRING,                                            
                                  );
                  $resultat = filter_input_array(INPUT_POST, $options);
     
                  if( strlen( resultat['texte'])<5 or strlen($resultat['texte'])>50 ) 
                       { $Valide=false; } else { $Valide=true; }

    Je voudrais savoir si on peut le faire avec filter_input style 'max_lenght' et 'min_lenght' comme le fait max_range et min_range pour les nombres.
    merci.

  2. #2
    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
    Salut,

    à ma connaissance, je ne pense pas que tu puisses avec les fonctions filter_ valider une longueur de texte

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je confirme : on peut valider un type de données (genre nombre, email) ou nettoyer des choses indésirables, mais le format n'est pas prévu.
    Eventuellement, tu peux écrire des fonctions de validation pour éviter d'avoir à écrire la condition à chaque fois.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function validateLenght($champ, $min_length = 0, $max_length = 50) {
    	return (strlen($champ)<$min_length or strlen($champ)>$max_length);
    }
    Et tu as toujours la possibilité d'ajoute des contrôles côté client avec HTML5.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    bonsoir,
    merci à vous

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    En fait tu peux valider absolument ce que tu veux en passant par filter_var. Même si le filtre que tu cherches n'existe pas, tu as toujours la possibilité d'utiliser FILTER_CALLBACK qui permet de passer n'importe quelle fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(filter_var('Janine', FILTER_CALLBACK, ['options'=>function($i) { return strlen($i)>4 && strlen($i)<51; }]));
    J'attire ton attention sur le fait que strlen se contente de renvoyer le nombre d'octets d'une chaîne, ce qui n'est pas forcément son nombre de caractères au sens où on l'entend communément. Par exemple "Théo" encodé en UTF-8 passera le test car le "é" peut être encodé sur deux octets "\xc3\xa9", voire sur trois "\x65\xcc\x81" (un "e" avec le caractère combinant "accent aigu").

    Occasion de présenter un autre filtre pour les chaînes, FILTER_VALIDATE_REGEXP qui permet de valider un chaîne avec une expression régulière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(filter_var('Théo', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/\A\X{5,50}\z/u']]));
    \A et \z sont les bornes de la chaîne, \X représente n'importe quel glyphe ou caractère blanc (tout ce qui occupe la place d'un caractère quelque soit son nombre d'octets), le flag u permet de lire la chaîne en UTF-8 et non octet par octet comme c'est le cas par défaut.

    Après il est légitime de se demander pourquoi passer par filter_var pour faire ce type de contrôles alors qu'on pourrait l'écrire directement comme tu l'as fait?

    Cela permet par exemple de construire un tableau associatif dont les clefs seraient les clefs de $_POST auxquelles seraient associées les filtres à appliquer à chacune. De cette manière un simple foreach sur ce tableau permet de valider toutes les données post en utilisant systématiquement filter_var.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    @CosmoKnacki : bonne explication, comme quoi on en apprend tous les jours.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par Celira Voir le message
    @CosmoKnacki : bonne explication, comme quoi on en apprend tous les jours.
    Merci!
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. Concatérner chaine avec retour à la ligne
    Par nebule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/11/2004, 11h55
  2. [LG]Type chaine avec plus de 255 car et EOF intempestif.
    Par jpclabaux dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2004, 10h39
  3. Chaines avec caractères accentués dans interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2004, 17h12
  4. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28
  5. Script test de deux chaine avec if
    Par kacedda dans le forum Linux
    Réponses: 6
    Dernier message: 02/05/2003, 15h38

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