登录PHP页面时遇到麻烦

Ser*_*rus 1 php mysql forms select

我在数据库表中创建了一个名为"permissions"的列,其值为1表示管理员,2表示常规用户.问题是每当我与普通用户登录时,它都会将我重定向到管理员页面.

<?php
$con=mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('user_registration') or die("cannot select DB");


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

    if(!empty($_POST['user']) && !empty($_POST['pass'])) {

        $user = strip_tags($_POST['user']);
        $pass = strip_tags($_POST['pass']);


        $query=mysql_query("SELECT * FROM users WHERE username='".$user."' AND password='".$pass."'");
        $numrows=mysql_num_rows($query);

        $permissions= "SELECT username FROM users WHERE permissions = '1'";
        $result=mysql_query($permissions);


            if($numrows!=0) {
                while($row=mysql_fetch_assoc($query)) {
                    $dbusername=$row['username'];
                    $dbpassword=$row['password'];
                }

                if($user == $dbusername && $pass == $dbpassword) {
                    session_start();
                    $_SESSION['sess_user']=$user;
                        if (mysql_num_rows($result) == 1 ) {
                            header("Location: fullDB.php");
                        } else { 
                            header("Location: member.php");
                        }
                }

            } else {
                echo "Invalid username or password!";
            }

    } else {
        echo "All fields are required!";
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 6

您将所有用户设为管理员,因为您正在执行完全错误的管理员检查:

    $permissions= "SELECT username FROM users WHERE permissions = '1'";
Run Code Online (Sandbox Code Playgroud)

此查询不是"此用户是否为管理员".它是"数据库中是否有管理员用户".如果您至少有一个管理员用户,则所有用户将被视为管理员.

由于您已经使用第一个查询获取了用户详细信息,因此第二个查询完全是多余的:

$query=mysql_query("SELECT * FROM users WHERE username='".$user."' AND password='".$pass."'");

$row = mysql_fetch_assoc($query);
if ($row['permissions'] == 1) { 
  ... admin user ...
} else {
  ... regular peon ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,您无疑容易受到SQL注入攻击,并且正在使用过时/已弃用的数据库库.MySQL的_*()函数应该不使用任何更多.