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 curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法

    PHP Curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法 1. Curl是什么 Curl是一个非常强大的用来通讯的工具。它支持很多网络协议,如HTTP、HTTPS、FTP、Telnet,还支持各种代理。使用Curl可以让我们实现模拟用户在浏览器上访问网站,方便进行数据的爬取、抓取 。 2. Curl的基本使用 以下代码是基于PHP Curl执行…

    PHP 2023年5月27日
    00
  • php 字符转义 注意事项

    当使用 PHP 处理字符串时,可能需要对其中的特殊字符进行转义。这些特殊字符包括单引号、双引号、反斜杠等。在字符串中使用这些字符时,我们需要使用转义字符来告诉 PHP 框架这是字符而不是语法。以下是在 PHP 中进行字符转义的注意事项和示例说明的完整攻略。 PHP 字符转义的方法 在 PHP 中,我们可以使用反斜杠 () 来转义字符。下面是一些常见的特殊字符…

    PHP 2023年5月26日
    00
  • PHP的preg_match匹配字符串长度问题解决方法

    下面是详细讲解“PHP的preg_match匹配字符串长度问题解决方法”的完整攻略。 1. 背景介绍 在PHP中,我们经常需要使用正则表达式进行字符串的匹配,其中,preg_match是一个常用的函数。然而,有时候我们会遇到这样的问题:如何在使用preg_match匹配字符串时,限制字符串的最大长度? 2. 解决方法 要解决这个问题,我们可以使用一些正则表达…

    PHP 2023年5月26日
    00
  • PHP实现加减乘除最简单的实例分享

    下面我将为您详细讲解“PHP实现加减乘除最简单的实例分享”的完整攻略。 1.基本概念 在PHP中,加减乘除等基本运算都可以使用对应的算术运算符来实现。具体如下: 运算符 描述 + 加 – 减 * 乘 / 除 % 取模 2.示例说明 2.1. 简单计算器 下面我们来看一个简单计算器的示例,可以实现两个数间的加减乘除运算。 <!DOCTYPE HTML&g…

    PHP 2023年5月23日
    00
  • PHP编程与应用

    PHP编程与应用完整攻略 简介 PHP是一种常用的脚本语言,被广泛用于Web开发。本文将介绍PHP编程的基础知识和应用,包括语法、变量、表达式、流程控制、函数、数组、文件操作、正则表达式等方面。 语法 PHP代码可以嵌入到HTML代码中,使用<?php和?>标记。例如: <!DOCTYPE html> <html> &lt…

    PHP 2023年5月30日
    00
  • PHP中数组处理函数的使用方法详解

    下面就为大家详细讲解“PHP中数组处理函数的使用方法详解”的完整攻略。 一、什么是数组处理函数 在PHP中,数组用于存储一组数据,而数组处理函数则是用来对数组进行各种操作的函数。PHP中提供了各种各样的数组处理函数,能够极大地方便我们进行数组操作。 二、数组处理函数的分类 PHP中的数组处理函数大致可以分为以下几类: 1. 数组的排序和查找函数 我们通常会用…

    PHP 2023年5月26日
    00
  • 解析PHP处理换行符的问题 \r\n

    文本中的换行符在不同的操作系统中可能有区别,例如Windows系统使用CR(回车符)和LF(换行符)作为换行符,而Unix-like系统只使用LF作为换行符。当在PHP代码中处理这些不同类型的换行符时,必须格外小心以确保代码的可移植性。 下面是解析PHP处理换行符的步骤: 1. 使用PHP提供的常量 PHP提供了两个常量在不同操作系统中处理换行符,分别是PH…

    PHP 2023年5月26日
    00
  • PHP HTML代码串 截取实现代码

    下面我将详细讲解 PHP HTML 代码串截取实现代码的完整攻略。 什么是 PHP HTML 代码串截取 PHP HTML 代码串截取指的是从一个包含 HTML 代码的字符串中截取出想要的部分。在实际开发中,我们经常需要从一个 HTML 页面中获取某些特定的标签内容或属性,这时候我们可以使用 PHP 的字符串截取函数来实现。 如何实现 PHP HTML 代码…

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