2017-02-26 92 views
0

我在mybb論壇有一個函數。它是一個插件的一部分,軌道依賴於某些論壇,並在會員頁面上顯示日期(等等)。Mybb更新查詢不起作用

這部分用於用戶刪除他的帖子。它應該在設置的論壇中找到已刪除的帖子前的最後一篇文章,並在該用戶的成員頁面上顯示該(較舊的)日期。

但是,更新查詢不起作用,我不知道問題是什麼。

這是我的代碼。沒有錯誤,但它不寫入數據庫。

function lastippost_update($pid) 
{ 
    global $db, $mybb; 
    $query = $db->simple_select("posts","fid,uid,dateline","pid='{$pid}'"); 
    $post = $db->fetch_array($query); 
    if ($mybb->settings['lastippost'] != '') 
    { 
      $ipids = $mybb->settings['lastippost']; 
      if (in_array($post['fid'], $ipids)) 
      { 
        $ipquery = $db->write_query("SELECT uid,dateline FROM ".TABLE_PREFIX."posts WHERE fid IN ($ipids) AND uid='".$post['uid']."' ORDER BY dateline DESC LIMIT 1 OFFSET 1"); 
        $ippost = $db->fetch_array($ipquery); 
        $db->update_query("users", array('lastippost' => $ippost['dateline']), "uid='".$ippost['uid']."'"); 
      } 
    } 

}

$ ipids是一個逗號分隔的論壇ID列表。


我不知道是否有幫助,但我有相當類似的代碼另一位,它的工作

   $ipids = $mybb->settings['lastippost']; 
      $ipquery = $db->write_query("SELECT uid, dateline FROM ".TABLE_PREFIX."posts WHERE fid IN ($ipids) ORDER BY uid,dateline DESC"); 
      while ($ippost = mysql_fetch_assoc($ipquery)) 
      { 
        if($ippost['uid'] != $lastuid) 
        { 
          $db->update_query("users", array('lastippost' => $ippost['dateline']), "uid='".$ippost['uid']."'"); 
        } 
        $lastuid = $ippost['uid']; 
      } 
+0

您是否添加了任何調試以確保'$ post'返回您期望的內容? – Theo

+0

你剛剛刪除的帖子,你正在嘗試選擇'uid ='「。$ post ['uid']'? –

+0

@Paul Mybb使用鉤子。我在這裏使用的鉤子是在刪除之前設置的它應該在選擇帖子之後但在實際刪除之前運行。 – Senya

回答

0

OK,我發現我的問題:

$ipids = $mybb->settings['lastippost']; 

以上是一個字符串。我需要它爲選擇查詢。但是,這部分票數顯然指的是一個數組:

if (in_array($post['fid'], $ipids)) 

它可能不是最好的解決辦法,但現在我已經做了這樣的事情,它的工作原理:

$ipids = $mybb->settings['lastippost']; 
$ipids2 = explode(",", trim($ipids)); 

第一個用於選擇查詢,第二個爲in_array

感謝您的幫助! (我仍然願意提供更優雅的解決方案:))