Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对从MySQL调用的HTML表行进行排序_Php_Mysql_Html Table - Fatal编程技术网

Php 如何对从MySQL调用的HTML表行进行排序

Php 如何对从MySQL调用的HTML表行进行排序,php,mysql,html-table,Php,Mysql,Html Table,我知道这是一件很基本的事情,但是谷歌搜索没有告诉我在点击th链接后如何重新排序行 我有这个: <table border="1"> <tr> <th>Type:</th> <th>Description:</th> <th>Recorded Date:</th> <th>Added Date:</th> </tr> <

我知道这是一件很基本的事情,但是谷歌搜索没有告诉我在点击
th
链接后如何重新排序行

我有这个:

<table border="1">
  <tr>
    <th>Type:</th>
    <th>Description:</th>
    <th>Recorded Date:</th>
    <th>Added Date:</th>
  </tr>

<?php 
while($row = mysql_fetch_array($result)){
    ?>
    <tr>
        <td><?php echo $row['type'] ?></td>
        <td><?php echo $row['description'] ?></td>
        <td><?php echo $row['recorded_date'] ?></td>
        <td><?php echo $row['added_date'] ?></td>
    </tr>
    <br /> 


  <?php 
}
mysql_close();
?>
</table>

类型:
说明:
记录日期:
新增日期:


我需要能够单击
键入
并按字母顺序排序,然后单击
记录日期
添加日期
并按日期排序。我知道我需要让MySQL查询完成这项工作,但是我是否要用
a href
标记将它们设置为条件语句

最简单的方法是在列标题上添加指向同一页面的链接。在查询字符串中,放置一个变量,以便知道他们单击了什么,然后在SQL查询中使用ORDER BY来执行排序

HTML将如下所示:

<th><a href="mypage.php?sort=type">Type:</a></th>
<th><a href="mypage.php?sort=desc">Description:</a></th>
<th><a href="mypage.php?sort=recorded">Recorded Date:</a></th>
<th><a href="mypage.php?sort=added">Added Date:</a></th>
<?php

$sql = "SELECT * FROM MyTable";

if ($_GET['sort'] == 'type')
{
    $sql .= " ORDER BY type";
}
elseif ($_GET['sort'] == 'desc')
{
    $sql .= " ORDER BY Description";
}
elseif ($_GET['sort'] == 'recorded')
{
    $sql .= " ORDER BY DateRecorded";
}
elseif($_GET['sort'] == 'added')
{
    $sql .= " ORDER BY DateAdded";
}

$>

在php代码中,执行如下操作:

<th><a href="mypage.php?sort=type">Type:</a></th>
<th><a href="mypage.php?sort=desc">Description:</a></th>
<th><a href="mypage.php?sort=recorded">Recorded Date:</a></th>
<th><a href="mypage.php?sort=added">Added Date:</a></th>
<?php

$sql = "SELECT * FROM MyTable";

if ($_GET['sort'] == 'type')
{
    $sql .= " ORDER BY type";
}
elseif ($_GET['sort'] == 'desc')
{
    $sql .= " ORDER BY Description";
}
elseif ($_GET['sort'] == 'recorded')
{
    $sql .= " ORDER BY DateRecorded";
}
elseif($_GET['sort'] == 'added')
{
    $sql .= " ORDER BY DateAdded";
}

$>

这其实很简单,这里有一个可能的方法:

<table>
    <tr>
        <th>
            <a href="?orderBy=type">Type:</a>
        </th>
        <th>
            <a href="?orderBy=description">Description:</a>
        </th>
        <th>
            <a href="?orderBy=recorded_date">Recorded Date:</a>
        </th>
        <th>
            <a href="?orderBy=added_date">Added Date:</a>
        </th>
    </tr>
</table>
<?php
$orderBy = array('type', 'description', 'recorded_date', 'added_date');

$order = 'type';
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) {
    $order = $_GET['orderBy'];
}

$query = 'SELECT * FROM aTable ORDER BY '.$order;

// retrieve and show the data :)
?>


一个简单的表排序PHP代码:

(使用此脚本处理和排序多个值的简单表)


