Problème requête SQL

Résolu/Fermé
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018 - Modifié le 14 déc. 2018 à 20:56
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018 - 16 déc. 2018 à 01:43
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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 déc. 2018 à 06:55
Bonjour
Tu récupères un array associatif...
Donc il faut utiliser

$usermdp['motdepasse']


0
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018
16 déc. 2018 à 01:43
Merci Beaucoup c'était parfaitement ce que je cherchais ! ça marche !
0
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
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
14 déc. 2018 à 20:57
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
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018
16 déc. 2018 à 01:42
Oui j'vais complètement oublié, Merci Beaucoup !
0