Как проверить, что пользователь существует?
У меня есть код:
function issetUser($usrnm, $psswrd, $pdo){
try{
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `username`=? AND `password`=?");
$stmt->execute([$usrnm, $psswrd]);
$user = $stmt->fetch();
var_dump($user);
}catch(PDOException $e){
print "Error! : ".$e->getMessage()."<br/>";
die();
}
}
Ета функция для логина которая проверяет существует ли такой юзер. Вопрос, как сделть так чтоб функция вернула положительный результат, если юзер существует, и отрицательный если нету?
Ответы (1 шт):
Здесь на самом деле два вопроса в одном.
В принципе, чтобы проверить существование пользователя с таким логином, функция уже делает то что надо, из неё надо просто убрать всё лишнее и добавить оператор return
function getUserByName($usrname, $pdo){
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `username`=?");
$stmt->execute([$usrname]);
return $stmt->fetch();
}
Эта функция будет возвращать либо массив, если пользователь с таким именем существует, либо false.
В РНР нестрогая типизация и массив всегда можно использовать в условном операторе
$user = getUserByName($usrname, $pdo);
if ($user) {
echo "exists";
} else {
echo "not exists";
}
Теперь отвечу на второй вопрос, как узнать, правильно ли введены логин и пароль.
Но для этого надо сначала вспомнить что пароли нельзя хранить в открытом виде, а только в хэшированном. То есть при занесении пользователя в БД необходимо обарбатывать пароль функцией password_hash()
Поэтому для проверки пароля мы будем использовать функцию password_verify() а хэш пароля для сравнения получим из БД с помощью функции getUserByName():
$user = getUserByName($usrname, $pdo);
if ($user && password_verify($password, $user['password'])) {
echo "Логин и пароль введены правильно!";
}