Erreur : Notice: Trying to get property of non-object in

Par Soulouf, il y a 9 ans


Bonjour,

Cela fait un petit moment que j'ai ce message d'erreur quand j'essaie de me connecter sur mon site et que je tape des mauvais identifiants :
Notice: Trying to get property of non-object in C:\MAMP\PHP\OpenClassrooms\Site\membres\app\function\form-signin.php on line 18
Voici mon code

<?php reconnect_from_cookie(); if(isset($_SESSION['auth'])){ header('Location: account.php'); exit(); } if(!empty($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])){ $req = $pdo->prepare(' SELECT * FROM members WHERE (pseudo = :pseudo OR email = :pseudo) AND confirmed_at IS NOT NULL'); $req->execute(['pseudo' => $_POST['pseudo']]); $user = $req->fetch(); if(password_verify($_POST['password'], $user->password)){ $_SESSION['auth'] = $user; $_SESSION['flash']['info'] = "<p style='text-align: center'>Vous êtes maintenant connecté</p>"; if($_POST['remember']){ $remember_token = str_random(250); $pdo->prepare('UPDATE members SET remember_token = ? WHERE id = ?')->execute([$remember_token, $user->id]); setcookie('remember', $user->id . '==' . $remember_token . sha1($user->id . 'ratonlaveurs'), time() + 60 * 60 * 24 * 7); } header('Location: account.php'); exit(); }else{ $_SESSION['flash']['danger'] = "<p style='text-align: center'>Identifiant ou mot de passe incorrecte</p>"; } }

Et quand j'essaie de changer le fetch() en fetchAll() et le $user->password en $user['password']
j'ai ce message d'erreur qui s'affiche
Fatal error: Uncaught Error: Cannot use object of type stdClass as array in C:\MAMP\PHP\OpenClassrooms\Site\membres\app\function\form-signin.php on line 18

J'ai suivi la video de GrafikArt (https://www.youtube.com/watch?v=5vKNKffGmvw)
qui traite de ce sujet mais je n'obtiens pas ma réponse. Quelqu'un pourrait m'aider s'il vous plait ?

2 réponses

Carouge10, il y a 9 ans

Bonsoir,
Avant de vérifier le password de l'utilisateur, il faut vérifier que l'utilisateur existe tout simplement.

if(!empty($user) && password_verify($_POST['password'], $user->password)){
Soulouf, il y a 9 ans

MERCIIIIIII beaucoup !!! ;D