【问题标题】:PHP & MySQL pagination display problemPHP & MySQL分页显示问题
【发布时间】:2013-01-07 22:59:29
【问题描述】:

我昨天问了一个类似的问题,但在等待之后,我发现了部分问题,但现在我又卡住了,当搜索结果太长时,我试图显示 ...,因为我的分页链接将继续显示并且在页面上显示每个链接之前不会停止。

例如,我试图在下面的示例中实现以下目标。有人可以帮我修复我的代码,以便我可以更新我的网站。谢谢

这就是我希望能够做到的。

First Previous 1 2 ... 5 6 7 8 9 10 11 12 13 ... 199 200 Next Last 

这是显示链接的分页代码。

$display = 20;

if (isset($_GET['p']) && is_numeric($_GET['p'])) {

    $pages = $_GET['p'];

} else {

    $q = "SELECT COUNT(id) FROM comments WHERE user_id=3";
    $r = mysqli_query ($mysqli, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli));
    $row = mysqli_fetch_array ($r, MYSQLI_NUM);
    $records = $row[0];

    if ($records > $display) {
        $pages = ceil ($records/$display);
    } else {
        $pages = 1;
    }

}

if (isset($_GET['s']) && is_numeric($_GET['s'])) {
    $start = $_GET['s'];
} else {
    $start = 0;
}
    //content goes here

if ($pages > 1) {

    echo '<br /><p>';

    $current_page = ($start/$display) + 1;

    if ($current_page != 1) {
        echo '<a href="index.php">First</a>';
    }

    if ($current_page != 1) {
        echo '<a href="index.php?s=' . ($start - $display) . '&p=' . $pages . '">Previous</a> ';
    }

    for ($i = 1; $i <= $pages; $i++) {
        if ($i != $current_page) {
            echo '<a href="index.php?s=' . (($display * ($i - 1))) . '&p=' . $pages . '">' . $i . '</a> ';
        } else {
            echo '<span>' . $i . '</span> ';
        }
    }

    if ($current_page != $pages) {
        echo '<a href="index.php?s=' . ($start + $display) . '&p=' . $pages . '">Next</a>';
    }

    if ($current_page != $pages) {
        echo '<a href="index.php?s=' . ($pages - 1) . '&p=' . $pages . '">Last</a>';
    }

    echo '</p>';

}

【问题讨论】:

  • 哇,你很有耐心:“我昨天问了一个类似的问题,但在等了很久之后,我发现了问题的一部分......”我猜所有这些人都是你花钱来帮助的需要下车并做出回应。鼓励免费援助的方式。
  • 你的其他问题怎么了?我在您的问题历史中没有看到它...
  • @MJB 我只是在寻求帮助并陈述事实,所有帮助总是值得赞赏的,但任何人的聪明评论都不是:)
  • @TaG:当你的问题只是昨天的时候,我觉得说你永远等待是一个聪明的评论。所以我认为你根本不是在陈述事实——恰恰相反。

标签: php mysql pagination


【解决方案1】:

只使用这样的东西来代替循环:

  if($current_page > 8 && $pages > 11) {
    echo '<a href="index.php?s=0&p=' . $pages . '">1</a> ';
    echo '<a href="index.php?s='.$display.'&p=' . $pages . '">2</a> ';
    echo '...';
  }
  for ($i = max(1, $current_page - 4); $i < min($current_page + 4, $pages); $i ++) {
    echo '<a href="index.php?s=' . (($display * ($i - 1))) . '&p=' . $pages . '">' . $i . '</a> ';
  }
  if ($current_page < $pages - 8 && $pages > 11) {
    echo '...';
    echo '<a href="index.php?s=' . ($display * ($pages - 1)) . '&p=' . $pages . '">' . ($pages - 1) . '</a> ';
    echo '<a href="index.php?s=' . ($display * $pages) . '&p=' . $pages . '">' . $pages  . '</a> ';

  }

【讨论】:

  • 啊,抱歉 $s 在所有条件和循环中都应该被 $current_page 替换。我会编辑它。
  • 我更正了$s,我认为您的意思是$start,但分页链接显示为1 1 1 1 1 1 1 1 ...-2 200,并且都显示相同的页面。
  • 好的,现在试试,我编辑了代码,希望它可以工作。
  • 我使用了$current_page 与我之前所说的相同的问题,但我现在得到了这个3 -2 -1 0 1 2 3 4 ...-2 200 并且链接是不存在的负面链接。
  • 您是否也更改了for 循环中的行?
猜你喜欢
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多