Javascript HTML表:使用mysql修改订单

Javascript HTML表:使用mysql修改订单,javascript,php,mysql,html-table,Javascript,Php,Mysql,Html Table,我有一个MySQL表: 创建表格“问题” `问题_id`INT无符号主键自动递增, `问题'VARCHAR1024, `订单号'INT ; 在HTML表中显示数据时,数据的顺序按“顺序”列排序。如何在每个表行中使用某种向上/向下按钮来实现递增/递减顺序列 ... <tr> <td><?php echo $question['question_id'] ?></td> <td><?php echo $questi

我有一个MySQL表:

创建表格“问题” `问题_id`INT无符号主键自动递增, `问题'VARCHAR1024, `订单号'INT ; 在HTML表中显示数据时,数据的顺序按“顺序”列排序。如何在每个表行中使用某种向上/向下按钮来实现递增/递减顺序列

...
  <tr>
    <td><?php echo $question['question_id'] ?></td>
    <td><?php echo $question['order'] ?></td>
    <td><button id="up_<?php echo $question['question_id'] ?>">&#x25B2;</button></td>
    <td><button id="down_<?php echo $question['question_id'] ?>">&#x25BC;</button></td>
    <td><?php echo $question['question'] ?></td>
  </tr>
...

将此添加到MySQL查询的末尾,然后按顺序将旧查询的其余部分添加到此处$分类

您需要创建标记为up/down或类似的链接,以便将参数传递给脚本,从而对结果进行排序

例如:

然后,在PHP脚本中,在查询之前:

$sort = ''; // Default order ascending (auto)
if ( isset ( $_GET [ 'sort' ] ) )
{
   if ( $_GET [ 'sort' ] == 'desc' )
   {
      $sort = 'DESC';
   }
}
说明:


默认情况下,MySQL按升序排列结果,因此我们通常不需要向查询添加任何内容$sort=;。但是,如果用户单击降序链接,PHP会将$sort设置为DESC,MySQL会将结果降序

如果需要手动订单,则需要在数据库中添加一列来描述该订单。可能是一个具有唯一性约束的整数列,您似乎已经具有该约束,但没有该约束

然后,您可以在发出的SELECT查询中按该列排序

要更改顺序时,需要交换要交换的行的值。您可能需要将其中一个设置为占位符值,然后将另一个设置为第一个的旧值,然后将第一个设置为第二个的旧值

这可以通过为每一行创建一个表单来实现,该表单包含一个带有行id的隐藏输入,以及向上/向下提交按钮。然后,在服务器端代码中,可以根据单击的按钮将行id与行id+1或-1交换


您可以添加JavaScript和Ajax技术来改善用户体验。

这段代码应该是技巧的一部分。有任何问题,请发表评论

<?php

mysql_connect('localhost', 'xxxxxx', 'xxxxxxxxxxxx');

if(isset($_GET['q'])){
  $qid = $_GET['q'];
  $act = $_GET['act'];
  $sql = "SELECT `order` FROM test.questions WHERE question_id = '$qid'";
  $rs = mysql_query($sql);
  $r = mysql_fetch_array($rs);
  $order = $r['order'];
  if($act == 'up'){
    if($order == '1') break;
    $up_order = $order - 1;
    $sql = "SELECT question_id FROM test.questions WHERE `order` = '$up_order'";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $up_order_id = $r['question_id'];
    $sql = "UPDATE test.questions SET `order` = '$up_order' WHERE question_id = '$qid'";
    mysql_query($sql);
    $sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$up_order_id'";
    mysql_query($sql);
  } else if($act == 'down'){
    $sql = "SELECT MAX(`order`) as `order` FROM test.questions";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $max_order = $r['order'];
    if($order == $max_order) break;
    $down_order = $order + 1;
    $sql = "SELECT question_id FROM test.questions WHERE `order` = '$down_order'";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $down_order_id = $r['question_id'];
    $sql = "UPDATE test.questions SET `order` = '$down_order' WHERE question_id = '$qid'";
    mysql_query($sql);
    $sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$down_order_id'";
    mysql_query($sql);
  }
  $sql = "";
}

$sql = "SELECT * FROM test.questions ORDER BY `order`;";
$rs = mysql_query($sql);
echo "<table>";
while(false !== ($r = mysql_fetch_array($rs))){
   echo "<tr>";
      echo "<td>$r[question_id]</td>";
      echo "<td>$r[question]</td>";
      echo "<td>$r[order]</td>";
      echo "<td><a href='?q=$r[question_id]&act=up'>UP</a> - <a href='?q=$r[question_id]&act=down'>DOWN</a></td>";
   echo "</tr>";
}
echo "</table>";
?>

您可以在查询中按“顺序”部分定义它,如:

ORDER BY first_order,second_order,second_order`

但是!如果你想在你的表上有一些类似按钮的东西,你可以在你的表中有一个动态排序,你可以使用一些JQUERY插件,你可以在这里引用它:

你可以使用JQUERY+JQUERY UI排序表而不是订单列。请参见此处:

如果您的字段实际上被称为order,您需要在字段周围添加backticks`作为order,嗯,发送得太早了,抱歉。order是一个mysql关键字,反勾号将其标记为一个字段名。没问题,我以前也想过在其周围添加引号。是的,正如David Dorward所说。我需要一个UI来手动排序表,而不是排序列。无论如何,谢谢你是的,我意识到了SQL注入问题和其他几个安全问题。但是,这不是问题所在。根据描述:有没有一种方法可以使用按钮上下移动来更改“订单”,然后更新数据库中的订单?。他/她想更新字段“顺序”,而不是如何对他的问题排序@辛:我的答案不是关于列的排序。这是关于更改表格/问题的顺序。