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
Réponse acceptée

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
Auteur

MERCIIIIIII beaucoup !!! ;D