2015-11-12 56 views
1

我試圖根據查詢返回顯示不同的消息/按鈕。有3種不同的情況。查詢多個表,如果,elseif,其他條件

  1. 用戶評論他的賬戶
  2. 用戶評論好友賬號
  3. 用戶評論非友人帳

因此,當用戶查看自己的帳戶我隱藏按鈕「加爲好友」。當他檢查非朋友帳戶時,我顯示按鈕「添加爲朋友」。當用戶檢查朋友帳戶時,我想顯示該用戶是他的朋友的消息。

這是查詢和if,elseif,else條件。邏輯是錯誤的,但無法弄清楚究竟是什麼。

if(isset($_GET['id']) && is_numeric($_GET['id'])){ 
     $id = $_GET['id']; {  
$result = $pdo->prepare("SELECT usr.*, userFriends.* 
         FROM users usr 
          LEFT JOIN user_friends userFriends 
           ON usr.id = userFriends.friend_id 
         WHERE id = ?       
         LIMIT 1"); 

    $result -> bindParam(1, $id, PDO::PARAM_INT); 
    $result -> execute(); 
    foreach ($result as $row) 
    { 
     // some html here 
     if($_SESSION['id'] == $row['user_id']) 
     { 
      echo ''; 
     } 
     elseif ($id == $row['friend_id']) 
     { 
      echo ' Already friends '; 
     } 
     else        
     { 
      echo ' Add as friend '; 
     } 
    } 
} 

因此$_SESSION['id']是當前(登錄用戶)。

$id非好友/朋友的個人資料

$row['user_id']從表user_friends

$row['friend_id']當前用戶是從user_friends表中的非好友/朋友id

+0

你可以複製var_dump($ result)的結果;請 ? – Nirnae

+0

它與查詢相同。 –

+0

然後你可以打印$ row的值嗎?如果你的案例沒有按照預期工作,那麼問題也必須在那裏,我也想到了,你在第一個if friend_id上檢查user_id是否是這個目的? – Nirnae

回答

1

你的邏輯錯誤升技..

要檢查什麼?你想檢查$ id是$ _SESSION ['id']的朋友..所以你應該選擇基於$ id或$ _SESSION ['id']?

if(isset($_GET['id']) && is_numeric($_GET['id'])){ 
    //the first thing you need to check is that is this you are viewing your own profile by just checking this and without even need to query. 
    if($_SESSION['id'] == $_GET['id']){ 
     echo ''; 
    } else { 
     $id = $_GET['id']; 

     $result = $pdo->prepare("SELECT usr.*, userFriends.* 
        FROM users usr 
         LEFT JOIN user_friends userFriends 
          ON usr.id = userFriends.friend_id 
        WHERE **Your ID Column**= ?       
        LIMIT 1"); 

     $result -> bindParam(1, $_SESSION['id'], PDO::PARAM_INT); 
     $result -> execute(); 
     //check if the result return rows? 
     // if return rows of data, it's already friend 
     // else its not friend yet 

     // what's the purpose for this loop then? 
     foreach ($result as $row){ 

     } 
    } 
} 
1

你在查詢邏輯是有點不對。

首先,您需要同時使用iduser_idfriend_id

由於$id = $_GET['id'];我猜$id var保持friend_id(配置文件用戶的ID嘗試查看)。

但是你需要得到當前user_id莫名其妙。

$user_id = $_SESSION['id'];

然後:

SELECT u.id user_id, uf.frien_id 
FROM users u 
LEFT JOIN user_friends uf 
ON u.id = uf.user_id 
    AND uf.friend_id = ?       
WHERE u.id = ? 
LIMIT 1 

... 

$result -> bindParam(1, $id, PDO::PARAM_INT); 
$result -> bindParam(1, $user_id, PDO::PARAM_INT); 

你真的有在user_friends其中user_id = friend_id記錄?通常我不會。所以如果沒有這樣的記錄。

所以,你必須改變你的病情if($_SESSION['id'] == $row['user_id'])

if($id == $user_id) 
+0

當前用戶(登錄用戶)是'$ _SESSION ['id']' –

+0

:-)是的,我已經編輯了我的答案 – Alex

+0

像這樣,我對每個用戶都有相同的配置文件。 。因爲$ _SESSION ['id']我猜。 –