Php 密码验证是否始终返回假值?

Php 密码验证是否始终返回假值?,php,Php,我目前正在尝试为我的网站建立一个登录页面,这是我大学课程的一部分。我可以在网站上用哈希密码创建一个帐户。哈希密码显示为: $2y$10$c17e2YWOPrzZy8RNLZo9Yejm0vHebwhdkD7tyzBgMcIiu6zO5XVn2 我搜索了一些解决方案,比如检查散列密码是否为60个字符,以及其他未成功的解决方案。我还询问了另外两位大学讲师和同学,但他们都没有提供帮助 我的代码是: <?php $username = $_POST["username"]; $

我目前正在尝试为我的网站建立一个登录页面,这是我大学课程的一部分。我可以在网站上用哈希密码创建一个帐户。哈希密码显示为:

$2y$10$c17e2YWOPrzZy8RNLZo9Yejm0vHebwhdkD7tyzBgMcIiu6zO5XVn2
我搜索了一些解决方案,比如检查散列密码是否为60个字符,以及其他未成功的解决方案。我还询问了另外两位大学讲师和同学,但他们都没有提供帮助

我的代码是:

<?php

    $username = $_POST["username"];
    $password = $_POST["password"];
    echo $username;
    echo " "; 
    echo $password;
    echo " "; 

    $sql = "SELECT userno, email, password FROM Users WHERE username = '$username';";
    $result = $conn->query($sql);
    echo $sql;
    if ($result->num_rows == 1){
        $row = $result->fetch_assoc();
        if (password_verify( $password, $row["password"]))
        {
            echo "<br/> Welcome back to Ryan's Review Website!";
            echo "<br/> You have succsesfuly logged in!";

            $_SESSION["loggedin"] = true;
            $_SESSION["userno"] = $row['userno'];
        }
        else {
            echo "<br/>Sorry, It seems that either you do not have an account or you have mistyped your username and/or password";
            echo "<br/><a href='Sign In.html'>Click Here</a> to try again!";
            echo "<br/><a href='Register.html'>Click Here</a> if you do not have an account!";
        }
    }
    $conn->close();

?>

在以下行中保存密码哈希时出现错误:

$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';    
$hash = password_hash( $password, PASSWORD_BCRYPT );
在这里,您实际上尝试散列数组
$password
,这将抛出一个

警告:参数1应为字符串,数组给定

根据您的设置,您可能看不到此警告(以及以下警告)并在数据库中存储错误内容

所以改变

$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';


你对SQL注入开放-你应该修复:)你使用了哪种数据类型作为密码?当你存储密码时,你是否使用了
password\u hash()
?请同时显示你是如何存储密码的。我想你忘了从Post中散列密码谢谢,这个问题困扰了我很久了。这个问题出现在我的注册页面上,而不是我的登录页面上,这解释了为什么它这么长时间都没有被注意到。至于这个警告,我从来没有看到过,但记下来以后参考肯定是好的。
$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';
$password = isset($_POST['password1']) ? $_POST['password1'] : '';