PHP检查用户是否为管理员

PHP检查用户是否为管理员,php,mysql,Php,Mysql,这是我的第一篇文章 我试图检查我的MySQL数据库,看看这个用户是管理员还是普通用户,它总是说我是管理员。我的数据库是: 身份证 名称 电子邮件 密码 角色 我有一个测试用户:id:1姓名:管理员电子邮件:admin@admin.com角色:2 我的代码是: <?php if (isset($_SESSION['usr_id']) || $row["role"] = 1) { ?> <!DOCTYPE html> <html> <head> <

这是我的第一篇文章

我试图检查我的MySQL数据库,看看这个用户是管理员还是普通用户,它总是说我是管理员。我的数据库是:

身份证 名称 电子邮件 密码 角色

我有一个测试用户:id:1姓名:管理员电子邮件:admin@admin.com角色:2

我的代码是:

<?php if (isset($_SESSION['usr_id']) || $row["role"] = 1) { ?>
<!DOCTYPE html>
<html>
<head>
<h2>You are a admin!</h2>
</head>
</html>
<?php } else { ?>
<h2>You are either not logged in, or you have no access to this page.</h2>
<?php } ?>

你是管理员!
您未登录,或者无法访问此页面。

然而,它总是说,我是一名管理员,即使我的角色是2

$row[“role”]=1
这是分配,不是比较。如果使用OR运算符(| |),运算符将验证IF语句中指示的两个条件中的任何一个的符合性,因此当满足这两个条件中的任何一个时,将显示消息:“您是管理员!”。 如果希望满足这两个条件,则消息必须使用逻辑AND(&&&)来验证If语句中这两个条件的有效性

如果(isset($_SESSION['usr_id'])&&&$row[“role”]=1){ ...
}会话中必须有1个。请在销毁会话后重试

还要改变条件

发件人:


收件人:

好的,您似乎是在分配值,而不是比较值。这就是您总是以管理员身份登录的原因

只需将
$row[“role”]=1更改为
$row[“role”]=1
。此外,您应该使用
&&
运算符而不是
|

最后,您似乎是第一次学习编程,这些是每个程序员在开始时都犯过的典型错误。我向您推荐Vikram Vaswani所著的《PHP:初学者指南》一书,这本书对于学习PHP编程的人来说是一本非常好的简单指南


祝你好运。

警告:编写自己的访问控制层并不容易,正如你在这里非常恰当地演示的那样,有很多机会使它严重出错。请不要编写自己的身份验证系统,因为任何现代的同类产品都内置了强大的功能。@tadman,可能只是为了练习/学习:)@Chris通过使用框架并查看其工作原理,阅读源代码,向专家学习。不要在黑暗中摸索。@tadman,每个人都有自己的学习方式。对某些人来说,立即跳入框架可能会让人难以承受。这看起来像一个简单的初学者应用程序。我怀疑OP是否会将其用于生产,但我知道什么?什么样的初学者“阅读源代码?”@TadmanPHP确实有很多优秀的框架。但我不同意你的假设,即初学者应该在熟悉语言本身之前就开始使用框架。首先学习语言本身的基础知识(例如
|
&
之间的区别以及
=
=
之间的区别),然后学习框架。但这只是我个人的建议和意见。除此之外,您需要将第一行的| |替换为&,否则
isset($\u SESSION['usr\u id'))
本身就足以输入
if
,但该条件对于任何用户都应该是正确的