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 :

Test d'une variable


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 097
    Points : 1 059
    Points
    1 059
    Par défaut Test d'une variable
    Bonjour à toutes et à tous,

    Dans un fichier .php, j'ai le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_GET['ValidID'])) // Test des résultats du formulaire d'identification
    {
    }
    ...
    Cela ne pose pas de problème, que 'ValidID' soit défini ou non.

    Maintenant, si je remplace ce test par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (_t($_GET['ValidID'], 'Valider')) // Test des résultats du formulaire d'identification  // Test de non injection SQL
    {
    }
    ...
    où la fonction _t est :

    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
    function _t($Str, $Test)
    /* Pour que cette fonction retourne TRUE, il faut que l'entrée $Test soit assignée et que :
     - si $Test n'est pas une chaîne vide, alors il faut que $Str == $Test,
     - si $Test est une chaîne vide, alors $Str ne doit pas comporter les caractères suivants :
       - point-virgule, espace, 
    */ 
    {
      if (isset($Str))
      {
        if (($Test != '' && strcmp($Str, $Test) == 0)
        || ($Test == '' && strpos($Str, ';') === FALSE && strpos($Str, ' ') === FALSE && strpos($Str, '#') === FALSE))
        {
          return TRUE;
        }
        else
          return FALSE;
      }
      else
      {
        return FALSE;
      }
    }
    Cela ne fonctionne plus et j'ai l'erreur suivante :
    Notice: Undefined index: ValidID in MonFichier.php on line 1
    Une idée du problème.

    Cordialement.

    Pierre.

  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 : 48
    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,

    déjà on ne fait pas transiter les données d'identification dans une url $_GET, on utilise plutôt le $_POST,
    ensuite quand tu fais if (_t($_GET['ValidID'], 'Valider')) qui te dit que $_GET['ValidID'] existe et est défini ? Tu dois garder ton test du isset() et après tu testes avec ta fonction.

    D'ailleurs je ne comprends pas trop l'utilité de ta fonction. Pourquoi interdire des caractères alors qu'il suffit d'utiliser correctement les échappements pour la base de données (PDO) par exemple pour t'en prémunir.
    Enfin, généralement l'interdiction de caractères dans une chaîne d'identification est considérée comme une grosse faiblesse.
    Limite la longueur mais pas le contenu.

    D'ailleurs si tu utilises les fonctions de sécurité de PHP : Fonctions de hachage de mot de passe, tu es même à l'abri des attaques sur le traitement des longues valeurs (le temps).

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 097
    Points : 1 059
    Points
    1 059
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    ... D'ailleurs je ne comprends pas trop l'utilité de ta fonction. ...
    C'était il y a une douzaine d'années, on m'avait suggéré cette manière faire dans un but de non injection SQL et cela ne posait aucun problème avec la version php 5.3.9 d'alors.

    Comme c'est uniquement en local que je me sers de cela maintenant, je vais simplement revenir à la première solution : if (isset($_GET['ValidID']))Cordialement.

    Pierre.

  4. #4
    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
    Citation Envoyé par ChPr Voir le message
    Dans un fichier .php, j'ai le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_GET['ValidID'])) // Test des résultats du formulaire d'identification
    {
    }
    ...
    Cela ne pose pas de problème, que 'ValidID' soit défini ou non.
    En même temps, c'est un peu le but de la fonction isset : traiter les cas où la variable ou l'index n'est pas défini sans planter

    Donc le plus simple est de combiner les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET['ValidID']) && _t($_GET['ValidID'], 'Valider'))
    Au passage, il ya des fonctions comme filter_​input pour tester les données en entrée.

Discussions similaires

  1. [Tableaux] Problème de test sur une variable
    Par Laurent64 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 14h04
  2. faire un test sur une variable
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 15h55
  3. [langage] probleme sur test d'une variable
    Par Melvine dans le forum Langage
    Réponses: 11
    Dernier message: 25/10/2006, 19h31
  4. [Mail] Construire un test avec une variable
    Par jeromesco dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2006, 21h52
  5. [xsl] Test avec une variable ?
    Par maxonman dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 24/01/2006, 10h47

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