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 :

Système de comparaison PHP erroné ? [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Points : 70
    Points
    70
    Par défaut Système de comparaison PHP erroné ?
    Bonjour,

    Ce matin, en voulant me connecter sur l'intranet sur lequel je travaille, je fais, par une faute de frappe et une validation un peu trop rapide, une erreur dans le mot de passe. J'ai attribué un mot de passe par défaut ('0000'), tant que le serveur n'est pas en ligne. Et cette fois j'ai écrit un '0' en trop, et là je remarque que j'arrive à me connecter Oo
    Je regarde mon bout de code PHP que voici (en ajoutant quelques 'echo'):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo $data['Password'] . ' | ' . $_POST['password'] . '<br>';
    /* $data['Password'] correspond au mot de passe de la bdd non-crypté
        $_POST['password'] correspond au mot de passe entré dans le formulaire */
    if ($data['Password'] == $_POST['password'])
    {
     echo "Ca rentre !";
     $_SESSION['Nom'] = $_POST['nom'];
     $_SESSION['Prenom'] = $_POST['prenom'];
     ...
    }
    Et là, ma page m'affiche :
    0000 | 000000000
    Ca rentre !

    Le test marche aussi si on met qu'un seul zéro par exemple, par contre, si on rentre au moins un autre caractère, la comparaison est correcte ('00000a' renverra bien false).

    J'ai donc été obliger d'utiliser une fonction style strcmp en C. Mais ce qui m'inquiète c'est le fait que donc les comparaisons 'de base' en PHP ne fonctionnerait pas. J'aimerai donc savoir si vous voyez une erreur dans ce petit bout de code (j'ai beau voir et revoir, je vois rien qui cloche mais sait-on jamais...), si les comparaisons en PHP sont foireuses, ou s'il est recommendé d'utiliser une autre fonction pour les comparaisons ? (comme strcmp par exemple).

    Merci d'avance.

    Edit : Après un petit test, j'ai pu constaté que la comparaison ne fonctionnait pas correctement uniquement avec des zéros, le même test avec la lettre 'a' renvoie un résultat correct.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais ===

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Points : 70
    Points
    70
    Par défaut
    En effet, ça marche !
    Pourriez-vous m'en expliquer la raison ? Je ne sais pas grand-chose à propos du '===', mais il me semblait que ça comparait aussi le type des variables, mais ici le type des variables est 'string' pour les deux, non ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Hoder Voir le message
    En effet, ça marche !
    Pourriez-vous m'en expliquer la raison ? Je ne sais pas grand-chose à propos du '===', mais il me semblait que ça comparait aussi le type des variables, mais ici le type des variables est 'string' pour les deux, non ?
    c'est parce que le == cast dans diffèrent format
    pour les comparaison de chaine c'est sois numérique sois lexical

    '0000' == '000000'
    meme si c'est des chaine il va les mettre en nombre ca va donner 0 == 0

    '0000' == '00000a'
    la il compare bien puisque la 2eme valeur a une lettre il fera une comparaison lexical


    http://php.net/manual/fr/language.op...comparison.php

  5. #5
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Points : 70
    Points
    70
    Par défaut
    Ah ok, je ne savais pas à propos du cast. Merci beaucoup pour cette explication

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

Discussions similaires

  1. [Système] lancer du php dans du php
    Par nonaM1982 dans le forum Langage
    Réponses: 16
    Dernier message: 21/02/2006, 10h47
  2. Réponses: 5
    Dernier message: 13/02/2006, 14h45
  3. Réponses: 7
    Dernier message: 20/10/2005, 20h51
  4. [Système] Imprimer en PHP
    Par TitAnz35 dans le forum Langage
    Réponses: 9
    Dernier message: 13/10/2005, 12h20

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