对组内的行重新排序

时间:2015-03-18 18:40:21

标签: php mysql ajax

我正在为拥有大量图片库的网站制作管理系统。该界面将允许用户在每个图库中添加,删除或重新排序图像。

我有一张桌子,可以将所有画廊中的所有图像放在一起,其中包含' 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,完全如第一个表所示。

我正在寻找这种方法的警告。有人这样做过吗?

2 个答案:

答案 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;这样的项目,那么整个表格就会消失。