2010-09-28 77 views
0

我想知道是否有人可以看看這段代碼,並幫助我想出一個更好的方式來做到這一點,如果有的話。jquery追加/刪除並保存到數據庫

我正在使用jQuery append/remove添加和刪除列表項。我的代碼首先從數據庫中選擇任何現有的行並將其顯示在列表中,然後用戶可以添加或刪除列表中的任何元素。

我有一個類似的數據庫結構:

object_id element_id auto order 
    1   1   0  2 
    1   2   0  1 
    1   3   1  3 

用戶已經完成了追加後/刪除我將剩下的HTML代碼與此類似:

<ul id="element-list" class="ui-sortable"><li> 
<label for="element">Element Description</label> 
<input type="hidden" value="1" name="element[1][id]"> 
<input type="checkbox" value="" name="element[1][auto]"> 
</li> 

<li> 
<label for="element">Element Description</label> 
<input type="hidden" value="2" name="element[2][id]"> 
<input type="checkbox" value="" name="element[2][auto]"> 
</li> 
</ul> 

由於用戶可以添加和刪除包含數據庫中存在的行的元素我很困惑如何最好將這些更改保存到數據庫中。目前,我刪除所有相應的行,然後在一個循環中插入新行如下:

foreach($_POST['element'] as $element){ 

$auto = (isset($element["auto"])) ? 1 : 0; 

$query="INSERT INTO $table (object_id, element_id, auto) VALUES ('".$object_id."', '".$element["id"]."', '".$auto."') "; 
} 

我想知道是否有更有效的方式來做到這一點不是刪除所有行,然後插入新的?

任何輸入,將不勝感激。

感謝

保羅

+0

這是一種EAV模式嗎? – xmarcos 2010-09-28 16:20:16

回答

2

這絕對是最簡單的方法。

2建議...

  1. 使用PDOmysqli用準備好的查詢。你的代碼很容易被sql注入。
  2. 使用transactions。如果你刪除了所有的行,然後發生了某些事件並插入了新的行,那就太糟糕了。如果插入未完成,則可以使用rollback
+0

感謝您的輸入我也會考慮您的建議 – 2010-09-28 19:11:43

+0

在我看來,回滾是一個可怕的想法。確保您的代碼在上線前無缺陷,並避免使用回滾。如果所有的代碼都能正常工作,則不需要更多的內存/處理。 – Webnet 2010-10-28 13:40:43

+0

@webnet - 回滾必須處理的不僅僅是代碼。服務器可能關閉,網絡可能關閉。回滾不適用於錯誤的代碼。 – Galen 2010-10-28 14:33:42

1

刪除所有行和插入新的是實現你想實現什麼是最好的方法。但是,如果你要優化你的代碼,改變你的SQL讓你做你所有的刀片在單個查詢...

INSERT INTO table (col1, col2, col3) VALUES 
(val1, val2, val3), 
(val1, val2, val3), 
(val1, val2, val3), 
(val1, val2, val3), 
(val1, val2, val3) 
0

刪除行之前更新是好的,如果你的新行數是其他。