我正在为拥有大量图片库的网站制作管理系统。该界面将允许用户在每个图库中添加,删除或重新排序图像。
我有一张桌子,可以将所有画廊中的所有图像放在一起,其中包含' id'自动递增,sort_order的默认值设置为0。
+----+-----------+------------+------------+
| id |gallery_id | sort_order |
+----+-----------+------------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 2 |
| 4 | 1 | 3 |
| 5 | 1 | 4 |
| 6 | 1 | 5 |
| 7 | 1 | 6 |
| 8 | 2 | 0 |
| 9 | 2 | 1 |
| 10 | 2 | 2 |
| 11 | 2 | 3 |
| 12 | 2 | 4 |
| 13 | 2 | 5 |
| 14 | 2 | 6 |
+----+-----------+------------+------------+
这是重新排序查询,通过ajax使用序列化数组:
if($_POST['item']) {
$order = 0;
foreach ($_POST['item'] as $id) {
$rearrange = $db->query
("UPDATE images SET sort_order = '".$order."' WHERE id = '".$id."'");
$order++;
它根据传递的数组的长度限制sort_order,然后默认为0,以便它来到的下一个组。我可以重新排序,添加,删除,它总是限制我正在编辑的gallery_id组的更改。
(作为一项实验,我在所有图库中插入了sort_order值,如下所示:
+----+-----------+------------+------------+
| id |gallery_id | sort_order |
+----+-----------+------------+------------+
| 1 | 1 | 0 |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 4 |
| 5 | 1 | 5 |
| 6 | 1 | 6 |
| 7 | 1 | 7 |
| 8 | 2 | 8 |
| 9 | 2 | 9 |
| 10 | 2 | 10 |
| 11 | 2 | 11 |
| 12 | 2 | 12 |
| 13 | 2 | 13 |
| 14 | 2 | 14 |
+----+-----------+------------+------------+
当我使用我的界面重新排序行时,它限制了gallery_id组中的sort_order,完全如第一个表所示。
我正在寻找这种方法的警告。有人这样做过吗?
答案 0 :(得分:0)
UPDATE images
SET
sort_order = FIELD(id, A, B, C, D, E)
WHERE gallery_id = N
AND id IN(A, B, C, D, E)
答案 1 :(得分:0)
我是这样做的,但实际上我通过计算每个图库中的行数来最后插入图像。当用户想要订购时,他必须首先过滤特定图库的列表,然后他可以对图库中的图像进行排序。
我不得不指出代码中可怕的安全问题。我真的,真的,真的希望你实际上并没有像这样编写查询,因为任何人都可以轻松地用你的数据库做任何他们想做的事情。
想到了{p> http://xkcd.com/327/。如果我提交了像0'; drop table images;
这样的项目,那么整个表格就会消失。