2013-04-25 21 views
0

對不起,長標題。 我有一個註冊用戶的列表,一些有個人資料圖片,一些沒有。 的問題是,如果用戶1登錄,然後在用戶列表中,每個人都有相同的外形圖像作爲用戶1從查詢中調用默認圖像時獲取每個用戶的獨特圖像

但如果我從查詢中刪除我的默認來電顯示,每個用戶都會獲得自己的圖片,但default.jpg圖片不起作用。 我可以刪除查詢並在頁面上使用if語句,但我真的想避免這種情況。

  function fetch_users($uid){ 
      $query = $this->link->query("SELECT user.id, user.username, user.email, 
      userdetails.profile_img,userdetails.firstname, 
      userdetails.lastname,userdetails.location,following.follow_id 
      FROM user 
      LEFT JOIN userdetails ON user.id = userdetails.user_id 
      LEFT JOIN following ON user.id = following.follow_id 
      WHERE  user.id != '{$uid}' "); 
      $users = array(); 
      while(($row = $query->fetch(PDO::FETCH_ASSOC)) !== FALSE) { 
    #The row that mess up things#----->$row['profile_img'] = file_exists("img/{$uid}.jpg") ? "img/{$uid}.jpg" : "img/default.jpg" ; 
      $users[] = $row; 
     } 
      return $users; 
     } 

回答

1

您正在混合很多東西。在查詢中,您從表中獲取文件名,但在註釋行中使用uid構造名稱。對於前者用默認的圖像時,您可以使用

SELECT … 
    IFNULL(userdetails.profile_img, "img/default.jpg") AS profile_img, 
… 

這將替換表NULL值與默認圖片的路徑。

while(($row = $query->fetch(PDO::FETCH_ASSOC)) !== FALSE) { 
    $imgpath = "img/" . $row['id'] . ".jpg"; 
    if (!file_exists($imgpath)) $imgpath = "img/default.jpg"; 
    $row['profile_img'] = $imgpath; 
    $users[] = $row; 
} 

這將創建一個基於圖像的路徑:

如果你想從用戶ID構建圖像路徑,那麼你應該從結果行,而不是當前用戶的一個使用的ID用戶ID,並且如果不存在這樣的文件則回退到默認值。

你甚至可以結合他們兩個:

SELECT … 
    IFNULL(userdetails.profile_img, 
     CONCAT("img/", user.id, ".jpg") AS profile_img, 
… 
while(($row = $query->fetch(PDO::FETCH_ASSOC)) !== FALSE) { 
    if (!file_exists($row['profile_img'])) 
    $row['profile_img'] = "img/default.jpg"; 
    $users[] = $row; 
} 

這將使用存儲的圖像所在的路徑設定,但是從UID否則構建的路徑。然後它將使用以這種方式命名的文件,但是如果不存在這樣的文件則是默認文件。

+0

這樣一個美麗的解決方案:),經過一些調整後,工作得很好! 真的很不錯。謝謝。 – Dymond 2013-04-25 14:32:15

相關問題