如何在使用输入序列时更新排序顺序?

时间:2011-07-12 16:24:18

标签: php mysql sorting

我想允许用户通过提供号码来重新排列项目。所以,如果有5个项目

Id, Item, Display Order 
1, Item a, 1
2, Item b, 2
3, Item c, 3
4, Item d, 4
5, Item e, 5

用户可获得5个输入框,他们可以提供数字并单击更新以重新排序项目。如果用户在上面输入125作为新位置,则只将其设置为最大值(即5)并更新其他项目,如果用户输入-10,则只将该项目设为1并更新其他项目。

一旦用户提交表单,我就无法弄清楚如何更新订单。任何帮助,将不胜感激。感谢

更新

使用上面的数据,我向用户提供了5行,其中包含5个输入框,其中包含display_order值作为默认值。如果用户希望对列表重新排序,则可以更新输入框值并单击“提交”以更新数据库。我使用ORDER BY displayorder查询列出reocrds。

有任何问题请询问

2 个答案:

答案 0 :(得分:2)

表单如下:

<form ...>
<table>
<tr>
   <th>Item A</th>
   <td><input type="text" name="order[1]" value="1" /></td>
</tr>
<tr>
   <th>Item B</th>
   <td><input type="text" name="order[2]" value="2" /></td>
</tr>
etc...

名称字段数组中的下标值是该特定项目的ID。提交表单时,您可以执行以下操作:

foreach($_POST['order'] as $key => $val) {
   $val = intval($val);
   $key = intval($key);
   $sql = "UPDATE yourtable SET DisplayOrder=$val WHERE id=$key;";
   mysql_query($sql) or die(mysql_error());
}

然后进行检索,它只是:

SELECT ...
FROM yourtable
ORDER BY DisplayOrder ASC

用户输入他们想要的任何号码,并由他们来确保他们以正确的顺序升序。您的脚本只需记录这些数字并在检索时按它们排序。

答案 1 :(得分:1)

为什么不使用jQuery Sortable。更容易,用户友好,你不会有“重复的订单价值”问题。

http://jqueryui.com/demos/sortable/