所以我在这里碰到了一堵砖墙,我似乎无法弄清楚我做错了什么。我到处寻找并尝试实施所有答案,但无济于事!我很确定它与SQL数据库的输入有关,但我不确定它是什么。
首先,这是从表单向数据库输入用户密码的代码。我和所有这些相当新,但我知道SQL注入(http://php.net/manual/en/security.database.sql-injection.php),并且正计划在我使用此密码时解决这些问题,现在是4小时之后。这是数据库输入代码:
$user_id = mysqli_real_escape_string($mysqli,$_POST['user_id']);
$getpassword = mysqli_real_escape_string($mysqli,$_POST['password']);
$password = password_hash($getpassword, PASSWORD_DEFAULT);
$sql = "INSERT INTO `members` (`user_id`, `password`) VALUES ('$user_id', '$password')";
$insertRow = mysqli_query($mysqli, $sql);
if($insertRow){
print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'<br />';
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
将其输入数据库没问题。数据库的密码字段是带有utf8_unicode_ci编码的VARCHAR(225)。
在我的登录页面(也是index.php)下面是验证输入密码的代码:
if(isset($_POST['login']))
{
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);
$res=mysqli_query($mysqli, "SELECT * FROM members WHERE user_id= '$username'");
$row=mysqli_fetch_assoc($res);
$hash = $row['password'];
$verified = password_verify($password, $hash);
if($verified)
{
$_SESSION['user'] = $row["user_id"];
echo "Verification succeeded";
} else
{
echo "Verification Failed";
}
}
似乎无论我尝试什么,它总是返回“验证失败”。当我剪切并粘贴已输入数据库的散列密码,并运行像这样的代码
$verified = password_verify($password, '$2y$10$QxFTdQZT7J2LqulNsRUWPO2LxBS5hmS3NeqLtEtQMEhtbIjoj6LNa');
它仍然会返回“Verification Failed”,这让我怀疑这与我放入数据库时发生的事情有关。
我检查了所有这些链接,但似乎我必须做一些完全不同的事情(而且很可能是完全愚蠢和明显的):
php password_hash and password_verify looked all over still doesn't work
php password_verify not working with database
php password_verify not working
http://forums.phpfreaks.com/topic/283407-need-help-with-password-verify/
无论如何,它正在努力,希望有人可以看到我所犯的明显错误。
干杯
答案 0 :(得分:0)
@jbafford谢谢!你完全正确,问题代码在我发送信息的表单中。我从来没有把它拿起来,因为当我回显每个结果以查看代码是否从表单中接收它们时,密码总是显示为哈希实体,所以我觉得一切都很好。这是问题代码:
<input type="password" class="form-control" id="password" required="required" placeholder="Enter Password">
无论出于何种愚蠢的原因,我都会使用&#39; id&#39;而不是&#39; name&#39;。修正了这个
<input type="password" class="form-control" name="password" required="required" placeholder="Enter Password">
一切都很好!感谢大家的帮助,现在我可以继续这件事了!