Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 密码\u验证返回错误的帐户详细信息_Php_Sql_Security_Passwords - Fatal编程技术网

Php 密码\u验证返回错误的帐户详细信息

Php 密码\u验证返回错误的帐户详细信息,php,sql,security,passwords,Php,Sql,Security,Passwords,My password_verify()总是提供错误的帐户详细信息,但这些详细信息是正确的。 我的片段: include('Application/Bootstrap.php'); if(isset($_SESSION['username'])) { header('location: '.$config['website']['url'].'/me'); // Use this if the user HAS to login. } if (isset($_P

My password_verify()总是提供错误的帐户详细信息,但这些详细信息是正确的。 我的片段:

    include('Application/Bootstrap.php'); 
    if(isset($_SESSION['username'])) {
    header('location: '.$config['website']['url'].'/me'); // Use this if the user HAS to login.
    }
if (isset($_POST['submit'])) {
       $username = $db->real_escape_string($_POST['username']);
        $password = $db->real_escape_string($_POST['password']);

    if (!$_POST['username'] || !$_POST['password']) {
        echo 'Je moet een gebruikersnaam en wachtwoord invullen om in te loggen.';
    }
    else {

        $check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
        $row=mysqli_fetch_assoc($check);

                 if (password_verify($password, $row['password'])) { //I try $password AND $_POST['password']
                 $_SESSION['username'] = $_POST['username'];
                header("Location: /me");
                exit;                   
            } 
            else {
                // ALS HET NIET KLOPT!!!!
                echo 'Je gegevens kloppen niet.';               }
        }
    }
有人能帮我吗?我已经搜索了整个互联网。但是我找不到它。我的数据库列varcher增加到255。如果你问我的登记簿是错的,那不是。片段:

$db->query("INSERT INTO users
            (username,password,mail,auth_ticket,motto,ip_reg)
            VALUES ('$username', '".password_hash($pw, PASSWORD_BCRYPT, $options)."', '$mail', '$ticket', '$motto', '$ip')") or die($db->error);
费用是10英镑


我希望有人能帮助我。

您在SQL查询中第一次检查密码时,检查了两次密码:

$check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
                                                                         |< remove this part          >|

您正在存储散列密码,但请尝试将列
和password='“$password.”
与普通密码匹配。您只需使用
$check=$db->query(“从username='“$username.”的用户中选择密码);
用于密码查询;但是为什么不使用绑定变量进行数据库查询呢?您还应该检查数据库查询是否实际返回了一个结果,即如果$row实际上是一个有效的结果,而不是false,那么我现在错了什么?@user3902511-错误是什么?是否检查了row变量
v的内容ar_dump($row)
?您可以打开错误报告来查找其他问题,将此行放在文件
错误报告(E_ALL);
的开头。如果我执行var_dump($row);I get:NULL Je gegevens kloppen niet.@user3902511-如果执行查询后,
$row
为NULL,则数据库找不到与查询匹配的任何行。我用准备好的语句编写了一个示例(没有错误处理),请注意引号“”或调用real_escape_string()没有必要这样做。请确保
$\u POST['password']
确实包含输入值,可能您的HTML包含具有不同名称的字段。
$stmt = $db->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $_POST['username']);

$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
...
if (password_verify($_POST['password'], $row['password']))
{
  ...
}
$result->close();