使用文本字段通过后端管理进行前端菜单排序

时间:2012-08-10 23:26:58

标签: php mysql sorting drop-down-menu menu

我是初级PHP / MySQL开发人员,需要一些帮助,如何通过后端使用文本字段自定义排序显示前端菜单项,我想按1,2这样的数字排序页面(Menut标题) ,3 ......等。在前端。如果我能从你的答案中理解下拉菜单排序,那就太好了。 :D但无论如何这是我的后端代码,但它不起作用我认为需要一个我不太了解的数组:

<form name="sort_form" method="post" action="" >
<?php while($row = mysql_fetch_assoc($res)) { ?>
<tr>
    <input type="hidden" value="<?php echo $row['id']; ?>" name="id" />
    <td><input type="text" value="<?php echo $row['sort_by']; ?>" name="sort_by" size="2" maxlength="2"/></td>
    <td><?php echo $row['page_title']; ?></td>
</tr>
    <?php } ?>
<tr>
    <td colspan="2" align="center"><input type="submit" name="submit" value="Sort" /></td>
</tr>
</form>

以下是执行操作的代码。

<?php
if(isset($_POST['submit']) == "Sort") {

    $id = intval($_POST['id']);
    $sort_by = intval($_POST['sort_by']);

    $query_update = "UPDATE `pages` SET `sort_by`='$sort_by' WHERE `id`='$id'";
    $updated = mysql_query($query_update) or die ("Update failed!");

    echo "Updated Successfuly!";

}
?>

希望你明白!

由于

1 个答案:

答案 0 :(得分:1)

要对列表进行排序,您不能只更新sort_by字段。

如果您的表格包含以下数据

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         3

如果使用sort_by值1更新第3行会发生什么?将有两行sort_by值为1,哪一行首先出现?如果再次使用sort_by值1更新第2行会发生什么... sort_by字段中可能存在大量冲突。

但是,有几种方法可以解决这个问题。一种是简单地交换sort_by值。因此,当您将第3行更新为sort_by值1时,您还将检查是否存在任何sort_by值为1,如果存在,则将其替换为3的sort_by值所在的行。

如果交换不是您要查找的行为,则可以为sort_by字段提供浮点数据类型。在这种情况下,每次在表中插入或移动某些东西时,其sort_by字段将是夹在其间的2行的平均值。如果你想在第1行和第1行之间移动第3行2您将第3行的sort_by值设置为1.5。

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         1.5

然后,如果你想在1和3之间向后移2,你可以将2的sort_by值设置为1.25

id  page_title  sort_by
1   title_1         1
2   title_2         1.25
3   title_3         1.5

你可以在很长一段时间内继续这样做。但是,由于您使用文本字段编辑按字段排序,因此这似乎不适合您。

我建议您在表中使用另一个名为“sort_by_updated_at”的列。每次更新sort_by值时,将sort_by_updated_at设置为当前时间。这样您就可以对两列进行排序。您可以对常规sort_by字段进行排序,但是如果有任何collisons,则查看sort_by_updated_at字段,而具有较低sort_by_updated_at值的行将优先于其他所有。