从数据库php检查密码

de90aj5v  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(339)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

两年前关门了。
改进这个问题
我试图通过检查用户名和密码是否正确,从表users中获取特定行的一些数据。我不明白为什么它不起作用!!
编辑:我插入整个页面的代码。我使用表单是因为我在同一个表单中有注册按钮和登录按钮。我正在检查用户按下哪一个然后执行操作。

$host = "xx";
$user = "xx";
$pass= "xx";
$dbname = "xx";
$conn = new mysqli($host,$user,$pass, $dbname );

if ($conn->connect_error) {
    die("Connection failed : ".$conn->connect_error); //fixme
}

if ( isset($_POST['login'])  ) {

    if ($_POST["actionb"] == 'Login') {

        $username = isset($_POST["username"]) ? $conn->real_escape_string($_POST["username"]) : "";
        $password = isset($_POST["password"]) ? $conn->real_escape_string($_POST["password"]) : "";

        echo $username;
        echo $password;
        $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
        $results=$conn->query($query);

        if (mysqli_num_rows($results) > 0 ) {
            $_SESSION['username'] = $username;
            if ($results->num_rows > 0) {
                // output data of each row
                while ($row = $results->fetch_assoc()) {
                    $email = $row["email"];
                    $postalcode = $row["postalcode"];
                    $phonenumber = $row["phonenumber"];
                }
            }
            $_SESSION['postalcode'] = $postalcode;
            $_SESSION['phonenumber'] = $phonenumber;
            $_SESSION['email'] = $email;
            echo "You are now logged in";
            header('location: confirm.php');
        } else {
            //echo "Wrong username/password combination";
        }
    }
}
?>

<html>
    <style type ="text/css">
        ...
    </style>

<body>

<form action="" method="post">
    <div class="header">
        <h1>For existing users</h1>
    </div>

    <input type="hidden" name="actionb" value="Login" >

    <label for="username"><b>Username</b></label>
    <input type="text" placeholder="Enter username" name="username" required>

    <label for="password"><b>Repeat Password</b></label>
    <input type="password" placeholder="Repeat Password" name="password2" required>

    <div class="clearfix">
        <button type="submit" name="login" value="Login">Login</button>
    </div>

</form>
</body>
</html>
wswtfjt7

wswtfjt71#

第一:就像@idontdownpoite说的,你应该总是(!)在将密码存储到数据库之前对其进行哈希/加密(请参阅php.net/manual/en/book.password.php)。一次黑客攻击,你所有的用户都会因为你不这么做而恨你
第二:会不会是你退后了不止一排(根据你的推测 if ($results->num_rows > 0) { 因为您检查 ==1 ,可能会更改为 >0 .
第三:检查 mysqli_query() 呼叫已成功,已将其添加到您的 if 对账单 $results && mysqli_num_rows(..etc.. 第四:密码实际上是作为 $_POST['password2'] 第五:(正如@funkfortyniner正确指出的)使用 header() 因为重定向必须是输出到浏览器的第一件事(所以 echo ,然后是 exit(); 阻止其他事情发生 echo -在那之后再重新编译(这在php中也是无效的)。
第六:(正如@funkfortyniner所指出的)在开发过程中,总是使用 error_reporting(E_ALL | E_STRICT | E_NOTICE); 以及 ini_set('display_errors', 1); 在你的顶端。这样,所有错误、警告等都会显式地显示在浏览器中,因此您可以调试/清除/修复。

相关问题