如果条件,PHP多个OR

时间:2016-11-04 08:10:55

标签: php if-statement conditional-statements

我试图检查我的PHP代码,如果我的用户具有执行操作的必要权限但我的条件不会工作。我可能误解了AND / OR。我可以请你帮忙。

实际上,我有:

if ( !in_array('ADMIN',$_SESSION['roles']) || !in_array('MANAGEMENT',$_SESSION['roles']) || $requester != $_SESSION['tnumber'] ) {
                            echo "you are not allowed to XXXX !";
                    } else {
      // allowed
}

我已将这三个条件与OR(||)放在一起但它失败了。

我想说的是:

  1. 如果用户没有' ADMIN'或者'管理'权利($SESSION['roles']数组中的值)
  2. 或者,如果用户不是请求者($requester应与$_SESSION['tnumber']
  3. 相同

    然后他应该留言说他不被允许。

    否则(如果他有管理员权限或管理权限,或者他是请求者),那么它应该有效。

    如何更改条件以满足此要求?

    谢谢, 此致!

2 个答案:

答案 0 :(得分:3)

在类似if (p || q || r)的条件下,如果三个条件中的至少一个是if,则整个true语句的结果为true。如果您没有管理角色,则!in_array('MANAGEMENT',$_SESSION['roles'])将为true,因此访问权限将被拒绝。

我建议您反转if语句,如果为true,则授予访问权限,否则拒绝访问权限。所以:

if (in_array('ADMIN', $_SESSION['roles']) || in_array('MANAGEMENT', $_SESSION['roles']) || $requester == $_SESSION['tnumber'] ) {
    // allowed
} else {
    // denied
}

如果将大条件提取到单独的函数中,它还将有助于代码的可读性。

答案 1 :(得分:0)

好像你倒退了,你需要

if(!$admin && !$management && ...){
  echo 'Not allowed';
}

或者你可以

if($admin || $management || ...){
  echo 'Allowed';
}