关于列表中某一个记录提前或者置后的实现方法的提问 没什么。设置字段ordering存放顺序号。按ordering取出数据。提交它的id,ordering,上一个id,上一个id的ordering,下一个id,下一个id的ordering 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不同意faisun(暖阳) 的说法,十几条记录你就操作的简单,几百条,几千条呢?我最初的想法是取两个记录出来,然后把他们的ORDER字段互换继续咨询 “在客户端先用 js 脚本上下移动,移好后再把结果提交到数据库”想法很好!!!测试例<form><input type=submit><table width="75%" border="1"> <tr> <td>ID</td> <td ondragstart="alert('s')">名称</td> <td ondragend="alert('e')">操作</td> </tr> <tr> <td>1</td> <td>测试一</td> <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=1></td> </tr> <tr> <td>2</td> <td>测试二</td> <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=2></td> </tr> <tr> <td>3</td> <td>测试三</td> <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=3></td> </tr> </table></form><script>function up(o) { // 上移 var el = o.parentElement.parentElement; // 获得TR对象 var n = el.rowIndex; // 取得所在行 if(n == 1) return; // 到顶不移,第一行不动 do { el = el.parentElement; }while(el.parentElement.tagName != "TABLE"); // 上溯到TABLE el.moveRow(n-1,n); // 移动行}function down(o) { // 下移 var el = o.parentElement.parentElement; var n = el.rowIndex; do { el = el.parentElement; }while(el.parentElement.tagName != "TABLE"); if(n >= el.rows.length-1) return; // 到底不移 el.moveRow(n,n+1);}</script> 看楼主的意思应该是新闻的管理后台吧?如果列表的条目是数据库中的记录的话,用js排完序只是在客户端有效,访问的时候显示的还是老样子,因为数据库没有变化。我认为还是需要用一个排序字段来实现。在读取记录的时候按照排序字段排序,并在循环的时候用两个变量分别保存上一条记录的id和排序字段的值,提交当前记录和上一条记录的id和排序字段值,在数据库内将这两条记录的排序字段互换。 xuzuning(唠叨): 那如果是记录要分页的情况下怎么处理呢?第二页的第一条记录上移的话,应该是移动到第一页的最后一条记录了... 呵呵,唠叨应该是白忙了。楼主应该问的是PHP程序代码。 我是这么处理的,发个代码片段给大家瞧瞧,本代码经过运行测试成功 case "up_1"; // $mylink=mysql_connect($dbhost,$dbuser,$dbpasswd); mysql_select_db($dbname,$mylink); $sql="select * from tb_menu where Menu_Layer=1 order by Menu_Order desc"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { $arry[]=$row[0]; $arry2[]=$row[6]; } $Arraynum=count($arry); for($i=0;$i<$Arraynum;$i++) { if($arry[$i]==$Menu_Id) //$Menu_Id 是tb_menu主Id编号 { $M_id1=$arry[$i]; $M_o1=$arry2[$i]; $M_id2=$arry[$i+1]; $M_o2=$arry2[$i+1]; } } $sql2 = "UPDATE tb_menu SET Menu_Order='$M_o2' where Id='$M_id1'"; $result2=mysql_query($sql2); $sql3 = "UPDATE tb_menu SET Menu_Order='$M_o1' where Id='$M_id2'"; $result3=mysql_query($sql3); if($result2==1 and $result3==1) echo "<script language=javascript>window.location.href='menu.php';</script>"; else echo "<script language=javascript>alert('Failed Modify!');history.go(-1);</script>"; break;参数这么传递:<A href="menu.php?action=up_1&Menu_Id=<?php echo $myarray["Id"];?>">↑</a> 哈哈,我很快也要做这个,类似,一个题目排序程序(不过数量就很少,一般不过百)以前的做法是这样:取得所有相连要排序的记录客户端排序,然后提交全部update但现在觉得这方法不好,正在想其他办法 由于PHP自身的技术问题所以做这个排序感觉没有ASP来的容易我解释一下上面那段代码:将字段Id和Menu_Order的记录分两个数组读入然后根据当前提交的ID进行重新编号得到相邻的两个记录再将记录1和记录2的Menu_Order进行交换排序就成功了 我的想法表id int auto_increment...num int (排序ID)在添加文章的时候 得出当前ID然后 将当前ID的值插入排序ID num 中这样 在排序的时候 ↑ update table set num = num +1 where id='$id'↓ update table set num = num -1 where id='$id'select * from table order by num desc 就可以了 刚学PHP 可以用JS来解决 就和ASP 一样 怎么升级PHP????各种纠结啊 关于引号的转换 武汉哪里PHP培训比较正规 关于表单验证函数的不解 phpreports 关于DZ的Authcode函数转JS版的问题。 如何实现文件上传功能? 问两个问题 求用PHP的GD图库作饼图的程序代码? 请教一个历史同期数据对比的问题 初学者高分寻求答案(超简单) 如何一同输出变量名和它的值?
想法很好!!!
测试例
<form>
<input type=submit>
<table width="75%" border="1">
<tr>
<td>ID</td>
<td ondragstart="alert('s')">名称</td>
<td ondragend="alert('e')">操作</td>
</tr>
<tr>
<td>1</td>
<td>测试一</td>
<td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=1></td>
</tr>
<tr>
<td>2</td>
<td>测试二</td>
<td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=2></td>
</tr>
<tr>
<td>3</td>
<td>测试三</td>
<td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=3></td>
</tr>
</table>
</form><script>
function up(o) { // 上移
var el = o.parentElement.parentElement; // 获得TR对象
var n = el.rowIndex; // 取得所在行
if(n == 1) return; // 到顶不移,第一行不动
do {
el = el.parentElement;
}while(el.parentElement.tagName != "TABLE"); // 上溯到TABLE
el.moveRow(n-1,n); // 移动行
}function down(o) { // 下移
var el = o.parentElement.parentElement;
var n = el.rowIndex;
do {
el = el.parentElement;
}while(el.parentElement.tagName != "TABLE");
if(n >= el.rows.length-1) return; // 到底不移
el.moveRow(n,n+1);
}
</script>
如果列表的条目是数据库中的记录的话,用js排完序只是在客户端有效,访问的时候显示的还是老样子,因为数据库没有变化。
我认为还是需要用一个排序字段来实现。在读取记录的时候按照排序字段排序,并在循环的时候用两个变量分别保存上一条记录的id和排序字段的值,提交当前记录和上一条记录的id和排序字段值,在数据库内将这两条记录的排序字段互换。
mysql_select_db($dbname,$mylink);
$sql="select * from tb_menu where Menu_Layer=1 order by Menu_Order desc";
$result = mysql_query($sql); while ($row = mysql_fetch_array($result))
{
$arry[]=$row[0];
$arry2[]=$row[6];
}
$Arraynum=count($arry);
for($i=0;$i<$Arraynum;$i++)
{
if($arry[$i]==$Menu_Id) //$Menu_Id 是tb_menu主Id编号
{
$M_id1=$arry[$i];
$M_o1=$arry2[$i];
$M_id2=$arry[$i+1];
$M_o2=$arry2[$i+1];
}
}
$sql2 = "UPDATE tb_menu SET Menu_Order='$M_o2' where Id='$M_id1'";
$result2=mysql_query($sql2);
$sql3 = "UPDATE tb_menu SET Menu_Order='$M_o1' where Id='$M_id2'";
$result3=mysql_query($sql3);
if($result2==1 and $result3==1) echo "<script language=javascript>window.location.href='menu.php';</script>";
else echo "<script language=javascript>alert('Failed Modify!');history.go(-1);</script>"; break;
参数这么传递:<A href="menu.php?action=up_1&Menu_Id=<?php echo $myarray["Id"];?>">↑</a>
客户端排序,然后提交全部update但现在觉得这方法不好,正在想其他办法
所以做这个排序感觉没有ASP来的容易我解释一下上面那段代码:
将字段Id和Menu_Order的记录分两个数组读入
然后根据当前提交的ID进行重新编号
得到相邻的两个记录
再将记录1和记录2的Menu_Order进行交换
排序就成功了
↑ update table set num = num +1 where id='$id'
↓ update table set num = num -1 where id='$id'select * from table order by num desc 就可以了
可以用JS来解决 就和ASP 一样