2014-02-18 88 views
0

我在更新數據庫時遇到問題。我試圖用圖片製作分揀系統,但它不起作用。我使用JQuery的可排序函數。這樣我就可以從當前排序中返回數組(保存時)。使用Codeigniter更新數據庫將不起作用

如果我將圖像從位置1移動到位置2,一切正常。所以oldSortNumber是1,新的是2(1 + 1)。這裏是我的代碼:

public function updateOrder ($newSortArray) { 
    for($i = 0; $i <= 5; $i++) 
    { 
     $oldSortNumber = substr($newSortArray['img'][$i], strpos($newSortArray['img'][$i], ".") + 1); 
     $newSortNumber = $i + 1; 

     $this->db->where('sortID', $oldSortNumber); 
     $this->db->update('user_image', array('sortID' => $newSortNumber)); 
    } 
} 

當我把圖像放回(所以從2到1,或類似的東西)我的功能將無法正常工作。所以它不會更新到我的新位置。 1而不是2.

所以在我的數據庫中我有一張sortOrder 2的圖片。如果我把它放在第三位。一切正常。但是當我把它放在第一位時,它不會更新到數據庫。輸入很好,我不知道什麼是錯的。有人能幫助我嗎?

+0

。我認爲它應該是'$ i' – Minhaz

+0

而你的循環不正確,它應該是'for($ i = 5; $ i> 0; $ i - )',因爲你的更新是從1開始的,當它是2時你的$我是2你有兩行2 – Minhaz

+0

呃我更新了我的代碼。我從Jquery UI的「可序列化」函數中獲取舊數字。所以那個人把我的6個職位連在一起。所以我從1到6查看哪些是新數字。 – Haidy

回答

1

它不會像這樣工作,因爲你的位置和你的更新數據在同一列。您必須使用user_image表的ID,在條件主鍵和設置查詢值舊排序順序到您所定義`$ oldSortNumber`表ID

public function updateOrder ($newSortArray) { 
for($i = 1; $i <= 6; $i++) 
{ 
    $ID = substr($newSortArray['img'][$i], strpos($newSortArray['img'][$i], ".") + 1); 

    $this->db->where('YOUR_TABLE_ID', $ID); 
    $this->db->update('user_image', array('sortID' => $i)); 
} 
} 
+0

啊好,所以失敗在where子句。我將嘗試在where子句中獲取圖像ID。問題是可排序的Jquery UI中的可序列化函數返回舊的和新的排序順序。所以我首先要按照舊的排序順序獲取圖像ID。然後使用該圖像ID設置新的訂單。我今天晚上會嘗試。先謝謝了。 – Haidy

+0

奇怪的唯一的事情是,如果我把sortOrder中的圖片放在更高的位置,它可以正常工作。當我把這個降低時,它失敗了。 – Haidy

+0

因爲當它從底部開始時意味着5將會是5 + 1,所以最高值會變成新的東西。但是當它的下邊即1變成1 + 1 = 2,但你已經有另外2個時,所以當你的$ i是2時,你的條件是2選擇兩行,即更新的和舊的。從邏輯上講它是錯誤的,你的條件值不應該改變。 – Minhaz