【问题标题】:PHP if else ignores after "OR/||" OperatorPHP if else 在 "OR/||" 之后忽略操作员
【发布时间】:2013-04-08 07:24:43
【问题描述】:
您好,这行代码有问题。
if($_SESSION['permission'] != "superadmin" || "admin"){
//header("location:logout.php");
echo $_SESSION['permission'];
}
如果访问级别不是 superadmin 或 admin 但我的 if else 忽略了 || 之后的“admin”,这是一条快速行,它将注销用户操作员。对于我可能做错的任何帮助,我将不胜感激。谢谢。也试过&&还是不行。
【问题讨论】:
标签:
php
comparison-operators
【解决方案1】:
只需将您的 if 修复为以下内容:
if($_SESSION['permission'] != "superadmin" && $_SESSION['permission'] != "admin"){
在你的代码中有两个条件
$_SESSION['permission'] != "superadmin" || "admin"
这被解释为:
$_SESSION['permission'] != "superadmin"
OR
"admin"
和条件
"admin"
与 true 等价,因为它没有空值,所以它总是会通过 if 语句
【解决方案2】:
正确的代码:
if($_SESSION['permission'] != "superadmin" &&
$_SESSION['permission'] != "admin"
){
//header("location:logout.php");
echo $_SESSION['permission'];
}
【解决方案3】:
试试这个
if(($_SESSION['permission'] != 'superadmin') && ($_SESSION['permission'] != 'admin'))
{
//header("location:logout.php");
echo $_SESSION['permission'];
}
【解决方案4】:
PHP 对OR 使用“短路”(即使是AND 和其他逻辑运算符)语句。
这意味着 - 对于 OR 运算符 - 如果第一个条件是 TRUE,则不会评估第二个条件。
此外,我不确定您的语法是否“好”;这是因为(无论短路)前两个字符串将被比较(结果将是"superadmin";这是因为两个字符串是两个true 值,因为它们有一个值而不是null)和,然后,该值将与您的会话变量进行比较
看看PHP manual
如果你想正确地重写它,你必须这样做
if($_SESSION['permission'] != "superadmin" && $_SESSION['permission'] != "admin")
{
//do something
}