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 :

Requête préparée php sql server


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Points : 57
    Points
    57
    Par défaut Requête préparée php sql server
    Bonjour,

    J'ai créer deux tables relié par une clé étrangère.
    La premier table se nomme Authentification avec les champs id (auto incrémenté PK), UserPass et IdUtilisateur(FK).
    La deuxième table se nomme Utilisateur avec les champs: id(auto incrémenté PK), Nom, Prénom, email.

    J'arrive pas me loguer sur ma page client.

    Voici ci-dessous ma requête préparé avec un left join. Je pense que le problème vient de ma requête. Merci de vôtre aide.

    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
     
     
    public function Authentication($dt){
     
     
            $_db = $this->_db;
     
     
            $req = $_db->prepare("SELECT u.id as id , u.Nom as Nom  FROM Authentification as a  Left JOIN Utilisateur as u ON a.IdUtilisateur = u.Id WHERE u.Nom = :Nom AND a.UserPass = :UserPass "); 
     
            $req->execute(array(
     
                'Nom' => $dt->Nom,
                'UserPass' => hash('sha512', $dt->UserPass)
     
            ));
     
            $resultat = $req->fetch();
     
                if ($resultat != FALSE) {
     
                    return $resultat;
     
     
                } else {
     
                    return false; 
     
                }
     
        }

  2. #2
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En général, ce genre de requêtes a des problèmes avec les comparaisons de mot de passe. Si tu retires la recherche du mot de passe dans la requête, est-ce que ça fonctionne mieux ?
    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]

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Points : 57
    Points
    57
    Par défaut
    J'ai retiré le mot de passe de la recherche cela ne fonctionne toujours pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      $req = $_db->prepare("SELECT u.id as id , u.Nom as Nom  FROM Authentification as a LEFT JOIN Utilisateur as u ON a.IdUtilisateur = u.Id WHERE u.Nom = :Nom "); 
     
            $req->execute(array(
     
                'Nom' => $dt->Nom,
                'UserPass' => hash('sha512', $dt->UserPass)
     
            ));

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    il faut aussi le retirer des paramètres passés à la requête.
    Tu utilises PDO pour la connexion ?
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Points : 57
    Points
    57
    Par défaut
    Je comprends pas si je supprime la recherche du mot passe dans ma requête. Comment la requête sera si j'insère le bon mot de passe.

    Oui j'utilise PDO

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req = $_db->prepare("SELECT u.id as id , u.Nom as Nom  FROM Authentification as a LEFT JOIN Utilisateur as u ON a.IdUtilisateur = u.Id WHERE u.Nom = :Nom  "); 
     
            $req->execute(array(
     
                'Nom' => $dt->Nom
     
     
            ));
    J'ai testé en supprimant les paramètres, je sais pas si j'ai fait les choses je suis perdu.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ton problème vient du fait que mysql ne considère pas ton mot de passe chiffré par hash() soit égal a ce qui est stocké dans ta base de données. Ca peut être dû a plusieurs choses :
    - Le mot de passe est incorrect (on sait jamais )
    - le mot de passe n'est pas chiffré dans la base
    - la méthode de chiffrement utilisé pour générer les hashs que tu stockes en base de données n'est pas le même que celui que tu utilises pour ton authentification (sha512 contre md5 par exemple)
    - l'implémentation de l'algorithme de chiffrage utilisé n'est pas le même pour la génération des hashs que pour l'authentification. Dans ton cas, hash('sha512', 'foo') de php contre SHA2('foo', 512) de mysql. Il arrive que des outils différents implémentent un même algorithme différemment.

  7. #7
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je t'ai demandé de retirer le mot de passe de la requête pour voir si on était dans un des cas cités par Mrsky. Si ton test fonctionne sans la vérification de mot de passe, c'est que le problème vient de la vérification.

    Pour éviter les cas les plus tordus il est recommandé de faire la vérification de la même façon que tu fais l'insertion du mot de passe en base. Pour reprendre les indications de Mrsky, si tu as hashé le mot de passe en php avant de l'insérer en base, il faut le hasher en php avant de faire la requête. Si au contraire, tu as hashé le mot de passe via SQL, il faut faire le hash dans la requête.

    Le mieux étant quand même d'utiliser la combinaison password_​hash et password_​verify. Dans ce cas, tu fais la requête avec uniquement le login, puis tu fais la vérification du mot de passe récupéré dans le script PHP.
    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]

Discussions similaires

  1. Requête sur Vue SQL Server 2000 PLANTE aléatoirement
    Par StarMusic dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/11/2006, 10h22
  2. [SQL-Server] Pb Lecture données PHP / SQL Server
    Par julienduprat dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/09/2006, 09h41
  3. probleme php sql server
    Par flydragon dans le forum Apache
    Réponses: 1
    Dernier message: 25/05/2006, 20h21
  4. [SQL-Server] Problème avec la fonction mssql_connect (connexion PHP SQL Server)
    Par flydragon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/05/2006, 11h59
  5. [SQL-Server] Renseignements php <-> sql server
    Par mic79 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/10/2005, 11h36

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