je suis entrain de suivre le tuto de Gestion d'espace membre en PHP mais j'ai cette erreur là :
Fatal error: Call to a member function fetch() on a non-object
voici mon code
<?php
require 'inc/header.php';
require 'inc/func.php';
require_once 'inc/db.php';
authentified();
reconnect_from_cookie();
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
$q = $db->prepare("SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL");
$q->execute(['username' => $_POST['username']]);
$user = $q->fetch();
if($user){
if(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = "Vous êtes maintenant connecté";
if(isset($_POST['remember'])){
$remember_token = random(250);
$q = $db->prepare("UPDATE users SET remember_token = ? WHERE id = ?");
$q->execute([$remember_token, $user->id]);
setcookie('remember', $user->id. '//' . $remember_token . sha1($user->id . 'digitalalchemist'), time() + 60 * 60 * 24 * 7);
}
//
header('Location: account.php');
exit();
}else{
$_SESSION['flash']['danger'] = "Identifiant ou mot de passe incorrect";
}
}else{
$_SESSION['flash']['danger'] = "Identifiant ou mot de passe incorrect";
}
}
?>
<h1>Se connecter</h1>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 pull-right">
<form action="" method="POST">
<div class="form-group">
<input type="text" name="username" class="form-control" placeholder="Nom d'utilisateur ou Adresse email">
</div>
<div class="form-group">
<input type="password" name="password" class="form-control" placeholder="Mot de passe">
<a href="forget.php">(mot de passe oublier?)</a>
</div>
<div class="form-group">
<input type="checkbox" name="remember">Se souvenir de moi
</div>
<button type="submit" class="btn btn-primary">Se connecter</button>
</form>
</div>
<?php require 'inc/footer.php'; ?>
et voici la fonction reconnect que j'appelle
function reconnect_from_cookie(){
require_once 'db.php';
if(!isset($db)){
global $db;
}
if(isset($_COOKIE['remember']) && !isset($_SESSION['auth'])){
$remember_token = $_COOKIE['remember'];
$parts = explode('//',$remember_token);
$user_id = $parts[0];
$q = $db->prepare("SELECT * FROM users WHERE id = ?")->execute([$user_id]);
$user = $q->fetch();
if($user){
$expected = $user_id. '//' . $user->remember_token . sha1($user_id . 'digitalalchemist');
if($expected == $remember_token){
$_SESSION['auth'] = $user;
setcookie('remember', $remember_token, time() + 60 * 60 * 24);
}else{
setcookie('remember', NULL,-1);
}
}else{
setcookie('remember', NULL,-1);
}
}
}
Merci d'avance
Bonsoir.
Tu devrais remplacer :
$q = $db->prepare("SELECT * FROM users WHERE id = ?")->execute([$user_id]);
Par :
$q = $db->prepare("SELECT * FROM users WHERE id = ?");
$q->execute([$user_id]);
Bonsoir,
Dans la fonction reconnect.... vous executer la requête à la suite du prepare mais utilisez-vous un querybuilder ?