Problème requête SQL

Résolu
Yougo120 Messages postés 24 Statut Membre -  
Yougo120 Messages postés 24 Statut Membre -
Bonjour j'ai crypté un mot de passe avec password_hash que j'ai mis dans ma base de données et lorsque je veux le récupérer, j'ai : "Array ( [motdepasse] => " qui se met devant et une parenthèse à la fin ce qui m'empêche de valider mon mot de passe avec password_verify, qui lui marche, car lorsque je met directement le mot de passe crypté au lieu de la variable, ça marche parfaitement ! le code:

<?php
session_start();

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
try{

  $db = new PDO('mysql:host=****;dbname=****', '****','****');
  $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
  $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
  global $db;
}catch(Exception $e)
{
    echo 'Problème: ' . $e->getMessage();
}

if(isset($_POST['formconnexion'])) {
   $mailconnect = $_POST['mailconnect'];
   $mdpconnect = $_POST['mdpconnect'];
   echo $mailconnect; //c'est juste une vérification personnelle 
   $req = $db->prepare("SELECT motdepasse FROM membres WHERE mail = '$mailconnect'");
   $req->execute(array('motdepasse'));
   $usermdp = $req->fetch(PDO::FETCH_ASSOC);
   print_r($usermdp); //c'est juste une vérification personnelle 

        if(password_verify($mdpconnect, $usermdp)){
         echo'oui';
      }else{
         echo'non';
      }
?>

3 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Tu récupères un array associatif...
    Donc il faut utiliser
    
    $usermdp['motdepasse']
    
    

    0
    1. Yougo120 Messages postés 24 Statut Membre
       
      Merci Beaucoup c'était parfaitement ce que je cherchais ! ça marche !
      0
  2. Zero
     
    Salut !

    Si tu regardes bien, t'as marqué n'importe quoi...
    $req = $db->prepare("SELECT motdepasse FROM membres WHERE mail = '$mailconnect'");
    $req->execute(array('motdepasse'));
    $usermdp = $req->fetch(PDO::FETCH_ASSOC);
    


    Pourquoi une requête préparée alors que tu ne mets aucun paramètres ?
    Ton "execute" ne sert à rien...
    Je t'invite à regarder ceci pour les requêtes préparées.
    http://php.net/manual/fr/pdo.prepared-statements.php

    Je crois que tu cherches à faire ça.
    $mailconnect = $_POST['mailconnect'];
       $mdpconnect = $_POST['mdpconnect'];
       echo $mailconnect; //c'est juste une vérification personnelle 
       $req = $db->prepare("SELECT motdepasse FROM membres WHERE mail = ?");
       $req->execute(array($mailconnect));
       $usermdp = $req->fetch(PDO::FETCH_ASSOC);
       print_r($usermdp['motdepasse']); //c'est juste une vérification personnelle 
    
    0
  3. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    A côté des réponse, petit conseil :
    Quand tu postes un code, retire les identifiants et MDP d'accès à la BDD (et autre aussi), c'est mieux pour ta sécurité ;)
    0
    1. Yougo120 Messages postés 24 Statut Membre
       
      Oui j'vais complètement oublié, Merci Beaucoup !
      0