php实现分页功能的3种方法第3/3页

yizhihongxing

PHP实现分页功能的3种方法第3/3页的完整攻略

一、分页功能的基本原理

分页功能可以理解为将一份较大的数据集合分割成若干个小的数据块,并根据用户需求一块一块地输出,从而达到减轻服务器负担和提高用户访问速度的目的。其基本原理是结合 SQL 语句中的 LIMIT 和 OFFSET 命令实现。其中,LIMIT 表示要读取多少条数据,OFFSET表示从哪条数据开始读取。

二、方法三:封装分页类

使用 PHP封装分页类,使分页功能更易于组织和调用。步骤如下:

1. 创建统一的分页类

class Pager {
    private $total;                 //总记录数
    private $pagesize;              //每页显示多少条
    private $limitpage;             //总共多少页
    private $page;                  //当前是第几页
    private $nums;                  //显示多少个页码    
    private $url;                   //地址栏传递的整个URL字符串

    function __construct($total,$pagesize,$nums) {
        $this->total=$total;
        $this->pagesize=$pagesize;
        $this->nums=$nums;
        $this->limitpage=ceil($this->total/$this->pagesize);
        $this->page=empty($_GET['page'])?1:$_GET['page'];
        $this->url=$this->getUrl();
    }

2. 获取当前页码方法

    private function getUrl() {
        $url=$_SERVER['REQUEST_URI'];
        $parse=parse_url($url);
        if(isset($parse['query'])) {
            parse_str($parse['query'],$params);
            unset($params['page']);
            $url=$parse['path'].'?'.http_build_query($params);
        }
        return $url;
    }

    public function getPage() {
        $page=$this->page;
        if($page<1) {
            $page=1;
        }
        if($page>$this->limitpage) {
            $page=$this->limitpage;
        }
        return $page;
    }

3. SQL语句中用到的基本方法

    public function getLimit() {
        $offset=($this->getPage()-1)*$this->pagesize;
        return $offset.','.$this->pagesize;
    }

    public function getSql() {
        $offset=$this->getLimit();
        return "SELECT * FROM table1 LIMIT {$offset}";
    }

4. 显示页码方法

    public function getPages() {
        $pg=$this->nums%2==0?($this->nums/2):floor($this->nums/2)+1;
        $start=$this->getPage()-$pg+1;
        $start=$start<1?1:$start;
        $end=$start+$this->nums-1;
        $end=$end>$this->limitpage?$this->limitpage:$end;
        $url=$this->url."&page=";
        $pagestr='';
        if($this->page>1){
            $prev=$this->page-1;
            $pagestr.="<a href='{$url}1'>首页</a> ";
            $pagestr.="<a href='{$url}{$prev}'>上一页</a> ";
        }
        else {
            $pagestr.="<span class='disabled'>首页</span> ";
            $pagestr.="<span class='disabled'>上一页</span> ";
        }
        for($i=$start;$i<=$end;$i++) {
            if($i==$this->page) {
                $pagestr.="<span class='current'>{$i}</span> "; 
            }
            else {
                $pagestr.="<a href='{$url}{$i}'>{$i}</a> ";
            }
        }
        if($this->page<$this->limitpage) {
            $next=$this->page+1;
            $pagestr.="<a href='{$url}{$next}'>下一页</a> ";
            $pagestr.="<a href='{$url}{$this->limitpage}'>尾页</a> ";
        }
        else {
            $pagestr.="<span class='disabled'>下一页</span> ";
            $pagestr.="<span class='disabled'>尾页</span> ";
        }
        return $pagestr;
    }
}

5. 使用

使用封装好的分页类,只需要几行代码即可实现分页功能:

<?php 
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    $total = $dbh->query('SELECT count(*) from table1')->fetchColumn();  //总记录数
    $pagesize = 10;     //每页显示多少条    
    $nums = 5;      //显示多少个页码 
    $pager = new Pager($total,$pagesize,$nums);      //初始化分页类 
    $limit = $pager->getLimit();  //获取SQL语句中要使用的OFFSET和LIMIT 
    $sql = 'SELECT * FROM table1 LIMIT '.$limit;  //组合SQL语句 
    $stmt = $dbh->query($sql);      //执行查询 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    echo $pager->getPages();     //输出页码 
?> 

三、示例应用

示例1:分页数据展示

<?php 
    //连接数据库
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    //获取总记录数
    $total = $dbh->query('SELECT count(*) from table1')->fetchColumn();
    //每页显示多少条    
    $pagesize = 10;     
    //显示多少个页码 
    $nums = 5;      
    //初始化分页类 
    $pager = new Pager($total,$pagesize,$nums);      
    //获取SQL语句中要使用的OFFSET和LIMIT 
    $limit = $pager->getLimit();  
    //组合SQL语句 
    $sql = 'SELECT * FROM table1 LIMIT '.$limit;  
    //执行查询 
    $stmt = $dbh->query($sql);
    //输出数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    //输出页码 
    echo $pager->getPages();    
?> 

示例2:分页数据展示(可根据名称和时间筛选)

