按HTML表列对查询结果排序
Sort query results by HTML table column
我正在寻找一种更高效的, 优雅的和安全的方式来排序HTML表内显示的数据。这是我到目前为止想到的,它看起来有点臃肿/无聊。
我还想到了一些东西,比如将排序存储在$_SESSION
中,这样我就不必在URL中"手动"将当前选择的顺序传递到下一页。也许一个"安全简单"的JavaScript+PHP片段(但请不要框架)会有意义?现在我的思绪一转就是好几个小时。
<?php
$ro_arr = array(
"kid" => "kid",
"kwd" => "Keyword",
"cpc" => "ApproximateCPC",
"cmp" => "Competition",
"mov" => "MonthlyValue",
"gms" => "GlobalMonthlySearches",
"lms" => "LocalMonthlySearches",
"dfc" => "KeywordDifficulty",
"com" => "com",
"net" => "net",
"org" => "org",
);
if (!empty($_GET['ro']) && strlen($_GET['ro']) == 7 && array_key_exists($col = substr($_GET['ro'], 0, 3), $ro_arr)) {
$dir = (substr($_GET['ro'], 4, 3) == 'asc' ? "ASC" : "DESC");
$res_order = $res_arr[''. $col .''] ." ". $dir;
} else {
$_GET['ro'] = "kid_asc";
$res_order = "kid ASC";
}
?>
<!-- just for testing -->
<pre><?php echo $res_order; ?></pre>
<!-- done testing -->
<table>
<tr>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='kwd_asc')?"kwd_dsc":"kwd_asc"; ?>">Keyword</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='cmp_dsc')?"cmp_asc":"cmp_dsc"; ?>">Comp.</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='cpc_dsc')?"cpc_asc":"cpc_dsc"; ?>">Ad CPC</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='mov_dsc')?"mov_asc":"mov_dsc"; ?>">Value</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='gms_dsc')?"gms_asc":"gms_dsc"; ?>">Global Searches</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='lms_dsc')?"lms_asc":"lms_dsc"; ?>">Local Searches</a></td>
<td><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='dfc_asc')?"dfc_dsc":"dfc_asc"; ?>">Difficulty</a></td>
<td width="22"><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='com_dsc')?"com_asc":"com_dsc"; ?>">com</a></td>
<td width="22"><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='net_dsc')?"net_asc":"net_dsc"; ?>">net</a></td>
<td width="22"><a href="sort.v1.php?ro=<?php echo ($_GET['ro']=='org_dsc')?"org_asc":"org_dsc"; ?>">org</a></td>
</tr>
</table>
如果您使用两个参数而不是一个,则可以将代码量减少到几乎一半:
- 要排序的参数:kid, com, net, org…
- 订单:asc, dsc
如果您的表不是太大,并且您不反对使用jQuery,请使用tablsorter。一旦达到数千行,客户端排序就会变得有点不方便。
相关文章:
- 如何将这些查询结果放入表中
- 如何在下拉列表更改时自动填充mysql查询结果中的文本框值
- 将数据库中的超链接添加到查询结果
- 为什么我的文本框没有用查询结果更新
- 使用jquery显示mysql查询结果
- 如何使用 angularjs 以表格格式显示 parse.com 的查询结果
- Meteor:在模板接受Mongo查询结果之前修改它的最佳实践
- 未捕获的范围错误:WebSQL查询结果中的项索引超出范围错误
- 表单提交后保留数据库查询结果
- 需要循环遍历一系列mysql查询结果
- OrientDB:在服务器端函数中访问查询结果数据
- Firebase 删除查询结果
- MongoDB查询结果作为循环控制器
- j查询结果不显示,除非我按“后退”按钮
- J查询结果显示问题
- 为什么脚本 Db 查询结果对象不同
- 从包含的 php 文件刷新查询结果
- 实现我的 Javascript 函数到数据库查询结果
- 通过输入键(不起作用)或搜索按钮(工作)查询结果
- 从 JSON(db 查询结果)加载大型 javascript 数组而不会使页面崩溃