我有mysql表的数据,我打印为html表,用JS和拖放我可以对该表进行排序,然后我可以将ajax发送到服务器,保存排序行更改的最佳方法是什么?什么应该在ajax请求和我应该运行什么SQL查询?
答案 0 :(得分:1)
你的MySQL表中可能有一个order
字段。值是整数,表示行的顺序,如下所示:
my_table
| ID | NAME | ORDER |
|----|--------|-------|
| 0 | john | 2 |
| 1 | henry | 1 |
| 2 | suzan | 3 |
因此,每次保存数据时,都会通过在HTML表上使用ajax和order
循环发送数据来更新MySQL字段for
。在JS中,类似于:
function update()
{
//get your table
var table = document.getElementById(my_table);
//for loop on the table rows
for(var i=0;i<table.rows.length;i++)
{
//get your data id
var id = rows[i].cells[0];
//get your order index
var order = rows[i].cells[1];
//send in ajax
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status==200)
{
//update confirm message
alert('update ok');
}
}
xhr.open('POST', 'update.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('id='+id+'&order='+order);
}
}
使用Ajax调用的php文件中的MySQL请求应为:
<?php
mysql_query("UPDATE my_table
SET order = '".$_POST['order']."'
WHERE id = '".$_POST['id']."';");
?>
最后,要使用MySQL以正确的顺序获取数据:
SELECT * FROM my_table ORDER BY order;
答案 1 :(得分:0)
如果我理解正确,你需要发送带有ajax请求的2个额外变量:列名和排序顺序如:
....&col=col2&sort=descending
然后,在PHP中:
$columns = array('col1'=>'column_name_in_table',
'col2'=> 'second_column_name_in_table',
'colx'=> 'column_x_name_in_table',);
$sortorder = array('ascending'=>'asc','descending'=>'desc');
$query .= "ORDER BY ".$columns[$_POST['col']]." ".$sortorder[$_POST['sort']];
您还需要额外的检查,但至少这些数组确保代码的这一部分是SQL注入证明。