【发布时间】:2018-11-06 10:48:54
【问题描述】:
编辑:我猜星星只是失去了对齐,因为在重新加载页面并尝试再次使用它之后它可以工作。
我正在使用用户帐户创建一个简单的管理系统。我很难使用登录位,因为由于某种原因password_verify 在 if 语句中会失败。这可能与我从数据库中获取密码的方法有关,但我不确定。
这就是不工作的地方
$query = $db->query("SELECT * FROM users WHERE `username` = '" . $db->real_escape_string($_POST['username']) . "';");
if (!$query or $query == NULL)
{
echo $db->error . "<br>";
exit("EXIT: database error");
}
while ($row = $query->fetch_assoc())
{
if (password_verify($_POST['password'], $row['password']))
{
$db->close();
header("LOCATION: main.php");
exit;
}
else
{
header("LOCATION: index.php?error=Wrong password.");
exit("wrong password<br>");
}
}
如果我将if (password_verify($_POST['password'], $row['password'])) 替换为
$success = password_verify($_POST['password'], $row['password']);
if ($success)
// success
它按预期工作。我做($row = $query->fetch_assoc()) 有什么问题吗,还是我在其他地方犯了错误?我不明白为什么它在 IF 语句中不起作用。我确定我只是做了一些愚蠢的事情,但我终生无法弄清楚是什么。
使用后一种方法进行密码验证对我来说会是坏事还是被认为不好?
【问题讨论】:
-
你的行
$success = password_v缺少一个关闭) -
旁注: 在这一行。
if (!$query or $query == NULL),不需要or部分。只要有if (!$query)就足够了,因为它也可以覆盖null(这是假的)。 -
@MagnusEriksson 我想过这个,但我不确定,而且它在代码库中无处不在(非常旧)所以我还不想删除它。
-
在
if语句中使用password_verify()或将结果存储在变量中并进行检查没有区别。如果您发现了差异,则一定有其他错误,例如您传递了错误的密码或类似情况。