繁体   English   中英

管理员和普通用户登录系统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"); 

希望它会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM