我想这个标题非常自我解释。我在login.php中使用了password_hash函数。当我查看数据库时,我看到密码没有哈希。这是正确的还是我做错了什么?这是我的一段代码(safe_post_value是我自己的函数来转义字符串):
<?php
session_start();
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$safe_username = safe_post_value($username);
$safe_password = safe_post_value($password);
$hashed_password = password_hash($safe_password, PASSWORD_DEFAULT);
$verified_password = password_verify($password, $hashed_password);
$query = "SELECT * FROM `members` WHERE '$safe_username' = `username`";
$result = mysqli_query($connection, $query);
if ($result = mysqli_query($connection, $query)) {
if ($verified_password){
while ($row = mysqli_fetch_assoc($result)) {
printf("%s, %s\n", $row['username'], $row['password']);
}
}
} else {
$message = "error";
echo $message;
}
mysqli_free_result($result);
}
?>
<form action="login.php" method="POST">
<input type="text" name="username" placeholder="gebruikersnaam">
<input type="password" name="password" placeholder="wachtwoord">
<input type="submit" name="submit" value="verstuur">
</form>
因此,要明确:此代码正常运行,但我只是想知道密码是否在数据库中没有散列是正常的。
答案 0 :(得分:-1)
您不需要
$hashed_password = password_hash($safe_password, PASSWORD_DEFAULT);
$verified_password = password_verify($password, $hashed_password);
你从$ password生成$ safe_password,所以它肯定是一样的。 您的查询必须像
$query = "SELECT * FROM members WHERE username = ".$safe_username." and password = ".$safe_password"