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)
上一篇 2天前
下一篇 2天前

相关文章

  • PHP解析目录路径的3个函数总结

    以下是关于“PHP解析目录路径的3个函数总结”的完整攻略: 概述 在PHP中,解析目录路径是非常常见的操作,PHP提供了多种函数来满足不同场景需求。本文总结了3个较常用的函数,分别为basename、dirname和pathinfo。 函数一:basename basename函数用于获取路径中的文件名部分,可以是相对路径或绝对路径。例如: $path = …

    PHP 3天前
    00
  • PHP简单判断字符串是否包含另一个字符串的方法

    下面是“PHP简单判断字符串是否包含另一个字符串的方法”的完整攻略。 1. 使用strpos()函数 PHP提供了一个内置函数strpos(),可以用来判断一个字符串是否包含另一个字符串。其函数声明如下: int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) 其中,第一个参数…

    PHP 3天前
    00
  • PHP书写格式详解(必看)

    下面详细讲解一下“PHP书写格式详解(必看)”的完整攻略。 PHP书写格式详解(必看) 1. 代码块的使用 代码块是指一组连续的代码行,可以使用一对花括号 { } 来包含代码块。在 PHP 中,花括号 { 和 } 一般都应该单独占一行,在可读性上更容易排版和规范。 2. 缩进的使用 为了让代码具有更好的可读性,PHP 代码应该按照一定的缩进风格进行编写。通常…

    PHP 6天前
    00
  • PHP之将POST数据转化为字符串的实现代码

    将POST数据转化为字符串通常涉及处理数据和编码问题,本文将提供一种通用的PHP代码实现,适用于大多数项目。 步骤1. 获取POST数据 首先,我们需要使用PHP的$_POST全局变量获取POST数据。$_POST是一个关联数组,每个键值对分别表示POST参数的名称和值。例如,如果我们POST了一个名为”username”的参数,其值为”johndoe”,则…

    PHP 3天前
    00
  • PHP将进程作为守护进程的方法

    如果想要使用PHP创建守护进程,一种常见的方法是创建一个后台进程并将其分离,以便即使PHP脚本执行完毕,进程仍然能够运行。下面是PHP将进程作为守护进程的基本过程: 创建子进程:使用fork()函数创建一个子进程。 $pid = pcntl_fork(); 这里使用pcntl_fork()函数创建子进程,$pid表示主进程和子进程的进程ID。 子进程创建新会…

    PHP 5天前
    00
  • PHP删除数组中指定值的元素常用方法实例分析【4种方法】

    PHP删除数组中指定值的元素常用方法实例分析【4种方法】 1.使用unset函数 使用unset函数可以删除数组中指定下标的元素。使用如下: unset($array[$key]); 代码示例: $arr = array(‘a’,’b’,’c’,’d’,’e’); unset($arr[2]); //删除下标为2的元素 print_r($arr); //输出…

    PHP 3天前
    00
  • PHP文件上传后缀名与文件类型对照表整理

    关于PHP文件上传后缀名与文件类型对照表整理的攻略,可以按照以下步骤来进行。 一、了解MIME类型 在介绍文件类型对照表之前,我们需要先了解一下MIME类型。MIME类型是一种描述文档和文件性质和格式的标准化方式。在web中,MIME类型通常被用来指示文档的性质和如何处理。 例如常见的MIME类型有: text/plain 代表普通文本类型 image/jp…

    PHP 2天前
    00
  • php后门木马常用命令分析与防范

    PHP后门木马常用命令分析与防范 PHP后门木马是一种危险的网络攻击手段,攻击者通常将恶意代码嵌入到正常的PHP文件中,这些代码常常被命名为“shell”,并使用类似于密码保护的方式隐藏在服务端,攻击者可以通过发送指定的请求激活后门木马,控制服务器并进行各种恶意操作。为了有效防范这种攻击,我们必须了解PHP后门木马的常用命令和防范方法。 常用命令分析 PHP…

    PHP 5天前
    00
  • PHP文件上传利用的常见函数总结大全

    以下是详细讲解“PHP文件上传利用的常见函数总结大全”的完整攻略: 简介 在开发Web应用程序的过程中,文件上传是一个非常普遍的需求。然而,由于文件上传涉及到服务器的文件系统和文件读写权限等方面的问题,可能会带来严重的安全隐患。攻击者可以通过利用文件上传的漏洞,上传并执行恶意脚本来实现远程代码执行等攻击。 为防止文件上传漏洞的出现,我们需要了解文件上传过程中…

    PHP 3天前
    00
  • PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】

    PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】 在PHP开发中,设计模式是一种很常见的编程思想。设计模式是对软件开发中经常出现的问题得出的通用解决方案。下面我将详细讲解PHP中三种常用的设计模式:单例模式、工厂模式、观察者模式。 单例模式 单例模式是一种创建型模式,它的目的是保证一个类只有一个实例,而且提供了一个全局访问该实例的方法。下面是…

    PHP 5天前
    00