首页 > 解决方案 > PHP不检查用户是否存在并直接发送到个人资料页面

问题描述

我正在创建一个登录页面,但是当我登录时,似乎用户/密码的存在尚未完成,将任何输入发送到个人资料页面。

我正在使用 PHP 和 MySQL。我试图重做表格,我检查了我所有的代码,它似乎是按照我的意愿编写的。

我对 PHP 和 MySQL 还很陌生,所以我可能会遗漏一些东西。

这是表单代码:

<form style="margin-top:40px;" action="includes/login.inc.php" method="post">
                <div class="form-group mb-3">
                <div class="input-group input-group-alternative">
                <div class="input-group-prepend">
                  <span class="input-group-text"><i class="ni ni-circle-08"></i></span>
                </div>
               <input class="form-control" id="name" name="username" placeholder="Utilizador" type="text">
             </div>
             </div>
             <div class="form-group">
             <div class="input-group input-group-alternative">
             <div class="input-group-prepend">
               <span class="input-group-text"><i class="ni ni-lock-circle-open"></i></span>
             </div>
               <input class="form-control" id="password" name="password" placeholder="Password" type="password">
             </div>
             </div>
             <div class="custom-control custom-control-alternative custom-checkbox">
             <div class="text-center">
               <input class="btn btn-primary my-4" name="submit" type="submit" value=" Login ">
              </form>

这是 login.inc.php 代码:

<?php

  include_once 'db.inc.php';

    session_start();
    $error = '';
    if (isset($_POST['submit'])) {
      if (empty($_POST['username']) || empty($_POST['password'])) {
        $error = "Username or Password is invalid";
      }
      else{

        $username = $_POST['username'];
        $password = $_POST['password'];

        $query = "SELECT username, password FROM users where username=? AND password=? LIMIT 1";

        $stmt = $conn->prepare($query);
        $stmt->bind_param("ss", $username, $password);
        $stmt->execute();
        $stmt->bind_result($username, $password);
        $stmt->store_result();
        if($stmt->fetch())
          $_SESSION['login_user'] = $username;
        header("location: ../profile.php");
      }
      mysqli_close($conn);  
    }
?>

我输入的任何内容,即使它不在user数据库中,也会被重定向到profile.php页面。

标签: phpmysql

解决方案


如果所有其他代码都很好,您可以尝试替换您的 if 条件

if($stmt->fetch()){
  $_SESSION['login_user'] = $username;
  header("location: ../profile.php");
}

推荐阅读