Может ли кто-нибудь направить меня, где я ошибаюсь. Хеширование паролей работает нормально и хранится в моей базе данных, но когда я пытаюсь войти в систему, используя настоящий пароль, например (123), он не регистрирует меня. Спасибо!password_hash() не работает
<?php
// registration script
if (isset($_POST['submit'])) {
$user_name = $_POST['username'];
$user_email = $_POST['email'];
$user_pass = $_POST['password'];
$query = "SELECT * FROM users where Email = '" . $_POST["email"] . "'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) == 0) {
$query = "INSERT INTO users (Name, Email, Pass) VALUES('" . $user_name . "', '" . $user_email . "', '" . password_hash($user_pass, PASSWORD_DEFAULT) . "')";
$result = $obj->run_query($query);
echo "<script>alert('You have successfully Registered!')</script>";
echo "<script>window.open('welcome.php','_self')</script>";
} else {
echo "<script>alert('This user email $user_email is already exist!')</script>";
}
}
// login script
if (isset($_POST['login'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$password = password_hash($_POST['pass'], PASSWORD_DEFAULT);
$query = "SELECT * FROM users WHERE Email = '$email' AND Pass = '$password'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) > 0) {
$_SESSION['email'] = $email;
$_SESSION['name'] = $name;
echo "<script>window.open('welcome.php','_self')</script>";
} else
{
echo "<script>alert('Your email or password is incorrect!')</script>";
}
}
?>
Там нет упоминания о 'password_hash()' где-нибудь в вашем коде и говорить somethng является " давая ошибки ", не сообщая нам, что ошибки бесполезны. Также читайте об атаках SQL Injection и предотвратите их. – PeeHaa
Функция [password_verify()] (http://www.php.net/manual/en/function.password-verify.php) используется для сравнения пароля открытого текста пользователя с сохраненным хешированным паролем точно так же, как и описанных в Документах PHP ..... вы не используете хэш-код пользователя и не сравниваете хэши, которые просто не могут работать как password_hash(), уникально солевое значение каждый раз, когда оно вызывается –
Так что ваш код проверки входа должен быть извлечен запись из таблицы 'users', используя только адрес электронной почты, а затем используя пароль_верие, чтобы сравнить введенный пользователем пароль с хэшем пароля, полученным этим SQL-запросом –