libo 发表于 2020-11-16 19:19:58

PHP 分页

首先来看看分页效果



分页类代码


<?php
/**
* @author   :gxggxl
* @BlogURL: https://gxusb.com
* @DateTime : 2020/10/10 16:33
*/
//page.class.php
class Page
{
    //成员属性
    private $page;//当前页
    private $maxRows;//总条数
    private $pageSize;//每页显示多少条
    private $maxPage = 0;//总页数
    private $url;//当前页面的URL地址
    private $urlParam = '';//当前页面的参数

    //成员方法
    public function __construct($maxRows, $pageSize = 5) {
      //进行初始化赋值操作
      $this->maxRows = $maxRows;
      $this->pageSize = $pageSize;
      //定义当前页
      $this->page = isset($_GET['page']) ? $_GET['page'] : 1;
      //获取当前页面的URL地址
      $this->url = $_SERVER['PHP_SELF'];
      //获取总页数
      $this->getMaxPage();
      //验证当前页的值
      $this->checkPage();
      //调用URL参数
      $this->urlParam();
    }

    // getMaxPage 计算总页数
    private function getMaxPage() {
      //判断除数
      if ($this->pageSize < 1) {
            $this->pageSize = 1;
      }
      $this->maxPage = @ceil($this->maxRows/$this->pageSize);
    }

    //验证当前页
    private function checkPage() {
      if ($this->page > $this->maxPage) {
            $this->page = $this->maxPage;
      }
      if ($this->page < 1) {
            $this->page = 1;
      }
      if ($this->pageSize > $this->maxRows) {
            $this->pageSize = $this->maxRows;
      }
      if ($this->pageSize < 1) {
            $this->pageSize = 1;
      }
    }

    //过滤当前URL地址中的参数信息
    private function urlParam() {
      foreach ($_GET as $key => $value) {
            //判断参数值和参数名是否有效
            if ($value != '' && $key != 'page') {
                $this->urlParam .= '&' . $key . '=' . $value;
            }
      }
      // echo $this->urlParam;
    }

    /**
   * 输出页码
   *
   * @return string
   */
    public function showPage() {
      $str = '';
      $str .= '当前第' . $this->page . '页/共' . $this->maxPage . '页,共' . $this->maxRows . '条记录&nbsp;&nbsp;';
      $str .= '<a href="' . $this->url . '?page=1' . $this->urlParam . '">首页</a>&nbsp;&nbsp;';
      $str .= '<a href="' . $this->url . '?page=' . ($this->page - 1) . $this->urlParam . '">上一页</a>&nbsp;&nbsp;';
      $str .= '<a href="' . $this->url . '?page=' . ($this->page + 1) . $this->urlParam . '">下一页</a>&nbsp;&nbsp;';
      $str .= '<a href="' . $this->url . '?page=' . $this->maxPage . $this->urlParam . '">尾页</a>&nbsp;&nbsp;';
      return $str;
    }

    /**
   * 返回分页的limit条件
   *
   * @return string
   */
    public function limit() {
      $num = ($this->page - 1)*$this->pageSize;
      return $num . ',' . $this->pageSize;
    }
}




类的使用方法

//引入分页类
include "page.class.php";
header("Content-Type:text/html;charset=utf-8");
//数据库连接资源
$link = mysqli_connect("127.0.0.1", "test", "123456", "test");
//得到结果集
$result = mysqli_query($link, "select * from crm_users");
//获取记录总条数
$total = mysqli_num_rows($result);
//设计每页显示条数
$pageSize = isset($_GET['size']) ? $_GET['size'] : 5;
//实例化分页类,$total(总条数),$pageSize(每页显示条数)
$page = new Page($total, $pageSize);
//拿到分页查询条件
$limit = $page->limit();
//sql语句
$sql = "select * from crm_users limit {$limit}";
//查询数据
$result = mysqli_query($link, $sql);
//把结果在表格中显示
echo '<style>a{text-decoration: none;}</style>';
echo '<table border="1" style="width: 760px;margin: 50px auto;">';
echo '<caption><h1>Users</h1></caption>';
echo '<tr><th>uid</th><th>username</th><th>sex</th><th>email</th><th>phone_num</th><th>create_time</th></tr>';
//从结果集中取得一行作为关联数组
while ($row = mysqli_fetch_assoc($result)) {
    echo '<tr>';
    echo '<td>' . $row["uid"] . '</td>';
    echo '<td>' . $row["username"] . '</td>';
    echo '<td>' . $row["sex"] . '</td>';
    echo '<td>' . $row["email"] . '</td>';
    echo '<td>' . $row["phone_num"] . '</td>';
    echo '<td>' . date('Y年m月d日 H:i:s', $row["create_time"]) . '</td>';
    echo '<tr>';
}
echo '<tr><td colspan="6" style="text-align: right">' . $page->showPage() . '</td></tr>';
echo '</table>';



页: [1]
查看完整版本: PHP 分页