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

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发送与接收流文件的方法

    以下是关于 PHP 发送与接收流文件的方法的完整攻略。 准备工作 在使用 PHP 发送与接收流文件之前,我们需要进行一些准备工作: 确保我们的 PHP 环境已经支持 GuzzleHttp 库,因为我们将使用这个库来发送与接收流文件。 确定需要发送或接收的流文件的 URL 地址,同时确定请求方式和请求参数等基本信息。 发送流文件 发送流文件的过程可以分为以下几…

    PHP 2023年5月26日
    00
  • PHP中soap的用法实例

    标题:PHP中SOAP的用法实例 什么是SOAP? SOAP(Simple Object Access Protocol)是一种基于XML(eXtensible Markup Language)的通信协议。它被用于不同的应用程序之间的数据交互。 SOAP的优点 松耦合(Loose Coupling):SOAP协议可用于传输以XML为基础格式生成的消息体。 这…

    PHP 2023年5月23日
    00
  • 简单谈谈PHP vs Node.js

    简单谈谈PHP vs Node.js 前言 本文旨在探讨PHP和Node.js这两种Web开发语言的异同,并提供一些使用示例供读者参考。本文并非对PHP和Node.js的全面对比,仅供参考。 PHP和Node.js的异同 PHP和Node.js都是用于Web开发的语言,但它们的设计理念和实现方式却有很大的差异。下面我们将从几个方面来简单谈谈它们的异同。 编程…

    PHP 2023年5月26日
    00
  • 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法

    微信公众号支付是一种移动支付方式,常用于各类电商网站或其他需要在线支付的服务,并且其支付方式可以方便用户通过微信支付来完成在线支付。在接入微信公众号支付时,开发人员经常会遇到调用支付jsapi缺少参数的问题,其中包括了缺少 timeStamp 参数等。下面是详细的解决方法: 步骤一:确认公众号支付是否已开通 在开始处理 jsapi 缺少参数的问题之前,需要确…

    PHP 2023年5月23日
    00
  • ai怎么输入数学货币符号等特殊符号?

    下面是我为你准备的完整攻略。 在 AI 中输入特殊符号包括数学符号、货币符号等,需要使用 Unicode 字符集中的对应编码。下面我们就来详细讲解如何在 AI 中输入这些符号。 第一步:打开字符面板 在 AI 中输入特殊符号,首先需要打开字符面板。在 AI 软件的菜单栏中,依次点击”窗口” -> “字符”,即可打开字符面板。 第二步:选择符号 在字符面…

    PHP 2023年5月26日
    00
  • php随机输出名人名言的代码

    下面是PHP随机输出名人名言的代码攻略: 步骤1:创建数据库和数据表 首先,我们需要创建一个名人名言的数据库,可以使用phpMyAdmin或者其他的数据库管理工具来完成。在新创建的数据库中,我们创建一个名叫”quotes”的数据表,用来存储名人名言的相关信息: CREATE TABLE `quotes` ( `id` int(11) NOT NULL AUT…

    PHP 2023年5月26日
    00
  • php实现的漂亮分页方法

    当我们需要在网站上展示大量数据时,分页技术就显得尤为重要。下面是一份示例代码,可以帮助你快速实现漂亮分页的功能。 简介 这份代码使用PHP实现,使用了Bootstrap框架以及MySQL数据库。该分页功能代码包含以下内容: 数据库连接(使用PDO连接); 获取总页数; 获取当前页数据; 显示分页页码。 数据库连接 在代码的开头,我们需要使用PDO连接数据库。…

    PHP 2023年5月27日
    00
  • 微信小程序怎么使用?微信小程序正确的使用方法图文教程

    微信小程序使用攻略 微信小程序是一种轻量级的应用程序,可以直接在微信中使用,无需下载和安装。本文将详细讲解微信小程序的正确使用方法,帮助用户充分利用小程序的功能。 如何进入微信小程序? 在微信中,进入“发现”页面,下拉可见“小程序”入口,点击可进入小程序页面。也可以通过搜索关键词,找到小程序并进入。 如何使用微信小程序? 进入微信小程序后,可根据小程序功能选…

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