2016-03-24 20 views
0

私のサイトには、お互いに親睦をしているユーザー同士がそれぞれの写真を見ることができる機能があります。たとえば、Conorという名前でログインしていて、Alice'sの写真を表示したい場合、ConorはAliceと友好的でなければならず、AliceはConorを友人にする必要があります。else if文が実行されるときに文が実行される

私はfavouritesと呼ばれる私のデータベース内のテーブルがある - すべての友達リクエストを格納します。

id: 1 
    favourited_who: Alice 
    favourited_by: Conor 

    id: 2 
    favourited_who: Conor 
    favourited_by: Alice 

彼らの両方がお互いfavouritedを持っている:favouritesは、2つの行を持っていると仮定します。

次のスニペットを考えてみましょう:

<?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は、メッセージとIドンをエコー、else文は常に実行されている、$usernameをお気に入り化(favourited)およびその逆が、しているかどうかを確認するためにカバーしています理由を理解できない。

+0

正しいデータが得られているかどうかを確認するために、異なる値をエコーアウトします。 – noahnu

答えて

2

はそうのようなあなたのチェックの周りに括弧を追加します。

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 
} 

問題は「論理積」のいずれかが常に偽になるだろうということなので、文全体は常にfalseです。次に、あなたの文を短くすることができます:論理的

A or B or D and C and E 

そしてC = !Eいるので、文は常に偽であると同じである

A or B and C or D and E 

を。あなたが本当に望むもの、私が上に示したものは:

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

まず、あなたの答えに感謝します。私は上記のアプローチを理解し始めています。私は自分のコードを変更し、上記のif文を適用しましたが、残念ながらまだelse文を実行していますか? – Freddy

+0

@Freddyそれでは、おそらくあなたのデータにうんざりしているものがあります。私はあなたがそれを検査し、値が確実であるべきであることを確認できるように、それを印刷します。言いましたが、論理的な問題はまだ問題になっています。 –

+1

ああ、私が必要としたのは、while($ getting_favs = mysqli_fetch_assoc($ get_favs_q)){'のwhileループを実行することでした。しかし、はい、あなたが言ったように、if文がより早い段階でソートされて、それ以上の問題を避けるほうが良いのです。ありがとうございました! – Freddy

関連する問題