2010-09-28 76 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

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