【问题标题】:Modifing Pagination-Sorting Method to Change Rows Per Page修改分页排序方法以更改每页的行数
【发布时间】:2012-05-28 19:16:55
【问题描述】:

您好,我有一个 基于 PHP 的分页和排序方法,效果很好。

我可以根据任何类别进行排序和分页,但在每页的行数方面遇到问题。

我已经使用 GET 方法来获取分页和排序的信息

    if (isset($_GET['rpp'])&& is_numeric($_GET['rpp'])) {
    $rowsperpage = mysql_real_escape_string($_GET['rpp']);
}else{
    $rowsperpage='5';
}
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
   $currentpage = (int) mysql_real_escape_string($_GET['page']);
} else {
   $currentpage = 1;
}
if (isset($_GET['order']) && in_array($_GET['order'], $order)) {
    $orderby = mysql_real_escape_string($_GET['order']);
}else{
    $orderby='id';
}
$sortby = '';
if (isset($_GET['sort'])) {
    $sortby = mysql_real_escape_string($_GET['sort']);
}else{
    $sortby='desc';
}

对于分页,我使用了以下类型的 url 字符串

echo " <li><a href='$pagename?order=$orderby&sort=$sortby&rpp=$rowsperpage&page=$nextpage'>Next&raquo;&raquo;</a>

我的mysql查询是

$sql2 = "SELECT * FROM internet_security ORDER BY $orderby $sortby LIMIT $rowsperpage OFFSET $offset";

在 html 中,我使用链接对类别进行排序,例如

        <a href="?order=id&sort=desc">id-desc:</a>
        <a href="?order=id&sort=asc">id-asc:</a>

        <a href="?order=title&sort=desc">title-desc:</a>
        <a href="?order=title&sort=asc">title-asc:</a>

        **limit rows by**
        <a href="?&rpp=5">5</a>
        <a href="?&rpp=10">10</a>
        <a href="?&rpp=20">20</a>

我的问题是 一切正常,除非我通过限制行限制每页的行 - 行被限制为 limit(5,10,20) 是 selected 但是如果我点击分页每件事都转到其默认设置值,即按 id 和 DESC 顺序,LIMIT 为 5。

如果我喜欢这样做

            <a href="?order=id&sort=desc&rpp=5">id-desc:</a>
            <a href="?order=id&sort=desc&rpp=10">id-desc:</a>            
            <a href="?order=id&sort=desc&rpp=20">id-desc:</a>

然后它可以工作,但我必须至少有 12 个链接才能获得完整功能。这不是标准方法。

我想要的是,一旦通过默认或排序选项设置了限制,我将能够按 id 标题等进行排序。并且 paginatin 应该与它一起工作。

我希望我说清楚了。 请看看我做错了什么,并为我的方法提出任何可能的解决方案。

【问题讨论】:

  • 你需要通过java-script函数构建你的URL,根据你页面中的dom元素动态地做
  • 旁注:mysql_reaL_escape_string(顾名思义)对整数没用,你检查它是一个数字就足够了(你也可以转换成整数)
  • $rpp 存储在$_SESSION 变量中,仅当它存在于$_GET 时才更新。
  • @HAIM EVGI 我正在避免使用 javascript,因为我将在 php 功能开始工作后使用 AJAX。所以即使关闭了 javascript php 也可以接管
  • @Damien Pirsy 把它记下来谢谢。

标签: php mysql html pagination


【解决方案1】:

升级到答案

$rpp 存储在$_SESSION 变量中,仅当它存在于$_GET 时才更新:

    if ( isset($_GET[    'rpp'])) $_SESSION['rpp'] = intval($_GET['rpp']);
elseif (!isset($_SESSION['rpp'])) $_SESSION['rpp'] = 5;

然后在您的查询中使用$_SESSION['rpp']

$sql2 = "
  SELECT   *
  FROM     internet_security
  ORDER BY $orderby $sortby
  LIMIT    $_SESSION[rpp] OFFSET $offset
";

【讨论】:

  • html链接格式怎么样,应该是title-asc:
  • @TallboY:该表单的链接将继续使用现有的每页行数;用户有时需要使用不同的链接(包括&amp;rpp= 部分)来选择他们希望查看的行数。
  • 是的,这就是我要问的,我该怎么做,我不能像 id-desc: 这将再次成为很多链接的问题
  • @TallboY:这确实是一个用户界面问题,关于您希望如何向用户展示每页显示的项目数量的选择。我经常在&lt;form&gt; 上看到一个&lt;select&gt; 下拉框,它要么手动提交,要么通过处理onchange 事件...
  • 如果我使用
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多