Php 使用密码\u hash()和密码\u verify()时出现问题

Php 使用密码\u hash()和密码\u verify()时出现问题,php,mysql,Php,Mysql,所以我的头撞在了砖墙上,我似乎不知道我做错了什么。我到处寻找,试图实现所有的答案,但没有结果!我很确定它与SQL数据库的输入有关,但我不确定它是什么 首先,下面是将表单中的用户密码输入数据库的代码。我对这一切都很陌生,但我知道SQL注入(),并计划在密码生效时弄明白这一点,现在4个小时后。以下是数据库输入代码: $user_id = mysqli_real_escape_string($mysqli,$_POST['user_id']); $getpassword = mysqli_real_e

所以我的头撞在了砖墙上,我似乎不知道我做错了什么。我到处寻找,试图实现所有的答案,但没有结果!我很确定它与SQL数据库的输入有关,但我不确定它是什么

首先,下面是将表单中的用户密码输入数据库的代码。我对这一切都很陌生,但我知道SQL注入(),并计划在密码生效时弄明白这一点,现在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);
}
似乎无论我尝试什么,它总是返回“验证失败”。当我剪切并粘贴已输入数据库的哈希密码,并像这样运行代码时

$verified = password_verify($password, '$2y$10$QxFTdQZT7J2LqulNsRUWPO2LxBS5hmS3NeqLtEtQMEhtbIjoj6LNa'); 
它仍然返回“验证失败”,这让我怀疑这与我输入数据库时发生的事情有关

我检查了所有这些链接,但似乎我做了一些完全不同的事情(很可能是完全愚蠢和明显的):

无论如何,这让我头疼,希望有人能看到我犯了什么(可能)明显的错误


干杯谢谢!你完全正确,问题代码就在我发送信息的表格中。我只是从来没有拿起它,因为当我回显每个结果以查看代码是否从表单接收到它们时,密码总是显示为散列实体,所以我认为一切都很好。问题代码如下:

<input type="password" class="form-control" id="password" required="required" placeholder="Enter Password">

不管出于什么愚蠢的原因,我用“id”代替“name”。修正了这个

<input type="password" class="form-control" name="password" required="required" placeholder="Enter Password">


一切都很好!谢谢大家的帮助,现在我可以继续做这件事了

在将密码传递给
password\u hash()
password\u verify()之前,您可能不想
mysqli\u real\u escape\u string()
密码。(这是
password_hash()
你想要逃逸的结果,因为这是数据库中实际要做的。)你能对“password”进行散列并发布输出吗。@马特这里是“password”散列
$2y$10$7Z1JIXJDNSBA7UPMKF5RIE000XSNCIRFYOUFMHIQGICCM9E5M,很有趣,我在几个测试用户上使用了相同的密码,输出总是会更改,但我认为这应该会发生?@jbforted Good pick,我更改了代码以反映这一点,但结果没有更改:
$getpassword=$\u POST['password']$passwordNotEscaped=password\u散列($getpassword,password\u默认值)$password=mysqli\u real\u escape\u字符串($mysqli,$passwordNotEscaped)实际上是空字符串的散列,因此您似乎没有正确地从用户处获取密码。(
密码验证(“,$2y$10$7Z1JIXJDNSBA7UPMKF5RIE000XSNCIRFGYOUZMHIXIQGICCM9E5M”)==true
<input type="password" class="form-control" name="password" required="required" placeholder="Enter Password">