J'ai une colonne mysql nommée "bannie" avec la valeur de 0 si elles ne sont pas, et une valeur de 1 si elles sont, ce qui est dans la table "utilisateurs". Actuellement, ce code donne une erreur "combinaison nom d'utilisateur/mot de passe incorrect!" si une personne est interdite mais je ne peux pas comprendre comment obtenir de dire « vous interdit » si la valeur de « interdite » est 1.Système de connexion, utilisateur interdit php
<?php
if(isset($_POST['submit'])){
session_start();
// configuration
$dbhost = "localhost";
$dbname = "login";
$dbuser = ".";
$dbpass = ".";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec("SET CHARACTER SET utf8mb4");
// new data
$username = !empty($_POST['username']) ? trim($_POST['username']) : null;
$passwordAttempt = !empty($_POST['password']) ? trim($_POST['password']) : null;
// query
$result = "SELECT id, username, password, banned FROM users WHERE username= :username AND banned = '0'";
$stmt = $conn->prepare($result);
$stmt->bindValue(':username', $username);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false){
//Could not find a user with that username!
//PS: You might want to handle this error in a more user-friendly manner!
$error = "Incorrect username/password combination!";
} else{
//User account found. Check to see if the given password matches the
//password hash that we stored in our users table.
//Compare the passwords.
$validPassword = password_verify($passwordAttempt, $user['password']);
//If $validPassword is TRUE, the login has been successful.
if($validPassword){
$_SESSION['login_user'] = $username;
header("location: home.php");
exit;
} else{
$error = "Incorrect username/password combination!";
}
}
}
?>
Il est généralement une bonne idée d'éliminer des choses comme ' === false' et inverser cela pour être 'if ($ user)' et inverser l'ordre des blocs. – tadman