Javascript HTML表:使用mysql修改订单
我有一个MySQL表: 创建表格“问题” `问题_id`INT无符号主键自动递增, `问题'VARCHAR1024, `订单号'INT ; 在HTML表中显示数据时,数据的顺序按“顺序”列排序。如何在每个表行中使用某种向上/向下按钮来实现递增/递减顺序列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
...
<tr>
<td><?php echo $question['question_id'] ?></td>
<td><?php echo $question['order'] ?></td>
<td><button id="up_<?php echo $question['question_id'] ?>">▲</button></td>
<td><button id="down_<?php echo $question['question_id'] ?>">▼</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注入问题和其他几个安全问题。但是,这不是问题所在。根据描述:有没有一种方法可以使用按钮上下移动来更改“订单”,然后更新数据库中的订单?。他/她想更新字段“顺序”,而不是如何对他的问题排序@辛:我的答案不是关于列的排序。这是关于更改表格/问题的顺序。