我是初级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!";
}
?>
希望你明白!
由于
答案 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值的行将优先于其他所有。