Php 两个表中的身份验证查询?

Php 两个表中的身份验证查询?,php,mysql,Php,Mysql,我的网站有单独的用户和管理员表 现在我想授予一些用户访问管理区域的权限 我的问题是管理和用户表 我不知道是否应该将身份验证数据从user表复制到admin表,以便他们可以登录到admin are,或者执行查询以搜索两个表中的用户名和密码,并仅使用level列验证他们的访问权限 像这样的 $sql = "select `password` , `level` from `admin` where `username` = '$username' UNION (SELECT `password` ,

我的网站有单独的用户和管理员表

现在我想授予一些用户访问管理区域的权限

我的问题是管理和用户表

我不知道是否应该将身份验证数据从user表复制到admin表,以便他们可以登录到admin are,或者执行查询以搜索两个表中的用户名和密码,并仅使用level列验证他们的访问权限

像这样的

$sql = "select `password` , `level` from `admin` where `username` = '$username' UNION
(SELECT `password` , `level` FROM `users` where `username` = '$username') LIMIT 1 ";
$result = $db->query($sql);

while($row = mysql_fetch_assoc($result)){
if($password == $row['passwor'] && $row['level'] != 0)
echo 'welcom to admin area';
else
echo 'login faild';
}

您可以使用左连接,无需循环:

    $sql = 'SELECT `a`.`password`, `a`.`level` FROM `admin` AS `a` LEFT JOIN `users` ON `a`.`username` = `u`.`username` WHERE `a`.`username` = "'.$username.'" LIMIT 1';
    $result = $db->query($sql);
    $row = mysql_fetch_assoc($result);

    if($password == $row['passwor'] && $row['level'] != 0)
        echo 'welcom to admin area';
    else
        echo 'login faild';
但您应该在users表中创建一个字段,并使用int来授予以下权限:
0是用户,1是超级用户,2个版主和3个管理员。。。这是一个例子。然后使用PHP中的DEFINE来设置类。另外,对你的密码进行编码。我推荐SHA-512。

我看到您正在数据库中以明文形式存储密码。
这是一个重大的安全风险,永远不应该这样做。
密码应始终使用安全哈希函数存储为盐哈希。
我也看不到为管理员和非管理员使用单独的表

我建议你改变你的桌子布局

table user
-------------
id unsigned integer auto_increment primary key,
username varchar(100) not null,
salt varchar(20) not null,
passhash varchar(48) not null,
isadmin boolean not null default false
使用以下命令查询您的表:

SELECT u.id, u.isadmin FROM user u
WHERE u.username = '$username' 
  AND passhash = SHA2(CONCAT(u.salt, '$password'),512)
  AND isadmin = 1
创建用户时,请使用:

INSERT INTO user (username, salt, passhash, isadmin) 
   VALUES ('$username', '$salt', SHA2(CONCAT('$salt','$password'),512), '$isadmin')

您的代码中有错误。首先使用select
pasword
,然后使用$row['passwor']。小心。有什么理由不简单地使用用户表中的字段来指定用户是否具有管理员权限?您不应该在数据库中的clear中存储密码。用盐腌的杂烩。这一点尤其重要,因为众所周知,人们会重复使用密码,因此泄漏这样的数据将暴露的不仅仅是该网站上的数据。