【发布时间】:2018-09-08 22:13:01
【问题描述】:
我正在尝试在 Name 上创建一个动态标题,使用户能够按 ASC 或 DESC 排序,结果来自 MySQL 中的“注册”表。我已经尝试了几个编码,但到目前为止还没有给出正确的结果。希望有人能够帮助我:)
我尝试创建另一个变量,但无法创建正确的变量。
<?php
$sql = "SELECT * FROM register";
if($sqlData = mysqli_query($db, $sql)) {
if(mysqli_num_rows($sqlData) > 0) {
echo "<table border ='1' bgcolor='#FFF' width='100%'>";
echo "<tr>";
echo "<th><a href='overview.php?order=name'>Name</a></th>";
echo "<th>Score</th>";
echo "</tr>";
while($row = mysqli_fetch_array($sqlData)) {
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['score'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($sqlData);
} else{
echo "No results in DB";
}
} else{
echo "Error couldn't connect $sql. " . mysqli_error($db);
}
mysqli_close($db);
?>
【问题讨论】:
-
注意:
mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)和$db->prepare("…")过程化接口是 PHP 4 时代引入mysqliAPI 时的产物,不应在新代码中使用。 -
注意:试着改掉在一次性变量中声明 SQL 语句的习惯,这些变量只使用一次。在将查询直接提供给函数的情况下,跟踪代码要容易得多,并且不再有可能搞砸并发送
$sql3而不是视觉上相似的$sql8。 -
为什么不在客户端通过javascript进行列排序呢?有大量的库可以帮助您解决这个问题,因此您不必滚动自己的表格排序代码。还是我误解了这个问题。
-
您要做的最后一件事是返回 php 服务器,该服务器返回 mysql 只是为了在每次有人点击时重新获取具有所需排序的结果。这是不必要的昂贵,作为用户,我会非常沮丧页面重新加载,每次点击时都等待服务器响应。即使重新加载是通过 ajax 响应进行的,当您可以在客户端的 javascript 中进行排序并完成它时,让您的 mysql 服务器一遍又一遍地咳出相同的结果也是很昂贵的。
-
此外,还有一些很棒的库可以制作出非常漂亮的表格,并赋予它各种功能,而不仅仅是 html
。 Like this one that works with bootstrap.
标签: php mysql columnsorting