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

PHP & Base de données Discussion :

Espace Membres Problème dans l'identification


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut Espace Membres Problème dans l'identification
    Salut tout le monde,
    J'ai Commencé à Créer un Espace Membres Avec Php et Mysql, Mais Malheureusement J'ai Un Problème dans la page De Connexion , J'ai déjà Créé La Page d'Inscription Avec Succès Mais J'arrive pas à Connecter Apres L' Inscription Merci d'avoir Consulter Mon Code et Me Corriger :

    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
     
    <?php
    include("Includes/DBConnect.php");
    $Message = NULL;
    $CLogin = $_POST['CLogin'];
    $CPwd = sha1($_POST['CPwd']);
     
    if (empty($CLogin) || empty($CPwd) )
    {
    $Message = '<p>Une Erreur s\'est produite pendant votre
    Identification.
    Vous devez remplir tous les champs</p>';
    }else{
    $query = $db->prepare('SELECT UM_Id FROM umembres WHERE UM_Login = :UM_Login AND UM_Pwd = :UM_Pwd');
    $query->execute(array('UM_Login' => $CLogin, 'UM_Pwd' => $CPwd));
    $data = $query->fetch();
    if ($data)
    {
    $Message = '<p>Bienvenue,
    vous êtes maintenant connecté!</p>
    <p>Cliquez <a href="./Home.php">ici</a>
    pour revenir à la page d accueil</p>';
    }else{
    $Message = '<p>Une Erreur s\'est produite
    pendant votre Identification.<br /> Le Mot de Passe ou le Pseudo
    entré n\'est pas Correcte.</p><p>Cliquez <a
    href="./Home.php">ici</a>
    pour revenir à la page précédente</p>';
    }
    }
    echo $Message;
    ?>
    La Base de Données est Déjà Connectée, Le Problème que Le Message :Une Erreur s'est produite pendant votre Identification.Le Mot de Passe ou le Pseudo entré n'est pas Correcte... S'affiche Toujours Merci Encore ...
    J'ai vraiment bien Essayé de résoudre ce problème mais sans résultat ...

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,
    d'après ton code tu ne reçois pas les données (login et password) provenant du formulaire;

    fais un debug sur la variable $_POST:
    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
     
     
    <?php
    include("Includes/DBConnect.php");
    $Message = NULL;
    $CLogin = $_POST['CLogin'];
    $CPwd = sha1($_POST['CPwd']);
     
    if (empty($CLogin) && empty($CPwd) )
    {
    var_dump($_POST);
    $Message = '<p>Une Erreur s\'est produite pendant votre
    Identification.
    Vous devez remplir tous les champs</p>';
    }else{
    $query = $db->prepare('SELECT UM_Id FROM umembres WHERE UM_Login = :UM_Login AND UM_Pwd = :UM_Pwd');
    $query->execute(array('UM_Login' => $CLogin, 'UM_Pwd' => $CPwd));
    $data = $query->fetch();
    if ($data)
    {
    $Message = '<p>Bienvenue,
    vous êtes maintenant connecté!</p>
    <p>Cliquez <a href="./Home.php">ici</a>
    pour revenir à la page d accueil</p>';
    }else{
    $Message = '<p>Une Erreur s\'est produite
    pendant votre Identification.<br /> Le Mot de Passe ou le Pseudo
    entré n\'est pas Correcte.</p><p>Cliquez <a
    href="./Home.php">ici</a>
    pour revenir à la page précédente</p>';
    }
    }
    echo $Message;
    ?>

  3. #3
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    comment peut-on savoir si ce sont les données du formulaire qui ne sont pas transmises ou la requête dans la BDD qui est fausse vu que les 2 expressions renvoyées par les tests commencent par "Une Erreur s'est produite pendant votre Identification" ?

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ah Désolé Le Message Exacte : Une Erreur s'est produite
    pendant votre Identification.Le Mot de Passe ou le Pseudo
    entré n'est pas Correcte...

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Merci,
    J'ai Essayé var_dump($_POST) et j'ai trouvé que les données sont bien reçus , Alors Ou est le problème ...

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    j'ai dû confondre tes messages d'erreurs qui se ressemblent un peu.en fait l'erreur est provoquée à la suite de l'exécution de la requête.
    Le mot de passe hashé entré par l'internaute est-il le même que celui stocké en BD?

    j'ai ajouté la gestion d'exceptions:
    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
    <?php
    include("Includes/DBConnect.php");
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     
    $Message = NULL;
    $CLogin = $_POST['CLogin'];
    $CPwd = sha1($_POST['CPwd']);
     
    if (empty($CLogin) && empty($CPwd) )
    {
     
    $Message = '<p>Login et/ou mot de passe vides</p>';
    }else{
     echo 'mot de passe hashé:',$CPwd;//A enlever après le teste
    try{
    $query = $db->prepare('SELECT UM_Id FROM umembres WHERE UM_Login = :UM_Login AND UM_Pwd = :UM_Pwd');
    $query->execute(array(':UM_Login' => $CLogin, ':UM_Pwd' => $CPwd));
    $data = $query->fetch();
     
    if ($query ===TRUE && $data ){
    $Message = '<p>Bienvenue,
    vous êtes maintenant connecté!</p>
    <p>Cliquez <a href="./Home.php">ici</a>
    pour revenir à la page d accueil</p>';
    }else{
    $Message = '<p>Une Erreur s\'est produite
    pendant votre Identification.<br /> Le Mot de Passe ou le Pseudo
    entré n\'est pas Correcte.</p><p>Cliquez <a
    href="./Home.php">ici</a>
    pour revenir à la page précédente</p>';
    }
    }
    }catch (PDOException $e){
    print "Erreur ! : " . $e->getMessage() . "<br/>";
    }
     
    echo $Message;
    ?>
    tu postes l'erreur sql retournée.
    ensuite n'oublie pas d'exécuter ta requête avec une console mysql ou avec phpmyadmin.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Merci mais ça marche pas toujours la même Erreur ...

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    Par défaut
    Y'a une erreur dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = $query->fetch();
     
    if ($query ===TRUE && $data )
    {
     
    }
    Pourquoi cette triple égalité ? et puis pas besoin de vérifier $query puisque cette variable se trouve dans le try.

    Pour être plus clair et plus strict, étant donné que tu ne récupère qu'une ligne, je ferais plutôt à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = $query->fetchAll();
     
    if (count($data) == 1)
    {
    //ok
    }
    ou en reprenant la méthode initiale (mais c'est un peu moins strict que ci-dessus puisqu'on ne vérifie pas qu'on a un seul résultat en retour)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = $query->fetch();
     
    if ($data !== false)
    {
    //ok
    }
    Essayez dans le mesure du possible de faire des conditions simples et claires comme les deux exemples ci-dessus.
    Par exemple dans le second exemple on pourrait bien sûr faire if ($data) {} mais la condition serait plus équivoque.

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    exécutes cette requête au niveau de la console mysql ou avec phpmyadmin:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UM_Id FROM umembres WHERE UM_Login ='tonLogin' AND UM_Pwd =sha1('motDePass');


    le hash du mot de passe entré par l'utilisateur est-il le même que celui stocké en base?

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Oui Le Même Hash sha1() ...

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    @ABCIWEB

    Merci beaucoup mais malheureusement ça marche pas comme toujours, vraiment bizarre ...

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    Par défaut
    Et alors tu l'as faite cette requête directement dans phpmyadmin ?

    C'est ça qu'il faut faire comme vérification quand apparemment tout est bon niveau php.

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ok Je vais Essayer Merci ...

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    J'ai Essayé et il M'affiche Cette erreur :
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':UM_Login AND UM_Pwd = :UM_Pwd LIMIT 0, 30' at line 1

  15. #15
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    @ABCIWEB
    non la condition n'est pas fausse car rien n'empêche de vérifier le type et la valeur renvoyée par execute(). Pourquoi vérifier $query? si la table a une ligne vide et l'utilisateur a soumis un formulaire vide(même si dans le cas d'espèce les données ont été vérifiées en amant) PDOException ne sera jamais instanciée donc l'exception ne sera jamais attrapée: c'est juste une double vérification.

  16. #16
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    Par défaut
    armel18 t'avais donné l'exemple. Faut pas mettre une requête préparée dans phpmyadmin mais une requête classique, donc pas de ":"

  17. #17
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    tu dois passer des valeurs (login et password) à ta requête et non les 2 points(.Voilà la requête qu'il faut tester(bien sûr tu dois remplaces login par le login qui en BD idem pour password):
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UM_Id FROM umembres WHERE UM_Login ='tonLogin' AND UM_Pwd =sha1('motDePass');

  18. #18
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Par défaut
    Ok Merciii J'essaye

    Encore La Même Erreur ... Alors Je Pense Que L'erreur est là Exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query->execute(array('UM_Login' => $CLogin, 'UM_Pwd' => $CPwd));
    $data = $query->fetch();

  19. #19
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    Par défaut
    Citation Envoyé par armel18 Voir le message
    non la condition n'est pas fausse car rien n'empêche de vérifier le type et la valeur renvoyée par execute(). Pourquoi vérifier $query? si la table a une ligne vide et l'utilisateur a soumis un formulaire vide(même si dans le cas d'espèce les données ont été vérifiées en amant) PDOException ne sera jamais instanciée donc l'exception ne sera jamais attrapée: c'est juste une double vérification.
    Si elle est fausse. $query est un objet et donc il ne sera jamais strictement égal à true

    Pour le reste ce n'est pas en vérifiant execute que l'on contrôle des données. Execute s'exécutera normalement même avec des données vides.

    Ne mélangez pas tous les types contrôles car cela ne donne que des erreurs d'interprétation et c'est précisément le cas ici.

  20. #20
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    Par défaut
    Citation Envoyé par SickPerson Voir le message
    Encore La Même Erreur ... Alors Je Pense Que L'erreur est là Exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query->execute(array('UM_Login' => $CLogin, 'UM_Pwd' => $CPwd));
    $data = $query->fetch();
    T'as un raisonnement un peu bizarre non ?
    On te dis que tu as une erreur de syntaxe dans ta requête et tu en conclue que l'erreur se situe après ?

    Ou alors qu'est-ce que tu entends par "même erreur". On fini par ne plus savoir de laquelle tu parle.

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/01/2009, 21h25
  2. [MySQL] problème d'identification sur un espace membre
    Par dogiro dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 06/09/2008, 17h41
  3. [Conception] Messagerie privée dans un espace membre
    Par elitemedia dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/09/2006, 16h29
  4. [Tableaux] Espace membre - Problème de permissions
    Par yongblood dans le forum Langage
    Réponses: 6
    Dernier message: 22/06/2006, 18h32
  5. [Tableaux] problème avec espace membre
    Par ph_anrys dans le forum Langage
    Réponses: 10
    Dernier message: 01/03/2006, 17h26

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