t车身tr td{颜色:绿色;右边框:1px实心;宽度:200px;}

你好,用户。把你的价值观

projectX
到期金额
工程量 总计=111111111仍需花费=55555

来源:

//这是一个php文件
链接{颜色:绿色;}
a:访问{颜色:紫色;}
A:活动{颜色:红色;}
A:悬停{颜色:红色;}
桌子
{
宽度:50%;
身高:50%;
}
表,th,td
{
边框:1px纯黑;
}
th,td
{
文本对齐:居中;
背景颜色:黄色;
}
th
{
背景颜色:绿色;
颜色:白色;
}
功能工作(str)
{
如果(str==“”)
{
document.getElementById(“tump”).innerHTML=“”;
返回;
} 
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“tump”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getsort.php?q=“+str,true”);
xmlhttp.send();
}
挑选
身份证件
名称
电子邮件
密码

这是最简单的解决方案,使用:

//加载页面时,将此作为第一行

$sort = $_GET['s'];
//然后简单地根据该变量进行排序

$sql="SELECT * FROM tracks ORDER BY $sort";

echo '<tr>';
echo '<td><a href="report_tracks.php?s=title">Title</a><td>';
echo '<td><a href="report_tracks.php?s=album">Album</a><td>';
echo '<td><a href="report_tracks.php?s=artist">Artist</a><td>';
echo '<td><a href="report_tracks.php?s=count">Count</a><td>';
echo '</tr>';
$sql=“按$sort从曲目顺序选择*”;
回声';
回声';
回声';
回声';
回声';
回声';

这取决于数据的性质。答案因其大小和数据类型而异。我看到了很多基于
ORDER BY
的SQL解决方案。我想建议javascript的替代方案

在所有答案中,我没有看到任何人提到您未来表格的分页问题。让我们让你更容易。如果您的表没有分页,则更有可能是javascript解决方案使客户端的所有内容都整洁干净。如果您认为这个表在放入数据后会爆炸,那么您还必须考虑分页。(每次更改排序列时都必须转到第一页)

另一个方面是数据类型。如果使用SQL,则必须注意数据的类型以及数据的排序方式。例如,如果在一个VARCHAR列中存储整数,排序将不考虑它们的整数值:您将得到
1,11,22
,而不是
1,11,2,22


你可以在谷歌上找到jquery插件。值得一提的是,HTML5中的
具有
sortable
属性,但显然它尚未实现

绝对没有可能的SQL注入,仔细看看!白名单上列出了可能的排序依据。我没有投反对票,但出于某种原因,我不记得第一次看到你的答案时支票就在那里。然而,我可能只是错过了它,其他一些人也可能错过了它。我比我更喜欢你的风格,所以我也给了你一张赞成票。@Kibbee你没有把它错当成Sarfraz的尝试吧?他现在删除了,但有sql注入问题?不,我仍然看到Sarfraz的答案。我可能把这两个问题弄糊涂了。出于某种原因,我记得查询和$\u GET的直接连接。我想我错过了一些东西,其他人可能也错过了。我最喜欢这个答案,但是我只是添加了DELETE添加了_date='some date',SQL注入删除了记录。。。有人能帮我防止这个吗???嗯。我遇到了一个语法错误:语法错误,第一个“if”语句的意外T_等于。是的,我的语法可能不完美。我想现在已经修好了。我自己无法编辑,但我发现了错误。主要的一点是,您需要的是$sql,而不是sql。此外,我的表名在几列上也不同。但是,谢谢你这么做!它给了我正确的答案!编辑以修复语法问题。PHP不是我每天使用的语言。好久没用了。那些美元总是让我受骗。我总是觉得必须用一个特殊的字符来开始变量真的很烦人。想不出为什么需要它。我想不出还有哪种语言需要这样的东西。很好。您可以使用此映射将其晾干:$order=array(“type”=>array(“type”,“type”),“desc”=>array(“Description”,“Description”),…);通过循环,您既可以在循环中生成表头,也可以直接将order参数映射到列。每个记录或行都是一个不同的表。这个解决方案也适用吗?