管理员和普通用户登录系统PHP MYSQL


Admin and normal user login system PHP MYSQL

我有一些代码,试图检查用户是管理员还是普通用户,然后将其与SQL表进行比较,以确定打开的页面(管理员页面与普通用户页面)。

if (isset($_POST['submit']))
{
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    $admin = $_POST['admin'];
    if( $user == "" || $pass == "")
    {
        echo '<div id ="errormsg">Please fill in all fields</div>';
    }
    else 
    {
        $query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '$user'
        and password = '$pass' and admin = '$admin' ") or die ("Can't query the database");
        $count = mysqli_num_rows($query);
        if($count == 1) 
        {
            if ($admin == 1)
            {
                $_SESSION['username'] = $user;
                header("location: admin.php");
            }
            else if ($admin == 0)
            {
                $_SESSION['username'] = $user;
                header("location: users.php");
            }
            else
            {
                echo '<div id="errormsg">No matches, try again</div>';
            }
        }
    }
}

没有错误,但是admin值似乎没有什么区别,默认情况下每次都会打开'users.php'。$admin是一个复选框,选中时值为"1",逻辑是根据数据库检查此值。有人能帮助解决这个问题吗?

这是html表单:

<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  <fieldset>
    <label class="login">Username:</label><input type="text" name="user" /><br />
    <label class="login">Password:</label><input type="password" name="pass" /><br />
    <label class="login">Admin?:</label><input type="checkbox" value="1" name="admin" /><br/>
    <input type="submit" name="submit" value="Login" />
  </fieldset>
</form

错误在于如何检查用户是否为管理员:

if ($admin == 1)

替换为:

if (isset($admin))

此外,使用header():后,您需要exitdie

if (isset($admin))
{
    $_SESSION['username'] = $user;
    header("location: admin.php");
    exit;
} else {
    $_SESSION['username'] = $user;
    header("location: users.php");
    exit;
}

首先,您需要了解mysql转义/最佳实践。您的脚本容易受到SQL注入的攻击。网上有很多不错的资源,或者在这里搜索SQL注入PHP,如果不确定的话,可以帮助你解释这一点。

$_POST['admin']值是如何设置的,你能在这里发布一个你的表单示例吗?我猜发送的值与您的上述条件不匹配,所以这可能是原因。

这可能很简单,只需将if语句更改为===而不是==,但为了确保安全,我需要查看表单的源核心。

在数据库查询-中进行一些更正后尝试这个

$query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '".$user."'' and password = '".$pass."''") or die ("Can't query the database"); 

希望它能有所帮助。