我有这个PHP代码,列出了表中的行:
$sql="SELECT * from pages order by menu_order ASC ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
while($result=mysql_fetch_array($rs))
{
echo '<a href="edit_page.php?pagename='.$result["pagename"].'">'.$result["title"].'</a> - <a href="edit_page.php?do=up&page_order='.$result["menu_order"].'&seq='.$result["sequence"].'">Move Up</a> | <a href="edit_page.php?do=down&page_order='.$result["menu_order"].'&seq='.$result["sequence"].'">Move Down</a><br><br>';
}
他们有上下链接来改变订单
使用此代码:
$page_order = $_GET['page_order'];
if ($_GET['do'] == 'up')
{
$sql="UPDATE pages SET menu_order = '$page_order' +1 WHERE sequence != '".$_GET["seq"]."' AND menu_order < '$page_order' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$sql="UPDATE pages SET menu_order = menu_order -1 WHERE sequence = '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
}
elseif($_GET['do'] == 'down')
{
$sql="UPDATE pages SET menu_order = '$page_order' -1 WHERE sequence != '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$sql="UPDATE pages SET menu_order = menu_order +1 WHERE sequence = '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
}
但它无法正常工作 - 它会随机更改数字,并将其全部更改为0或减号
最好的方法是什么?
编辑:新代码......
我已经尝试过这段代码,但它不能正常工作 - 如果我将底行向上移动到顶部,它每次都会更改数字-1,但会结束重复的订单号?
$current = $_GET["menu_order"];
$prev = $current-1;
$next = $current;
if($_GET['do'] == 'up')
{
$sql2="UPDATE pages SET menu_order = '".($prev)."' WHERE sequence = '".$_GET["seq"]."' ";
echo $sql2.'<br>';
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
$sql2="UPDATE pages SET menu_order = '".($next)."' WHERE sequence = '".($_GET["seq"]-1)."' ";
echo $sql2;
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
}
elseif($_GET['do'] == 'down')
{
$sql2="UPDATE pages SET menu_order = '".($next)."' WHERE sequence = '".$_GET["seq"]."' ";
echo $sql2.'<br>';
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
$sql2="UPDATE pages SET menu_order = '".($prev)."' WHERE sequence = '".($_GET["seq"]+1)."' ";
echo $sql2;
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
}
答案 0 :(得分:1)
我的一个应用程序中有类似的设置,我在网站上有一个页面列表,用户可以单击向上/向下箭头来重新排序页面。当他们点击向上/向下箭头时,它会发送他们点击的page_id,然后是“向上”或“向下”。
我正在使用PDO,因此我的格式与您的格式略有不同。此外,我网站上的页面可以分层(即下拉导航),因此它们也有父ID。当我改变它们的顺序时,我希望它们改变父项子项中的顺序,而不是整个页面内的顺序。如果您要订购的商品是平的,您可以删除其中一些。
第一步是获取我们想要移动的页面的parent_id:
$parent_query = "SELECT parent_id FROM page WHERE page_id = :page_id";
$parent_result = $db_mysql->prepare( $parent_query );
$parent_result->execute( array(
":page_id" => $_GET['page_id']
));
$parent_row = $parent_result->fetch( PDO::FETCH_ASSOC );
接下来,我们获取当前页面的显示顺序:
$page_query = "SELECT disp_order FROM page WHERE page_id = :page_id AND parent_id = :parent_id";
$page_result = $db_mysql->prepare( $page_query );
$page_result->execute( array(
":page_id" => $_GET['page_id'],
":parent_id" => $parent_row['parent_id']
));
$page_row = $page_result->fetch( PDO::FETCH_ASSOC);
现在我们将获取我们正在交换的页面的显示顺序。如果我们点击向下移动,那么我们将获得下一页的page_id和disp_order。如果我们点击向上移动,那么我们将获得上一页的page_id和disp_order:
$swappage_query = "SELECT page_id, disp_order FROM page WHERE disp_order = :disp_order AND parent_id = :parent_id";
$swappage_result = $db_mysql->prepare( $swappage_query );
if( $_GET['move'] == "up" ) {
$swappage_result->execute( array(
":disp_order" => $page_row['disp_order'] - 1,
":parent_id" => $parent_row['parent_id']
));
} else {
$swappage_result->execute( array(
":disp_order" => $page_row['disp_order'] + 1,
":parent_id" => $parent_row['parent_id']
));
}
$swappage_row = $swappage_result->fetch( PDO::FETCH_ASSOC );
最后,我们将通过更改我们点击的页面和我们正在交换的页面旁边的页面的显示顺序来执行交换:
$neworder_query = "UPDATE page SET disp_order = :disp_order WHERE page_id = :page_id";
$neworder_result = $db_mysql->prepare( $neworder_query );
$neworder_result->execute( array(
":disp_order" => $swappage_row['disp_order'],
":page_id" => $_GET['page_id']
));
$neworder_result->execute( array(
":disp_order" => $page_row['disp_order'],
":page_id" => $swappage_row['page_id']
));
我在这里做的是: