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 :

comparaison d'identifiant avec sha1 en mysqli [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Ziarrow
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut comparaison d'identifiant avec sha1 en mysqli
    Bonjour Chers développeurs en herbe.

    Je me suis longtemps demandé si j'osai vous poser la question mais j'ai un problème de nomenclature... voir plus. Je débute en SQL et PHP et je veux peut-être aller trop vite (je potasse des livres mais c'est long).

    J'essaye de coder un site tout simple avec inscription, connexion de membres et inclusion dans une base de données.
    Je bute sur la comparaison de l'email de l'utilisateur et du password en sha1... évidemment, je code en procédurale, je n'est pas opté pour le PDO... c'est sans doute une erreur de ma part mais pour l'instant j'apprends.

    Quelqu'un pourrait il m'aider à réussir la comparaison "email et mot de passe en sha1" ?

    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
     <?php 
                       $base = mysqli_connect ('localhost', 'root', ''); 
                       if (mysqli_connect_errno())
                       {
                          echo "Failed to connect to MySQL: " . mysqli_connect_error();
                       } 
                        mysqli_select_db ($base, "session") ;
     
                          if (!empty($_POST['compte_email']) AND !empty($_POST['compte_pwd']))
                          {
                            if (isset ($_POST['valider']))
                            {
                              $compte_email = mysqli_real_escape_string($base, $_POST['compte_email']);
                              $compte_pwd = mysqli_real_escape_string($base, $_POST['compte_pwd']);
                            }
                              $verif = 'SELECT id FROM inscription WHERE email = "'.$compte_email.'" AND password = sha1($compte_pwd)';
     
                              $verif_pwd = mysqli_query ($base, $verif) or die ('Erreur SQL <br />'.mysqli_error($base));
                              $row = mysqli_fetch_array($verif_pwd, MYSQLI_ASSOC);
                              if (mysqli_num_rows($verif_pwd) == 1)
                                { 
                                  echo "Vous êtes connecté";
                                }
                                else
                                {
                                  echo "Le mot de passe ne correspond pas !";
                                }
                                mysqli_free_result($verif_pwd);
                              }
                          else
                          {
                            echo 'Il faut renseigner un email et un mot de passe !';
                            ?>
                            <p>
                              <a href="user_connection.php">Revenir à la page de connection</a>
                            </p>
                            <?php 
                        }
                        mysqli_close($base); ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- ne pas confondre PDO et POO.

    2- si tu débutes, utilise PDO au lieu de mysqli.

    3- sha1 est à proscrire. Vois password_hash, password_verify.

  3. #3
    Membre averti Avatar de Ziarrow
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    Merci pour ta réponse (si rapide).

    Je prends note, mais je n'ai pas hâte de refaire mes 10 pages en PDO, soi dit en passant le livre que j'ai m'apprends à coder en Mysqli....

    Et je vais me tourner vers password_hash, password_verify... j'hésitais, celà me semblais plus simple d'utiliser sha1 en attendant d'en apprendre plus mais apparemment non.
    Bien sur, étant qu'au stade de l'ébauche du site, je peux très bien me mettre aussitôt au PDO.

    Encore merci. mon problème restera une enigme je crois....

  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 : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je plussoie les conseils de jreaux, mais à titre indicatif, pour le problème d'origine, je dirais que ça dépend de comment tu as inséré l'email et le mot de passe en base, et du fait qu'il manque des quotes autour du mot de passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $verif = 'SELECT id FROM inscription WHERE email = "'.$compte_email.'" AND password = sha1($compte_pwd)';
    A corriger en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $verif = "SELECT id FROM inscription WHERE email = '".$compte_email."' AND password = sha1('".$compte_pwd."')";
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Invité
    Invité(e)
    Par défaut
    1- Un blog intéressant à lire :


    Extrait :
    Le hachage n’est pas non plus réversible.
    Il n’existe pas de fonction permettant à coup sûr de retrouver l’information initiale partant de la valeur hachée.
    La possibilité de collisions s’oppose à la bijection impérativement nécessaire à déterminer une fonction réciproque.

    Le but du hachage n’est donc pas de crypter des données mais de donner une « empreinte » à une donnée.
    2- Attention de ne pas confondre les fonctions :
    • sha1() (en PHP)
    • et SHA1()(en SQL, qu'on prendra le soin d'écrire en majuscules)


    Avertissement
    It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm.

  6. #6
    Membre averti Avatar de Ziarrow
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    Merci pour l'aide, jreaux62, Merci pour ce lien...je le lirais très attentivement. Effectivement, je pensai à SHA1 en majuscule.
    Et merci Celira mais même comme ça, ça ne marche pas... mon AND n'est pas reconnu... erreur de comparaison.

    Mais j'ai repris mon code pour password_hash et password_verify, seulement, j'ai le même problème... ma comparaison est fausse, le AND n'est pas pris en compte dès que je met des guillemets.

    Pour la comparaison de l'email, ça marche, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $verif = 'SELECT id FROM inscription WHERE email = "'.$compte_email.'"';
    $resultat = mysqli_query ($base, $verif) or die (' Erreur SQL lors de la comparaison des emails <br />'.mysqli_error($base));
    if (mysqli_num_rows($resultat) == 1)
       {
        ....
        }
       else
       {
       }
    Mais pour le mot de passe... j'ai une erreur, de plus, j'ai voulu vérifier si l'email et le password sont ceux écrit par l'utilisateur :

    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
     
    //Hashage du mot de passe entrée par l'utilisateur
    $passwordhash = password_hash($compte_pwd, PASSWORD_DEFAULT);
    // lancement de la requete
    $verif_pwd = 'SELECT id FROM inscription WHERE email = "'.$compte_email.'" AND password = "'.$passwordhash.'"';
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
    $resultat = mysqli_query ($base, $verif_pwd) or die (' Erreur SQL lors de la comparaison des passwords <br />'.mysqli_error($base));
    // on recupere le resultat sous forme d'un tableau
    $row = mysqli_fetch_assoc($resultat);
    if(password_verify($passwordhash, $row['password']) == TRUE AND $row['email'] == TRUE)
       {
        echo " Vous êtes connecté";  
       }
       else 
        {
          echo " Le mot de passe ne correspond pas !";
        }
    Je ne récupère rien dans $row en faisant un echo.

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

Discussions similaires

  1. Problème de comparaison de chaines avec des accents
    Par alexmtp dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/10/2014, 10h10
  2. Problème de comparaison avec "sender"
    Par vgiant dans le forum VB.NET
    Réponses: 5
    Dernier message: 13/09/2009, 13h10
  3. Problème de comparaison de curdate() avec un datetime
    Par dubitoph dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/07/2009, 16h53
  4. Réponses: 1
    Dernier message: 03/03/2008, 14h20
  5. Réponses: 10
    Dernier message: 12/03/2007, 15h09

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