Bonjour à tout le monde,
Je suis la tuto de la gestion membre et voilà que j'arrive avec un problème, qui d'après moi vient d'un paramètre qui manque.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\login\login.php on line 11
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\login\login.php on line 11
Voilà mon code dans login.php;
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_start();
$_SESSION['auth'] = $user;
$_SESSION['flash']['sucess'] = '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 . 'raton-laveurs'), time() + 60 * 60 * 24 * 7);
header('Location: account.php');
exit();
}
}else{
$_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrect';
}
}
Alors ici, je me demande comment je dois modifier mon code pour que le la page fonctionne. Merci d'avance.
Salut,
Vérifie ton code tu as mis les ":" sur email
et non username
, du coup, comme c'est indiqué dans le message d'erreur (souvent c'est bien de les lire), il y a une différence de nombre entre les variables définies et celle à définir.
Donc :
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
Bonjour
Dans
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR :email = username) AND confirmed_at IS NOT NULL');
$req->execute(['username' => $_POST['username']]);
Tu n'exécute qu'avec le username, tu as oublié la variable email.
Bonne journée,
Gaspard.