【问题标题】:PHP-Modifing Pagination for SortingPHP-修改分页以进行排序
【发布时间】:2012-05-27 21:20:45
【问题描述】:

嗨,我是一名新程序员。

我有一个简单的分页工作正常, 我有 sorting 选项,用于按 id、title 等对我的记录集结果进行排序,这也 工作正常,代码如下。

现在我想将两者结合,并具有分页应该在两种情况下都可以工作的功能。

也就是说,默认情况下显示记录集结果时,分页应该像以前一样工作。 当记录集结果按选项排序时,分页也应该对排序结果起作用。

我想通了,代码如下,但我无法让它工作。

我的记录集和基本分页排序代码是:

<?php 
$table='mytable';
$pagename = "is-test.php";
$db = mysql_select_db($database,$connection) or trigger_error("SQL", E_USER_ERROR);
$sql1 = "SELECT COUNT(*) FROM $table";
$result1 = mysql_query($sql1, $connection) or trigger_error("SQL", E_USER_ERROR);
$row = mysql_fetch_row($result1);
$numrows = $row[0];
$rowsperpage = 5;
$totalpages = ceil($numrows / $rowsperpage);
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
$currentpage = (int) mysql_real_escape_string($_GET['page']);
} else {
$currentpage = 1;
}
if ($currentpage > $totalpages) {
$currentpage = $totalpages;
}
if ($currentpage < 1) {
$currentpage = 1;
}
$orderBy = array('id', 'title',);
$order = '';
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) {
$order = mysql_real_escape_string($_GET['orderBy']);
}else{
$order='id';
}
$offset = ($currentpage - 1) * $rowsperpage;
$sql2 = "SELECT * FROM $table ORDER BY $order ASC LIMIT $offset, $rowsperpage";
$result2 = mysql_query($sql2, $connection) or trigger_error("SQL", E_USER_ERROR);
$list = mysql_fetch_assoc($result2);
$startrow = ($currentpage-1) * $rowsperpage

我的排序选项代码:

         Sort by
        <a href="?orderBy=id">id:</a>        

        <a href="?orderBy=title">title:</a>

我的分页代码是:

if ($currentpage != $totalpages) {
$nextpage = $currentpage + 1;
echo " <li><a href='$pagename?page=$nextpage'>Next&raquo;&raquo;</a></li> ";
}

if($currentpage<$totalpages){
for ($x = ($currentpage - 3); $x < (($currentpage + 3) + 1); $x++) {
if (($x > 0) && ($x <= $totalpages)) {
if ($x == $currentpage) {
echo " <li id='pcurrent'><a href='$pagename?page=$x'>$x</a></li>";
} else {
echo " <li><a href='$pagename?page=$x'>$x</a></li> ";
}}}  
}

if ($currentpage > 1){
$prevpage = $currentpage - 1;
echo " <li><a href='$pagename?page=$prevpage'>&laquo;&laquo;Prev</a></li> ";
} 

到目前为止,一切都在工作,除了分页只分页默认记录集结果未排序记录集结果,因为我必须更改分页的 url 参数才能处理排序结果, 所以我将分页链接更改为

if ($currentpage != $totalpages) {
$nextpage = $currentpage + 1;
echo " <li><a href='$pagename?orderBy=$order,page=$nextpage'>Next&raquo;&raquo;</a></li> ";
}

if($currentpage<$totalpages){
for ($x = ($currentpage - 3); $x < (($currentpage + 3) + 1); $x++) {
if (($x > 0) && ($x <= $totalpages)) {
if ($x == $currentpage) {
echo " <li id='pcurrent'><a href='$pagename?orderBy=$order,page=$x'>$x</a></li>";
} else {
echo " <li><a href='$pagename?orderBy=$order,page=$x'>$x</a></li> ";
}}}  
}

if ($currentpage > 1){
$prevpage = $currentpage - 1;
echo " <li><a href='$pagename?page=$prevpage'>&laquo;&laquo;Prev</a></li> ";
} 

即在链接中添加 orderBy=$order 进行分页,但分页现在不起作用, 不在默认记录集结果上,也不在排序记录集结果上。

请看看我做错了什么

【问题讨论】:

    标签: php mysql html pagination


    【解决方案1】:

    我没有阅读完整的代码,但您的查询字符串中至少有一个错误。每个 GET 参数都应该用“&”而不是“,”来分隔。从

    更改您的代码
    '?orderBy=$order,page=$nextpage' 
    

    '?orderBy=$order&page=$nextpage' 
    

    至少应该修复这个错误。

    你应该把error_reporting(E_ALL);在代码的开头查看来自 php 的通知(这会对您有很大帮助)。如果之后仍然无法正常工作,您应该使用

    调试您的 GET 参数
    <?php var_dump($_GET); ?>
    

    【讨论】:

    • 伙计,你是救生员。非常感谢。
    • 还看看上面有什么方法可以防止 sql 注入我已经使用 mysql_real_escape_string 用于 _GET 是使其成为注入证明
    • 使用 mysql_real_escape_string 转义 $order 绝对是个好主意。在 $page 上使用它是可选的,因为无论如何您都将它转换为整数
    • 嗨,你能告诉我如何在查询中以同样的方式进一步对 ASC 和 DESC 中的 id 和 title 进行排序。
    • 我想通了,刚刚在 mysql 查询的 ASC 部分实现 &sort 并使用 sortby=&sort 修改 url 得到它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2020-12-08
    • 1970-01-01
    • 2014-03-17
    • 2015-03-01
    • 2011-09-12
    • 2012-04-25
    相关资源
    最近更新 更多