当if预期运行时正在执行的else语句


else statement being executed when if is expected to run

我的网站上有一个功能,互为好友的用户可以查看彼此的照片。例如,如果我以Conor的身份登录,并且我想查看Alice's的照片,Conor必须与Alice成为朋友,Alice必须与Conor成为朋友——他们必须是共同的朋友。

我的数据库中有一个名为favourites的表,它存储所有好友请求。假设favourites有两行:

   id: 1
   favourited_who: Alice
   favourited_by: Conor
   id: 2
   favourited_who: Conor
   favourited_by: Alice

他们彼此都有CCD_ 5。

考虑以下片段:

<?php
$get_favs_q = mysqli_query ($connect, "SELECT * FROM favourites");
        $getting_favs = mysqli_fetch_assoc($get_favs_q);
            $user_favourited = $getting_favs['favourited_who'];
            $user_favourited_by = $getting_favs['favourited_by'];
        /*************************/     
        if ($user == $username  || $user_favourited == $user && $user_favourited_by == $username 
                                || $user_favourited == $username && $user_favourited_by == $user){
            // $user = name in the URL after ?= - As we are on Alice's page .. $user equals Alice
            // $username = session variable for logged in user - $username = Conor
            // If both users have each other favourited, then the code to display images appears here.
        } else {
            echo "  <span style='margin-left: 10px;'> 
                        You and $ufirstname must favourite each other to view each others backstage. 
                    </span>";
        }
?>

我已经介绍了所有的场景,以检查$user是否有利于$username,反之亦然,但是,else语句总是在执行,从而呼应消息,我不明白为什么。

在您的支票周围添加括号,如下所示:

if (
    $user == $username  
    || ($user_favourited == $user && $user_favourited_by == $username)
    || ($user_favourited == $username && $user_favourited_by == $user) ){
    // Do your thing
} else {
    // Do the other thing
}

问题是其中一个"ands"总是假的,所以整个语句总是假的。您可以将您的声明缩短为以下内容:

A or B and C or D and E

在逻辑上与相同

A or B or D and C and E

由于C = !E,该语句始终为false。你真正想要的,我在上面展示的是:

A or (B and C) or (D and E)