【发布时间】:2021-07-11 11:19:01
【问题描述】:
当我开始自己的工作时,我正在整理一个轻量级的应用程序,但我有点困惑。
我已将密码的数据库列设置为 255,并使用 password_hash 函数获取我插入的哈希。
但现在以下总是返回 false;
if (isset($_POST[submit])) {
$link = mysqli_init();
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
if ($conn->connect_error) {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
$username = $_POST['username'];
$password = $_POST['password'];
$query = $mysqli->prepare("SELECT * FROM `admins` WHERE `username` = (?)");
$query->bind_param('s', $username);
echo $mysqli->error;
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
print_r($result);
if (!$result) {
echo '<p class="error">Username password combination is wrong!</p>';
} else {
if (password_verify($password, $result['password'])) {
$_SESSION['user_id'] = $result['id'];
header('Location: results.php');
} else {
echo '<p class="error">Username password combination is wrong!</p>';
}
}
}
它只是一个小的登录表单、一个用户名、一个密码字段和一个提交按钮,但无论我尝试什么,这里的每个解决方案似乎都提到列长度为 60,应该是 255,我的就是。任何帮助将不胜感激。
编辑;更新了 sn-p 以显示更多...结果未打印,这意味着它没有从我所知道的中得到任何信息?
【问题讨论】:
-
先检查最基本的步骤:
$password输入的密码是否不变,是否正确? -
你检查过
$result['password']是什么吗?你能告诉我们你的password_hash实现吗? -
您正在将密码绑定到 where 子句,但您正在寻找用户名,请将
$password绑定改为$username。 -
但更好的是,通过告诉 mysqli 正确抛出异常来避免所有用于错误检查的笨拙 if 语句。 (显然,这需要您在 PHP 中启用错误日志。)如果您需要帮助设置这些内容,请参阅这些指南:stackify.com/php-error-logs-guide(php 错误日志/报告)stackoverflow.com/a/22662582/5947043(mysqli 异常报告)
-
感谢旁白,这对我来说是全新的,所以我将它们拼凑在一起,英语也不是母语,所以谢谢你的澄清。
标签: php sql password-hash