Я пытаюсь создать базовую форму входа, которая проверит вход пользователя в базу данных и ответит соответствующим образом.Вход PHP, возвращающий false с правильным именем пользователя?
Вот главное, если заявление:
if (isset($_POST['email'])) { //sets $email and $pw to what the user types
$email = $_POST['email'];
$pw = $_POST['pw'];
$user_ID = login($db, $email, $pw);
if ($user_ID) {
$id = $user_ID->user_ID;
echo "<p>$id Login success!</p>";
header("Location: index.php?page=profile&id=$id");
die();
}else {
echo "<p>Login Failed</p>";
echo $email;
echo $pw;
echo $user_ID;
}
}
и функция:
function login($db,$email, $pw) {
$inc_pw = md5($pw);
$sql = "SELECT user_ID FROM profile WHERE email = '$email' AND pw = '$inc_pw'";
$result = $db->query($sql);
return $result->fetchObject();
}
В настоящее время он всегда возвращает ложь, и для этого Войти не удалось. Насколько я могу судить, это не правильно сравнивает электронную почту и pw с тем, что находится в базе данных, но я не уверен, как ее исправить.
Заранее спасибо за помощь :)
Вы проверили 'echo $ sql'? –
Обратите внимание, что использование md5hash для хранения паролей считается небезопасным. – arkascha
Прочитайте [Как я могу предотвратить SQL-инъекцию в PHP] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) и начать учиться использовать 'готово()/execute() 'в соответствии с вашим выбранным API баз данных. У вас есть уязвимость в SQL-инъекциях здесь, в '$ email', которая позволила бы любому войти в систему с любым паролем или без пароля. –