Это ваш запрос на выбор:
$select = $db->prepare("SELECT * FROM users WHERE uname = '$uname' AND pass = '$pass'");
$select->setFetchMode(PDO::FETCH_ASSOC);
$select->execute();
$data = $select->fetch();
Что вы сейчас тестируете?
if($data['uname'] != $uname){ ... }
elseif($data['uname'] == $uname AND $data['pass'] != $pass){ ... }
elseif($data['uname'] == $uname AND $data['pass'] == $pass){ ... }
Вы выполняете запрос SELECT
с условием WHERE
для uname = '$uname'
AND pass = '$pass'
, поэтому 2 варианта:
1 / Если у пользователя есть хорошие uname и pass, вы выберете одну строку с помощью $data['uname'] == $uname
AND $data['uname'] == $uname
Итак, вы заполните это условие: $data['uname'] == $uname AND $data['pass'] == $pass)
2 / Если $data['uname'] != $uname
ИЛИ $data['uname'] != $uname
, вы просто ничего не выберете в $data
Таким образом, вы будете выполнять первое условие: $data['uname'] != $uname
независимо от того, что
РЕДАКТИРОВАТЬ: Я добавлю несколько хороших предложений, которые люди также дают вам в комментарии
- Вы должны использовать подготовленное заявление (по предложению Qirel, Dimitris Filippou)
- Вы должны хешировать свой пароль (как подсказал Димитрис Филиппоу)
- Если pass или uname неверны, вы не должны говорить, какой из них неправильный, потому что в этом случае люди могут найти, существует ли один пользователь или нет (как предложено Магнусом Эрикссоном)