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 membre - connexion


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut Espace membre - connexion
    Bonjour
    J'essaie de créer un espace membre sur mon site et je bloque à la partie connexion. A chaque fois la connexion me renvoit pseudo ou mot de passe incorrectes, quelqu'un peut-il m'aider ?
    Voici mon PHP (connexion.php) :
    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
    <?php
    if(!empty($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])){
     
    require_once 'config.php';
    // Hachage du mot de passe
    $pass_hache = password_hash($_POST['password'], PASSWORD_DEFAULT);
     
    // Vérification des identifiants
    $req = $base->prepare('SELECT id_membre FROM membres WHERE pseudo = :pseudo AND password = :password');
    $req->execute(array(
        'pseudo' => $pseudo,
        'password' => $pass_hache));
     
    $resultat = $req->fetch();
     
    if (!$resultat)
    {
        echo 'Mauvais identifiant ou mot de passe !';
    }
    else
    {
        session_start();
        $_SESSION['id_membre'] = $resultat['id_membre'];
        $_SESSION['pseudo'] = $pseudo;
        echo 'Vous êtes connecté !';
        header('Location: accueil.php');
    }
     
    }
    Mon HTML :
    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
    <form method="post" action="connexion.php">
        <fieldset>
           <legend>Vos coordonnées</legend> <!-- Titre du fieldset -->
     
           <label for="pseudo">Pseudo *:</label>
           <input type="text" name="pseudo" id="pseudo" required /><br><br>
     
           <label for="Prenom">Mot de passe *:</label>
           <input type="password" name="password" id="password" required /><br><br>
     
           <label for="automatique">Connexion automatique </label>
           <input type="checkbox" name="automatique" id="automatique" /><br><br>
     
        </fieldset>
     
          <input type="submit" name="connexion" value="Se connecter" class="btn bnt-defaut" />
         </form>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ou est défini $pseudo ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    Ok j'ai rajouté ces 2 ligne de codes (dans le fichier php) mais j'ai toujours la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = isset($_POST['password']) ? $_POST['password'] : NULL;

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Question inverse, ou est utilisé $password ?
    Et à quoi sert le test isset() puisque tu as déjà vérifié les variables ligne 2 ?

    As-tu contrôlé visuellement que $pass_hache correspond bien à ce que tu as dans ta table ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    J'ai un peu modifié le code et j'arrive à m'inscrire et le mot de passe est bien crypté dans la base de données. Mais au moment de la connexion, j'ai la même erreur (cad mot de passe ou pseudo incorrets)
    Voici le contenu de mes variables :
    string(3) "fff" string(3) "fff" bool(false) Mauvais identifiant ou mot de passe !
    Voici mon code PHP :
    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
    <?php
    $pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = isset($_POST['password']) ? $_POST['password'] : NULL;
     
    if(!empty($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])){
     
    require_once 'config.php';
    // Hachage du mot de passe
    $pass_hache = password_hash($_POST['password'], PASSWORD_DEFAULT);
     
    // Vérification des identifiants
    $req = $base->prepare('SELECT id_membre FROM membres WHERE pseudo = :pseudo AND password = :password');
    $req->execute(array(
        'pseudo' => $pseudo,
        'password' => $pass_hache));
    var_dump($pseudo);
    var_dump($password);
    $resultat = $req->fetch();
    var_dump($resultat);
    if (!$resultat)
    {
        echo 'Mauvais identifiant ou mot de passe !';
    }
    else
    {
        session_start();
        $_SESSION['id_membre'] = $resultat['id_membre'];
        $_SESSION['pseudo'] = $pseudo;
        echo 'Vous êtes connecté !';
        header('Location: accueil.php');
    }
     
    }

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je te repose les 3 mêmes questions qu'avant :
    - à quoi sert $password ?
    - pourquoi faire deux fois le test d'existence des variables $_POST ?
    - est-ce que $pass_hache est bien égale à ce que tu as dans la base de données ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je te repose les 3 mêmes questions qu'avant :
    - à quoi sert $password ?
    - pourquoi faire deux fois le test d'existence des variables $_POST ?
    - est-ce que $pass_hache est bien égale à ce que tu as dans la base de données ?
    - $password contient le mot de passe !

    - Avec la fonction isset() je récupère la valeur saisie par l'utilisateur, ce que juste empty() ne fait pas.

    - Dans la base de données, le mot de passe est crypté, exemple dans la bd le mot de passe en "fff" donne
    $2y$10$19J0muunp4dJN.KpN0PILu7fwW0sTdfFziEothPrXmuVFfnhsFNBy
    Je me demande si le password_hash() reconvertit
    $2y$10$19J0muunp4dJN.KpN0PILu7fwW0sTdfFziEothPrXmuVFfnhsFNBy
    en "fff" pour faire correspondre les mots de passe.

  8. #8
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut,
    puisque c'est password_hash qui est utilisé pour hasher le mot de passe, on utilise plutôt password_verify pour la vérification.
    Code php : 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
     
    <?php
    if(!empty($_POST['pseudo']) && !empty($_POST['password'])) {
        require_once 'config.php';
        $pseudo = $_POST['pseudo'];
        $req = $base->prepare('SELECT password, id_membre FROM membres WHERE pseudo = :pseudo');
        $req->execute([
            'pseudo' => $pseudo,
        ]);
     
        $resultat = $req->fetch();
        if ($resultat && password_verify($_POST['password'], $resultat['password'])) {
           //Mise en session et redirection
        } else{  
            //Erreur de connexion
        }
    }

    Pas d'echo avant un header

  9. #9
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    La valeur récupérée par
    $resultat['password']
    est =
    NULL
    . Je sais pas pourquoi !

  10. #10
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Si on a NULL, ça peut signifier que la colonne password n'existe pas ou n'est pas présente dans le SELECT.
    Pour un pseudo existant que donne var_dump($resultat);exit; avec le code que j'ai donné.

  11. #11
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    La colonne password existe et je l'ai rajouté dans le SELECT. Mais ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_dump($_POST['password']);var_dump($resultat);
    var_dump($resultat['password']);
    exit;
    donne encore :
    string(3) "rrr" bool(false) NULL

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    - $password contient le mot de passe !
    et ça sert à quoi de stocker le mot de passe dans une variable que tu n'utilises pas après dans le code ?

    - Avec la fonction isset() je récupère la valeur saisie par l'utilisateur, ce que juste empty() ne fait pas.
    les deux fonctions font a peu près la même chose, donc utilise une seule des deux et fait donc une seule fois le test.

    Tu n'as toujours pas contrôle ce que valait $pass_hache ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Si var_dump de $resultat est false alors aucune ligne n'a été trouvée, ça explique aussi le NULL de $resultat['password'] (avec PHP c'est comme ça)
    Sinon est-ce vraiment mon code qui est utilisé ?

  14. #14
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    @Willy_k, Je suis vraiment désolée j'avais modifié votre code et c'est pourquoi ça marchait pas, je viens de le mettre tel que tu me l'a donné et ça fonctionne nickel. Merci merci

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

Discussions similaires

  1. [MySQL] espace membre connexion impossible
    Par alastar dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/06/2016, 22h25
  2. Connexion à l'espace membre
    Par ploufleouf74 dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2009, 16h02
  3. [MySQL] Problème Connexion Espace Membres
    Par Luisito31 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/02/2009, 14h21
  4. [MySQL] connexion à un espace membre
    Par Arthezius dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/07/2008, 09h49
  5. [MySQL] Script de connexion (espace membre)
    Par razorlok dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/06/2008, 11h41

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