PHP分页功能有时会产生比所需更多的页面[最后一页为空]。我该如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (29)

我刚刚发现了一个分页功能来显示文件夹中的图像页面,但是当对它进行分页时,最后几页似乎是空的,我不想要这个。这是我正在使用的代码:

<?php
    function show_pagination($current_page, $last_page){
        echo '<br><div>';
            echo ' <button type="button"><a href="?page=1">First Page</a></button> ';
            echo ' <button type="button"><a href="?page='.$last_page.'">Last Page</a></button> ';
        if( $current_page > 1 ){
            echo ' <button type="button"><a href="?page='.($current_page-1).'">&lt;&lt;Previous</a></button> ';
        }

        for($i = 1; $i <= $last_page; $i++){
            echo ' <button type="button"><a href="?page='.$i.'">'.$i.'</a></button> ';
        }

        if( $current_page < $last_page ){
            echo ' <button type="button"><a href="?page='.($current_page+1).'">Next&gt;&gt</a></button> ';
        }
        echo '</div><br>';
            echo '<div><p>Page '.$current_page.' out of '.$last_page.'</p></div><br>';
    }


    $folder = 'images/';
    $filetype = '*.*';
    $files = glob($folder.$filetype);
    $total = count($files);
    $per_page = 20;
    $last_page = (int)($total / $per_page);
    if(isset($_GET["page"])  && ($_GET["page"] <=$last_page) && ($_GET["page"] > 0) ){
        $page = $_GET["page"];
        $offset = ($per_page + 1)*($page - 1);
    }else{
        //echo "Page out of range showing results for page one";
        $page=1;
        $offset=0;
    }
    $max = $offset + $per_page;
    if($max>$total){
        $max = $total;
    }

    show_pagination($page, $last_page);
    for($i = $offset; $i< $max; $i++){
       $file = $files[$i];
       $path_parts = pathinfo($file);
       $filename = $path_parts['filename'];
       echo "<img src='$file' alt='$filename' style='border-style: solid;border-width: 2px;border-color: #4d94ff; margin: 5px'>";
    }
    show_pagination($page, $last_page);

        ?>

任何帮助解决这个小问题将不胜感激。但是我在计算最后一页似乎在某些情况下有效,但在所有情况下都不起作用,我不知道为什么。

提问于
用户回答回答于

我相当肯定问题在于你的偏移 - $offset = ($per_page + 1)*($page - 1)

请记住,每个页面将显示20个项目,而不是20个项目。对于第一页,您需要索引1。对于第二个,21。第三,41。等等。

因此,您只需要在计算页面本身添加一个。为此,您可能正在寻找以下内容:

$offset = ($per_page * ($page - 1)) + 1;

这相当于:

$offset = (20 * (1 - 1)) + 1; /* 1 for page 1 */
$offset = (20 * (2 - 1)) + 1; /* 21 for page 2 */
$offset = (20 * (3 - 1)) + 1; /* 41 for page 3 */

扫码关注云+社区

领取腾讯云代金券