PHP分页获取最后一页

时间:2016-08-23 01:53:55

标签: php mysqli pagination

基本上我试图获得最后一页......好吧它有时会工作但是然后输入一些数据然后它会得到错误的页面并输入更多数据然后会出现右页我很确定它有一些东西与$ 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;
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您使用了一些非常令人困惑的代码,这可能是您为什么感到困惑并且遇到奇怪错误的原因。例如,0 >= $last$last <= 0相同,1 >= $last$last <= 1相同。基本上你的代码就是......

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

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

如果您考虑这一点,那只意味着如果$last <= 1那么$page 总是1。您的条件不是 - ,因此可以满足这两个条件。这几乎没有意义。特别是因为$last在任何给定条件下都不应该是 1以外的任何东西( $page将永远是1

此外,您对floorceil $last的逻辑几乎没有意义。根据{{​​1}}的值,您实际上不想做任何一个或另一个。无论如何,您总是希望$r

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

因为ceil($count / $limit),但根据您的逻辑,您将ceil(16 / 10) == 2实际上floor(16 / 10)。但如果每页的限制为10,则不能在1页上放16件事。