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 de comparaison (chez lycos)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Problème de comparaison (chez lycos)
    Bonjour,
    Je me suis lancé dans la mise en place d'un site dont l'accès est protégé par un mot de passe.
    Les utilisateurs, et leur mot de passe, sont stockés dans une table "utilisateurs" de ma base de donnée.
    Quand un utilisateur veut se connecter, il remplit les champs d'un formulaire qui compare avec les données stockée dans la table et le programme vérifie alors si les données sont correctes et donne ou non l'accès au site.

    J'ai d'abord développer mon code avec easyPHP et comme tout fonctionnait parfaitement, j'ai décidé de tester sur le net en prenant un compte chez Lycos.
    Après avoir importé mes données et mes pages, j'ai refait mon test et là, ca plante.
    Quand un utilisateur inscrit dans la base de donnée entre ses coordonnées, et un mot de passe foireux, ça coince la première fois, mais à la deuxième tentative (avec un mot de passe erroné), il peut accéder au site.
    Je n'ai pourtant rien changé à mon code (qui tourne parfaitement en local avec easyphp).

    Si quelqu'un a une idée de ce qui coince.

    Pour info, voici le 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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    <?php
    @session_start(); // On démarre la session AVANT toute chose
     
    /*
    *********************************
    * Initialisation des variables globales *
    *********************************
    */ 
    if (isset($_SESSION['nom']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['nom'] = "";
        }
     
    if (isset($_SESSION['prenom']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['prenom'] = "";
        }
     
    if (isset($_SESSION['mot_de_passe']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['mot_de_pase'] = "";
        }
     
    if (isset($_SESSION['num_fonction']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['num_fonction'] = "";    
        }
     
    if (isset($_SESSION['num_metier']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['num_metier'] = "";
        }
     
    if (isset($_SESSION['num_metier_2']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['num_metier_2'] = "";
        }    
     
    if (isset($_SESSION['num_metier_3']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['num_metier_3'] = "";
        }
     
    if (isset($_SESSION['email']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['email'] = "";
        }    
     
    if (isset($_SESSION['administrateur']) == FALSE) // On vérifie si la variable globale n'existe pas
        {
            $_SESSION['administrateur'] = 0;
        }    
    /*
    ***********************************************
    * Acquisition des variables globales vià le formulaire *
    ***********************************************
    */     
     
    if (isset($_POST['nom'])) // On vérifie si le visiteur a déjà choisi un nom
        {
            $_SESSION['nom'] = ($_POST['nom']);    // Je stocke le nom du visiteur
            $_SESSION['nom'] = strtr($_SESSION['nom'], "éèêëçàâäôö", "eeeecaaaoo");
            $_SESSION['nom'] = htmlentities ($_SESSION['nom']);
            $_SESSION['nom'] = strtoupper($_SESSION['nom']); //Je le mets en majuscule
        }
    if (isset($_POST['prenom'])) // On vérifie si le visiteur a déjà choisi un prenom
        {
            $_SESSION['prenom'] = htmlentities($_POST['prenom']); // Je stocke le prenom du visite
            $_SESSION['prenom'] = strtr($_SESSION['prenom'], "éèêëçàâäôö", "eeeecaaaoo");
            $_SESSION['prenom'] = htmlentities ($_SESSION['prenom']);
            $_SESSION['prenom'] = strtoupper($_SESSION['prenom']);//Je le mets en majuscule
        }
    if (isset($_POST['mot_de_passe'])) // On vérifie si le visiteur a déjà choisi un mot de passe
        {
            $mot_de_passe =  htmlentities($_POST['mot_de_passe']); // Je stocke le mot de passe entré par le visiteur
            $mot_de_passe = md5($mot_de_passe);    // hachage du mot de passe    
        }
        else // La variable n'existe pas encore
        {
            $mot_de_passe = 1;    // On crée une variable $mot_de_passe
        }    
     
    if (isset($_SESSION['drapeau']) == false)
        {        
            $_SESSION['drapeau'] = 0;
        }
     
    /*
    ***************************************************************
    * Connexion à la base de donnée et récupération des données utilisateurs *
    ***************************************************************
    */ 
     
     
     
    $db = mysql_connect('localhost', '******', '******'); 
    mysql_select_db('*********',$db); 
     
    $reponse = mysql_query("SELECT * FROM utilisateurs WHERE nom='".$_SESSION['nom']."' AND prenom='".$_SESSION['prenom']."' ");
     
    while ($data = mysql_fetch_array($reponse))
     
    {
    $_SESSION['mot_de_passe'] = $data['mot_de_passe'];
    $_SESSION['num_fonction'] = $data['num_fonction'];
    $_SESSION['num_metier'] = $data['num_metier'];
    $_SESSION['num_metier_2'] = $data['num_metier_2'];
    $_SESSION['num_metier_3'] = $data['num_metier_3'];
    $_SESSION['administrateur'] = $data['administrateur'];
    }
     
    /*
    *************************************************
    * Test du mot de passe et affichage de la page adéquate *
    *************************************************
    */ 
    if ($_SESSION['mot_de_passe'] != $mot_de_passe) // Si le mot de passe n'est pas bon
        {    
            if ($_SESSION['drapeau'] >= 4)
                {
                    mysql_close(); // Déconnexion de MySQL
                    include ("deconnexion2.php");
                }
                else
                {    
                                     $_SESSION['drapeau'] = $_SESSION['drapeau']+1 ;
                                     mysql_close(); // Déconnexion de MySQL
                                     include ("formulaire_log_in.php");
                }
        } //fin du if
        else //début du else
        {
                          mysql_close(); // Déconnexion de MySQL
                          include("acceuil.php");        
        }// Fin du code 
     
    ?>
    Le problème semble être le suivant, apparement, après la deuxième tentative, il attribue la valeur du mot de passe de l'utilisateur à ma variable $mot_de_passe. Et je ne comprend vraiment pas pourquoi.....

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    c'est quoi ça ?

    bon pour commencer, une variable de session n'est pas une variable globale...

    Pourquoi l'utilisation des variables de session dans ce contexte ?
    ensuite d'ou vient $_SESSION['mot_de_passe'] ?
    tu testes l'existence du nom et du prénom mais pas du mot de passe dans ta requête... c'est normal ?

    bref, je te déconseilles l'utilisation de ce script, du moins tel qu'il est écrit...
    une méthode d'authentification pourrait être de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = "SELECT id FROM `matable` WHERE `pseudo` LIKE '".$_POST['pseudo']."' AND `password` LIKE '".md5($_POST['mot_de_passe']."'";
    $res = mysql_query($sql);
    if(!$res) die (mysql_error());
    if(!mysql_num_rows($res)) {
       echo "Erreur d'authentification !";
    }else {
       // affichage de ce que tu veux proteger
    }
    à adapter bien sûr ;-)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Merci de ta réponse, je vais tester ton script.
    Pour les variables de session, je les définis, parce que je vais devoir les réutiliser sur d'autres pages du site.
    Sinon, il est vrai que j'avais pas pensé à tester le mot de passe directement dans la requête sql. Ta solution me semble effectivement plus logique

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    J'y suis presque. Mais je pense que je dois avoir un problème avec ma requête sql !
    En effet, lorsque je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = " SELECT * FROM utilisateurs WHERE nom='".$_SESSION['nom']."' AND prenom='".$_SESSION['prenom']."' ";
    ca fonctionne parfaitement. Si je rentre le bon nom et le bon prénom, je peux entrer sur le site, sinon j'ai le message "Erreur d'authentification !".

    Par contre lorsque j'introduis mon mot de passe dans la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = " SELECT * FROM utilisateurs WHERE nom='".$_SESSION['nom']."' AND prenom='".$_SESSION['prenom']."' AND mot_de_passe='".$mot_de_passe." ";
    là ca ne marche plus. Il me met le message "Erreur d'authentification !", même si j'introduit le bon nom, le bon prénom et le bon mot de passe.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Je viens de trouver l'erreur en relisant mon message !

    J'ai oublié un ' après ".$mot_de_passe.".

    Comme quoi, ca tient à peu de chose !

    Grand merci à toi ska_root, pour tes conseils avisés !

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

Discussions similaires

  1. Problème de comparaison de variables
    Par bmdd dans le forum Langage
    Réponses: 9
    Dernier message: 06/04/2006, 16h51
  2. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  3. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  4. problème de comparaison table dans requète.
    Par Sendo dans le forum Access
    Réponses: 8
    Dernier message: 09/03/2006, 11h10
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

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