为什么这不是测试工作?

0 php mysql

我的网站需要登录才能根据用户建立权限.在网站的照片列表中,如果用户只有访客访问权限,我必须确定是否会显示特定的照片.所以我认为这个if else语句会起作用:

if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')) {

  // show the photo if it isn't private and the user isn't a guest
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.

但是,如果我将此测试分成三行,那么它的工作正常.

$is_private_photo = $mysql_row['guest_access'] == 'NO';  
$is_guest = $_SESSION['user_level'] == 'GUEST';
$both_private_and_guest = ($is_private_photo AND $is_guest);

if  (!$both_private_and_guest) {
  // show the photo if it isn't private and the user isn't a guest
Run Code Online (Sandbox Code Playgroud)

第一个版本有什么问题?

Pas*_*TIN 6

你的第一个是

if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST'))
Run Code Online (Sandbox Code Playgroud)

这实际上是这样解释的:

if (
    (!($mysql_row['guest_access'] == 'NO'))
    AND ($_SESSION['user_level'] == 'GUEST')
  )
Run Code Online (Sandbox Code Playgroud)

!只适用于第一个条件,而不是两个,因为它的优先级比更高级别的AND(见运算符优先级)


您的病情可能应该用一些额外的括号重写:

if (!(($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')))
Run Code Online (Sandbox Code Playgroud)

因此!适用于整个条件.