2014-05-24 243 views
1

我有我打印为html表格,用JS打印数据的mysql表格,并拖拽& drop我可以对表格进行localy排序,然后我能够发送ajax到服务器,什么是保存排序行更改的最佳方法?应该在ajax请求中应该运行什么sql查询?保存排序到sql的最佳方式是什么?

回答

1

您的MySQL表中可能有order字段。该值是代表你行的顺序,这样的整数:

my_table 

| ID | NAME | ORDER | 
|----|--------|-------| 
| 0 | john | 2 | 
| 1 | henry | 1 | 
| 2 | suzan | 3 | 

所以每次你保存你的数据,你发送你的HTML表格与阿贾克斯的数据和for循环更新你的MySQL场order。在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); 
    } 
} 

在你的PHP文件中的MySQL的请求调用Ajax的应该是:

<?php 

    mysql_query("UPDATE my_table 
        SET order = '".$_POST['order']."' 
       WHERE id = '".$_POST['id']."';"); 

?> 

最后,用MySQL来获得正确的顺序数据:

SELECT * FROM my_table ORDER BY order; 
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注入的证明。

相关问题