编辑:我猜星星刚刚失去对齐,因为在重新加载页面并尝试再次使用它之后就可以了。
我正在创建一个包含用户帐户的简单管理系统。我在登录位上遇到了困难,因为出于某种原因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声明中起作用。我敢肯定我只做了一些愚蠢的事,但我不能为我的生活找到什么。
使用后一种方法进行密码验证会不好或者对我不好?
答案 0 :(得分:-1)
我似乎在这里解决了问题:
if (!empty($_POST['password']))
{
while ($row = $query->fetch_assoc())
{
if (password_verify($_POST['password'], $row['password']))
{
$db->close();
header("LOCATION: main.php");
exit("EXIT: Logged in successfully.");
}
else
{
header("LOCATION: index.php?error=Wrong password.");
exit("EXIT: Wrong password");
}
}
}
我不认为这是问题的实际代码,而是我的数据库。我不知道它是否与它有任何关系,但phpmyadmin显示所有行的重复项。我使用SQL(今天)仍然很新,所以我不知道这是否正常。也许我只是需要花时间更新表格?谁知道呢。
答案 1 :(得分:-2)
确保清理您的输入,从不只使用$_POST['password']
,但请改用sanitize filter。
对我来说,你的第一个代码块工作得很好,而你的第二个代码块有不匹配的括号。