【问题标题】:PHP Pagination Get Last PagePHP分页获取最后一页
【发布时间】:2016-08-23 10:26:36
【问题描述】:

基本上我正在尝试获取最后一页......而且有时它工作得很好但是然后说输入了一些数据然后它得到了错误的页面并且输入了更多的数据然后会出现正确的页面我很确定它有一些东西与 $r 部分有关。 还有更多,但这是主要部分。我想我只是使用了错误的数学或函数,请帮忙。

$limit = 10;
if($_GET['page'] == 0 OR $_GET['page'] == 1) {
    $offset = 0;
} else {
    $offset = $limit * $_GET['page'] - $limit;
}
$next = $_GET['page'] + 1;
$back = $_GET['page'] - 1;

$stmt = $db->prepare("SELECT * FROM users");
$stmt->execute();
$count = $stmt->rowCount();

if($count < $limit) {
    $last = 1;
}

$r = $count % $limit;
if($r < 5) {
    $last = ceil($count / $limit);
} else {
    if($r >= 5) {
        $last = floor($count / $limit);
    }
}

if($_GET['page'] == 0 or $_GET['page'] == 1) {
    if (0 >= $last) {
        $page = 0;
    }
    if (1 >= $last) {
        $page = 1;
    }
}

【问题讨论】:

  • 不知道你在问什么
  • 说有 12 个条目,最后一页是 2,它可以说 13 个在 db 中,最后一页可能是 1。有时有效,有时无效。
  • 根据你的代码这是不可能的 - 所以没有线索

标签: php mysqli pagination


【解决方案1】:

首先,您使用了一些非常混乱的代码,这可能是您感到困惑并偶然发现奇怪错误的原因。例如,0 &gt;= $last$last &lt;= 0 相同,1 &gt;= $last$last &lt;= 1 相同。所以基本上你的代码是……

if ($last <= 0) {
    $page = 0;
}

if ($last <= 1) {
    $page = 1;
}

如果您考虑一下,这意味着如果$last &lt;= 1 那么$page始终1。您的条件不是不是,所以两个条件都可以满足。这几乎没有意义。特别是因为$last 在任何给定条件下确实不应该是除了 1 或更多的东西($page 将永远是 1)

此外,您对floorceil $last 的逻辑几乎没有意义。根据$r 的值,您实际上并不想做任何一个或另一个。不管怎样,你总是想ceil

这个想法是,如果您有 10 件或更少的东西,并且每页最多放置 10 件东西,那么您就知道您只需要 1 页。当你有 11 件东西时,问题就开始了。现在你需要 2 页,因为额外的 1 个东西仍然超过了每页 10 个的限制。因此,如果您真的考虑这一点,这意味着所需的页面数总是与ceil($count / $limit)一致。你永远不会限制这个数字。

因为ceil(16 / 10) == 2,但根据你的逻辑,你会做floor(16 / 10),实际上是1。但是如果每页的限制是 10,你就不能在一页上放 16 个东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多