<?php 
    //连接数据库
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=database", "username", "password");
    //获取总记录数
    $name = isset($_GET['name']) ? trim($_GET['name']) : '';
    $start_time = isset($_GET['start_time']) ? strtotime(trim($_GET['start_time'])) : '';
    $end_time = isset($_GET['end_time']) ? strtotime(trim($_GET['end_time'])) : '';
    $where = '1=1';
    if($name) {
        $where .= " and name like '%".$name."%'";
    }
    if($start_time) {
        $where .= " and create_time >= '".$start_time."'";
    }
    if($end_time) {
        $where .= " and create_time <= '".$end_time."'";
    }   
    $total = $dbh->query('SELECT count(*) from table1 where '.$where)->fetchColumn();
    //每页显示多少条    
    $pagesize = 10;     
    //显示多少个页码 
    $nums = 5;      
    //初始化分页类 
    $pager = new Pager($total,$pagesize,$nums);      
    //获取SQL语句中要使用的OFFSET和LIMIT 
    $limit = $pager->getLimit();  
    //组合SQL语句 
    $sql = "SELECT * FROM table1 where ".$where." LIMIT ".$limit;  
    //执行查询 
    $stmt = $dbh->query($sql);
    //输出数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'].' '.$row['col1'].' '.$row['col2'].'<br/>';
    }
    //输出页码 
    echo $pager->getPages();    
?> 

以上两个示例分别是基本的分页数据展示和可根据名称和时间筛选的分页数据展示,通过封装分页类,可以在不同的应用场景中直接调用,代码更易于组织和管理,大大提高了开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现分页功能的3种方法第3/3页 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 一步步教会你微信小程序的登录鉴权

    下面是我对“一步步教会你微信小程序的登录鉴权”的完整攻略。 一、为什么需要登录鉴权 小程序作为一种类似于移动应用的产品,用户信息的安全性和使用体验都是非常重要的。为了实现用户的个性化体验和数据安全性,小程序对用户信息进行登录鉴权操作,确保只有合法授权过的用户才能访问小程序内的内容和进行相应操作。 二、小程序登录鉴权步骤 小程序的登录鉴权一般包含以下步骤: 用…

    PHP 2023年5月30日
    00
  • 正则表达式口诀 正则表达式学习工具

    正则表达式是一种用来匹配字符串的工具,它在文本处理中非常常用。正则表达式口诀是一种线上的学习工具,可以辅助用户学习正则表达式。下面我将详细介绍如何使用这个工具。 正则表达式口诀使用攻略 1. 进入正则表达式口诀官网 进入正则表达式口诀官网,打开页面后可以看到一个包含文字和图示的输入框。 2. 输入要匹配的正则表达式 将想要匹配的正则表达式输入到输入框中,可以…

    PHP 2023年5月28日
    00
  • java中处理socket通信过程中粘包的情况

    Java中处理socket通信过程中的粘包问题是一个比较常见的问题,下面给出一个完整的攻略: 什么是粘包问题 粘包问题是指发送方发送的数据长度大于接收方的缓存区大小,导致接收方将多个数据包一次性读取,从而形成粘包的现象。解决粘包问题是在网络编程中经常遇到的问题。 解决粘包问题 Java中处理socket通信过程中的粘包问题,一般有以下几种方式: 方式一:通过…

    PHP 2023年5月27日
    00
  • 浅析ThinkPHP的模板输出功能

    当我们使用ThinkPHP框架进行开发时,经常会用到模板输出功能。本文将对ThinkPHP的模板输出功能进行浅析。 什么是模板输出? 模板输出是指将经过处理后的数据以指定的格式输出到前端页面上。在ThinkPHP中,使用模板引擎来实现模板输出功能。 ThinkPHP中的模板引擎 ThinkPHP中提供了两种常用的模板引擎:原生PHP模板引擎和Smarty模板…

    PHP 2023年5月26日
    00
  • PHP 获取文件路径(灵活应用__FILE__)

    下面是 “PHP 获取文件路径(灵活应用__FILE__)”的完整攻略。 什么是__FILE__ 在 PHP 中,__FILE__ 是一个常量,可以获取当前文件的绝对路径和文件名。这个常量可以在任何地方使用,包括函数和类中。下面是常见的两种使用方法。 方法一:获取当前文件路径和文件名 echo ‘当前文件路径:’.__FILE__.'<br/>’…

    PHP 2023年5月26日
    00
  • 微信小程序实战之登录页面制作(5)

    下面是详细的攻略: 微信小程序实战之登录页面制作(5) 1. 登录验证和获取用户信息 首先,在 login.js 文件中,我们需要编写登录验证和获取用户信息的代码。具体步骤如下: 定义全局变量 app,用于保存小程序的实例 在 onLoad 函数中,获取小程序的实例,并将其保存到全局变量 app 中 在 getUserInfo 函数中,调用 wx.getUs…

    PHP 2023年5月23日
    00
  • PHP删除数组中指定下标的元素方法

    下面是详细讲解“PHP删除数组中指定下标的元素方法”的完整攻略。 方法一:使用unset()函数 PHP提供了unset()函数可以删除单个或多个数组元素。我们可以通过指定需要删除元素的下标来从数组中删除元素,例如: //定义一个数组 $array = array(‘A’, ‘B’, ‘C’, ‘D’, ‘E’); //删除下标为1的元素 ‘B’ unset…

    PHP 2023年5月26日
    00
  • php学习之数据类型之间的转换代码

    那么首先我们需要明确PHP中数据类型的基本种类有哪些,目前包括以下类型: 整数类型 (integer) 浮点数类型 (float/double) 字符串类型 (string) 布尔类型 (boolean) 数组类型 (array) 对象类型 (object) 空类型 (NULL) 资源类型 (resource) 在PHP中,不同类型之间的转换可以通过强制类型…

    PHP 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部