【发布时间】:2011-11-12 15:38:36
【问题描述】:
我知道以前有人问过这个问题,但解决方案对我不起作用。我正在尝试将项目的新排序保存到数据库中。
我已经大大简化了它,但这是它的基本思想。我有一个嵌入了可排序列表的表单。
<form id="itemlist">
<ul id="itemsort">
<li id="Item_1">Item<input type="hidden" name="itemid[]" value="itemsRowID01"/></li>
<li id="Item_2">Item<input type="hidden" name="itemid[]" value="itemsRowID02"/></li>
<li id="Item_3">Item<input type="hidden" name="itemid[]" value="itemsRowID03"/></li>
<li id="Item_4">Item<input type="hidden" name="itemid[]" value="itemsRowID04"/></li>
</ul>
</form>
我已加载 JQuery 和 JQuery UI,以下代码启用可排序列表功能并将项目 ID 和新排序顺序发布到 php 脚本。 “编辑器”变量是在加载时设置的公共变量,它工作正常。排序工作正常,但当我重新排序列表时,发布的 neworder 值似乎没有改变。
//sorting feature
$("#itemsort").live('hover', function() {
$("#itemsort").sortable({
opacity:.5,
update : function () {
var neworder = $('#itemsort').sortable('serialize');
var inputs = serializePost('#itemlist');
$.post("core/actions.php",{
'order': editor,
'inputs': inputs,
'neworder': neworder},function(){
alert("Order saved.", 1);
});
}
});
});
关于actions.php...
if(isset($_POST['order'])){
//set a variable for each post
$batchid = $_POST['inputs']['itemid'];
parse_str($_POST['neworder'], $neworder);
//count the number of entries to be ordered
$count = count($batchid);
//use the count to create an incremental loop for each item to be updated.
$i=0;
while ($i <= $count) {
$query ="UPDATE {$_POST['order']} SET order=$neworder[item][$i] WHERE id=$batchid[$i]";
++$i;
}
}
我不确定为什么我为每件商品获得的订单不会改变。
有什么想法吗?
-L
【问题讨论】:
-
Holy SQL 注入漏洞,蝙蝠侠!
$query ="UPDATE {$_POST['order']} SET order=$neworder[item][$i] WHERE id=$batchid[$i]";除了你原来的问题,这段代码非常危险。您需要确保在将输入变量传递给查询之前对其进行了清理,否则当有人恶意将$_POST['inputs']['itemid']设置为10 OR 1=1或类似名称时,您可能会发现自己处于一个受伤的世界。 -
是的,我知道对不起,这只是我正在尝试做的最简单的例子。我实际上使用类和抽象层来保护我的方法不被注入。我不想尝试解释所有类和父类等。希望在我的 actions.php 脚本中调试逻辑仍然足够有意义。
标签: php jquery mysql jquery-ui