Bonjour j'ai telechargé le tuto sur la gestion d'un espace membre je commence a peine a coder en php. j'ai cette erreur lorsque que j'essaye de tester le login avec un faux mot de passe: Notice: Trying to get property of non-object in...\ login.php on line 13.
Merci d'avance!

15 réponses


maxslayer44
Réponse acceptée

De rien, pense à marquer ton sujet comme résolu :)

Salut, il va nous falloir du code sinon on ne va pas faire grand chose. :)

As-tu créé la base de données ?
As tu modifié les fichier de config pour pointer vers la bdd ?
La connection à la bdd se fait bien ?

Hello,

Ta variable $user n'est pas du type objet.

$req->fetch(PDO::FETCH_OBJ);

madmax9922
Pour que ton code soit plus facilement lisible tu pourrais lui appliquer l'affichage "Code".

En cliquant sur le bouton </> dans la barre de l'éditeur.

Car comme ça ton code peut être difficile à lire.

require_once 'inc/functions.php';
reconnect_from_cookie();
if(isset($_SESSION['auth'])){
    header('Location: account.php');
    exit();
}
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
    require_once 'inc/db.php';
    $req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
    $req->execute(['username' => $_POST['username']]);
    $user = $req->fetch();
    if(password_verify($_POST['password'], $user->password)){
        $_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
if($_POST['remember']){
    $remember_token = str_random(250);
    $pdo->prepare('UPDATE users 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'] = 'Identifiant ou mot de passe incorrecte';
    }
}
?>

Il faut que tu ajoutes

PDO::FETCH_OBJ

à ton fetch() :)

Salut! je viens de l<essayer et j<ai toujours le meme resultat.
avant:

$user = $req->fetch();

apres:

$user = $req->fetch(PDO::FETCH_OBJ);

que obtenus tu si du fais un die de var dump de $user ?

die ('<pre>'.var_dump($user,true).'</pre>');

Ca ne change pas grand chose j'obtiens toujours: Notice: Trying to get property of non-object .../login.php on line 15.

Tu l'a mis ou dans ton code ? essayé de le mettre juste après le fetch

en mettant le var_dump apres mon fetch, j'ai ca comme resultat sur une page blanche: bool(false) bool(true)

j'ai essayé avec un usager deja enregisté et ca fonctionne. lorsque j'essaye avec un nouvel usager non inscrit j'obtient la meme erreur:
Trying to get property of non-object .../login.php on line 13.

Bonsoir,

Tente de remplacer ta condition par

if($user != false && password_verify($_POST['password'], $user->password))

EDIT: j'ai remplacé null par false après consultation de la doc

Merci! c'est tres apprecié ca fonctionne nickel :)