Php 对组内的行重新排序

Php 对组内的行重新排序,php,mysql,ajax,Php,Mysql,Ajax,我正在为一个有很多图片库的网站制作一个管理系统。该界面将允许用户在每个图库中添加、删除或重新排序图像 我有一个表格,用于存放所有库中的所有图像,“id”自动递增,默认排序顺序设置为0 +----+-----------+------------+------------+ | id |gallery_id | sort_order | +----+-----------+------------+------------+ | 1 | 1 | 1 | | 2

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

我有一个表格,用于存放所有库中的所有图像,“id”自动递增,默认排序顺序设置为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++;
它根据传递的数组的长度限制排序顺序,然后对其所属的下一个组默认为0。我可以重新排序、添加、删除,并且它始终限制对我正在编辑的库id组的更改

(作为实验,我在所有库中插入了按升序排列的排序顺序值,如下所示:

+----+-----------+------------+------------+
| 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 |
+----+-----------+------------+------------+     
当我使用我的界面对行重新排序时,它限制了库id组中的排序顺序,正如第一个表所示)


我正在寻找这种方法的注意事项。有人这样做吗

我也是这样做的,但我实际上是通过计算每个库中的行数将插入的图像放在最后。当用户想要订购时,他必须先过滤特定库的列表,然后才能对库中的图像进行排序

UPDATE images
SET
    sort_order = FIELD(id, A, B, C, D, E)
WHERE gallery_id = N
    AND id IN(A, B, C, D, E)
我不得不指出你的代码存在严重的安全问题。我真的,真的,真的希望你不是真的这样写查询,因为任何人都可以轻松地用你的数据库做任何他们想做的事情


我想到了。如果我提交一个类似
0'的项目;拖放表图像您的整张桌子都不见了。

谢谢您的建议。我确实对一切都进行了消毒。我可以问一下,在重新排序之前,您如何筛选特定库的列表?我使用一个框架,它向我显示带有筛选选项的列表,其中一个过滤器是gallery_id。在对特定库进行筛选之前,我不允许他们进行排序。