我正在尝试验证 mysql 中表上的哈希密码,但它不起作用。
这是我的表格:
<form action="index.php" method="post" id="form_index">
<div class="email">
<label for="email">Email</label>
<input type="email" onkeyup="onKeyup()" onblur="onBlur()" id="email" name="email" placeholder="Akun Email" />
</div>
<div class="password">
<label for="password">Password</label>
<input type="password" id="password" onkeyup="onKeyup()" onblur="onBlur()" name="password" placeholder="Kata Sandi" />
</div>
<div class="submit_btn">
<button type="submit" name="submit" id="submit">Masuk</button>
</div>
</form>
和我的 php:
if (isset($_POST["submit"])) {
$email = $_POST["email"];
$userPass = $_POST['password'];
$sql = "SELECT * FROM tb_kandidat WHERE email = '$email'";
$result = mysqli_query($conn, $sql);
$user = mysqli_fetch_array($result, MYSQLI_ASSOC);
if ($user) {
if (password_verify($userPass, $user['password'])) {
echo "success";
}
} else {
echo "fail";
}
}
这是我的桌子:
我的输出总是回响
fail
。
您面临的问题可能与您检索和比较密码的方式有关。以下是一些常见问题以及解决方法:
1。检查密码哈希:
确保在将密码插入数据库时使用
password_hash()
对密码进行哈希处理。例如:
$hashedPassword = password_hash($userPass, PASSWORD_DEFAULT);
// Insert $hashedPassword into the database
2。修剪输入:
有时额外的空格可能会导致问题。您可以在查询数据库之前修剪输入值。
$email = trim($_POST["email"]);
$userPass = trim($_POST['password']);
3.数据库连接:
使用前请确保您的数据库连接
($conn)
已正确建立。
4。检查是否有错误:
始终检查数据库查询错误。您可以在代码中添加错误处理,以查看 SQL 查询是否存在任何问题。
$result = mysqli_query($conn, $sql);
if (!$result) {
die('Query Error: ' . mysqli_error($conn));
}
5。使用准备好的语句:
以下是如何使用准备好的语句的修改示例:
if(isset($_POST["submit"])){
$email = trim($_POST["email"]);
$userPass = trim($_POST['password']);
$sql = "SELECT * FROM tb_kandidat WHERE email = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$user = mysqli_fetch_array($result, MYSQLI_ASSOC);
if($user) {
if(password_verify($userPass, $user['password'])){
echo "success";
} else {
echo "fail";
}
} else {
echo "fail";
}
}
使用准备好的语句更安全,也有助于防止 SQL 注入。确保也验证和清理您的用户输入。