【问题标题】:else statement being executed when if is expected to run当 if 预期运行时执行 else 语句
【发布时间】:2016-03-25 06:37:20
【问题描述】:

我的网站上有一个功能,让彼此成为朋友的用户可以查看彼此的照片。例如,如果我以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

他们都拥有彼此favourited

考虑以下 sn-p:

<?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 语句总是在执行,回显消息,我不明白为什么。

【问题讨论】:

  • 回显不同的值以检查您是否获得了正确的数据。

标签: php


【解决方案1】:

像这样在您的检查周围添加括号:

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
}

问题是“和”之一总是错误的,所以整个陈述总是错误的。您可以将您的陈述缩短为以下内容:

A or B and C or D and E

逻辑上与

相同
A or B or D and C and E

C = !E 开始,这个陈述总是错误的。你真正想要的,我上面展示的是:

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

【讨论】:

  • 首先感谢您的回答。我开始理解你上面提到的方法。我已经更改了我的代码,并在上面应用了您的 if 语句,但不幸的是,它仍在执行 else 语句?
  • @Freddy 那么您的数据可能有问题。我会把它打印出来,这样你就可以检查它并确保值是它们应该是的值。话虽如此,逻辑问题仍然是一个问题,所以你也解决了这个问题。
  • 啊,原来我只需要在这一行 while ($getting_favs = mysqli_fetch_assoc($get_favs_q)){ 上执行一个 while 循环。但是,是的,正如您所说,最好对 if 语句进行更早的排序以避免进一步出现问题。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多