博客列表 >PHP分页原理以及分页类的实现

PHP分页原理以及分页类的实现

黄小凡的博客
黄小凡的博客原创
2017年08月01日 16:55:05955浏览

    在PHP开发web网站中,我们经常会需要用到的是分页的实现,我们没必要每次都手写一遍php分页的代码,今天在工作之余,在晚上查找了众多分页原理,但是大多数还应仍是使用mysql过程化的方式来连接数据库,虽然原理仍然是一样的,但是还是希望以后可以使用面向对象的方式来做,以此减少代码的冗余,特此写下PageManage类,希望对大家有所帮助,如有不对,希望大家海涵!以下是PhpManage类的代码:

<?php  
/*********************************************  
类名: PageManage
功能:分页显示MySQL数据库中的数据
经过修改,采用mysqli类使用
有两种展示方式:standard_navigate()与 full_navigate
出自黄小凡的php中文网博客:http://xiaofan.php.cn/
***********************************************/   
class PageManage{   
    //属性  
    private $sql;                    //所要显示数据的SQL查询语句   
    private $page_size;                //每页显示最多行数   
      
    private $start_index;            //所要显示记录的首行序号  
    private $total_records;            //记录总数   
    private $current_records;        //本页读取的记录数   
    private $result;                //读出的结果   
      
    private $total_pages;            //总页数    
    private $current_page;            //当前页数  
    private $display_count = 5;     //显示的前几页和后几页数  
  
    private $arr_page_query;        //数组,包含分页显示需要传递的参数   
  
    private $first;  
    private $prev;  
    private $next;  
    private $last;  
      
    //方法  
/*********************************************  
构造函数:__construct() 
输入参数:             
        $ppage_size:每页显示最多行数     
***********************************************/   
 function __construct($ppage_size)  
 {   
    $this->page_size=$ppage_size;   
    $this->start_index=0;  
 }   
  
  
/*********************************************  
析构函数:__destruct() 
输入参数:             
***********************************************/   
 function __destruct()  
 {  
      
 }  
          
/*********************************************  
get函数:__get() 
读取未定义的变量的值时,__get() 会被调用。
***********************************************/   
 function __get($property_name)  
 {    
     return isset($this->$property_name) ? $this->$property_name : null;   
 }  
   
/*********************************************  
set函数:__set() 
在给未定义的变量赋值时,__set() 会被调用。
***********************************************/   
 function __set($property_name, $value)   
 {       
    $this->$property_name = $value;   
 }   
  
/*********************************************  
函数名:read_data 
功能:    根据SQL查询语句从表中读取相应的记录 
返回值:属性二维数组result[记录号][字段名] 
***********************************************/   
 function read_data($mysql)  
 {   
    $psql=$this->sql;   
      
    //查询数据,数据库链接等信息应在类调用的外部实现  
    $result=$mysql->query($psql) or die($mysql->error());   
    $this->total_records=$result->num_rows;  
      
    //利用LIMIT关键字获取本页所要显示的记录  
    if($this->total_records>0)   
    {  
        $this->start_index = ($this->current_page-1)*$this->page_size;  
        $psql=$psql.    " LIMIT ".$this->start_index." , ".$this->page_size;   
          
        $result=$mysql->query($psql) or die($mysql->error());   
        $this->current_records=$result->num_rows;   
          
        //将查询结果放在类的result数组中  
        $i=0;   
        while($row=$result->fetch_assoc())  
        {   
            $this->result[$i]=$row;   
            $i++;   
        }   
    }  
  
      
    //获取总页数、当前页信息  
    $this->total_pages=ceil($this->total_records/$this->page_size);    
  
    $this->first=1;  
    $this->prev=$this->current_page-1;  
    $this->next=$this->current_page+1;  
    $this->last=$this->total_pages;  
 }  
  
 /*********************************************  
函数名:standard_navigate() 
功能:    显示首页、下页、上页、未页 
***********************************************/   
 function standard_navigate()   
 {      
    echo "<div align=center>";  
    echo "<form action=".$_SERVER['PHP_SELF']." method=\"get\">";  
    //生成导航链接  
    if ($this->current_page > 1) {  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->first.">首页</A>|";   
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->prev.">上一页</A>|";   
    }  
  
    if( $this->current_page < $this->total_pages) {  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->next.">下一页</A>|";  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->last.">末页</A>";   
    }  
      
      
    //这里的 \" 是作为转义字符,目的是输出 ",以下都是如此
    echo "跳到<input type=\"text\" name=\"current_page\" value='".$this->current_page."'/>页";  
    echo "<input type=\"submit\" value=\"提交\"/>";  
    echo "<font color = red size ='4'>第".$this->current_page."页/共".$this->total_pages."页</font>";   
    echo "    ";  
    echo "</form>";      
    echo "</div>";  
  
 }   
   
  /*********************************************  
函数名:full_navigate() 
功能:    显示首页、下页、上页、未页   
生成导航链接 如1 2 3 ... 10 11 
***********************************************/   
 function full_navigate()   
 {      
    echo "<div align=center>";  
    echo "<form action=".$_SERVER['PHP_SELF']." method=\"get\">";  
      
    echo "<font color = red size ='4'>第".$this->current_page."页/共".$this->total_pages."页</font>";   
    echo "    ";  
     //这里的 \" 是作为转义字符,目的是输出 ",以下都是如此  
    echo "跳到<input type=\"text\" name=\"current_page\" value='".$this->current_page."'/>页";  
    echo "<input type=\"submit\" value=\"提交\"/>";  
      
    //生成导航链接 如1 2 3 ... 10 11  
    $displayCount = $this->display_count;  
    $front_start = 1;  
    if($this->current_page > $displayCount){  
        $front_start = $this->current_page - $displayCount;  
    }  
    for($i=$front_start;$i<$this->current_page;$i++){  
        echo "<a href=".$_SERVER['PHP_SELF']."?current_page=".$i.">[".$i ."]</a> ";      
    }  
  
    echo "[".$this->current_page."]";  
  
    // if($this->total_pages > $displayCount&&($this->current_page+$displayCount)<$this->total_pages){  
    //     $displayCount = $this->current_page+$displayCount;  
    // }else{  
    //     $displayCount = $this->total_pages;  
    // }  
  
    for($i=$this->current_page+1;$i<=$displayCount;$i++){  
        echo "<a href=".$_SERVER['PHP_SELF']."?current_page=".$i.">[".$i ."]</a> ";      
    }  
  
    //生成导航链接  
    if ($this->current_page > 1) {  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->first.">首页</A>|";   
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->prev.">上一页</A>|";   
    }  
  
    if( $this->current_page < $this->total_pages) {  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->next.">下一页</A>|";  
      echo "<A href=".$_SERVER['PHP_SELF']."?current_page=".$this->last.">末页</A>";   
    }  
      
    echo "</form>";      
    echo "</div>";  
  
 }    
}   
?>

    以下是代码的测试类:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PageManage展示页</title>
</head>
<body>
    <div>  
    <?php   
        //配置数据库信息
        $db_host = "localhost";
        $db_user = "root";
        $db_password = "root";
        $db_name = "result"; 
        ///////////////////////////////////////////////////////////////////////  
          
        include_once("PageManage.class.php");   //引入类  
        $mysql = new mysqli($db_host,$db_user,$db_password,$db_name); //连接数据库   
        if (!$mysql)  
          {  
          die('Could not connect: ' . $mysql->error());      
          }  
        $PAGE_SIZE=10;            //设置每页显示的数目  
        ///////////////////////////////////////////////////////////////////////  
      
        $PageManage = new PageManage($PAGE_SIZE); //实例化PageSupport对象  
          
        @$current_page=$_GET["current_page"];//分页当前页数  
          
        if (isset($current_page)) {  
              
            $PageManage->__set("current_page",$current_page);  
              
        } else {  
              
            $PageManage->__set("current_page",1);  
              
        }  
        //设置sql语句 
        $PageManage->__set("sql","select * from db_user ");       
        $PageManage->read_data($mysql);//读数据  
          
        if ($PageManage->current_records > 0) //如果数据不为空,则组装数据  
        {  
    ?>
         <table width="800" border="1" cellspacing="0" cellpadding="0">
                <caption>客户信息表</caption>
                <thead>
                    <tr>
                        <th>姓名</th>
                        <th>电话</th>
                    </tr>
                </thead>
                <tbody>
        <?php
            for ($i=0; $i<$PageManage->current_records; $i++)  
            {  
                $username = $PageManage->result[$i]["username"];  
                $phone = $PageManage->result[$i]["phone"];
        ?>       
                <tr>
                    <td><?php echo $username; ?></td>
                    <td><?php echo $phone; ?></td>
                </tr>
        <?php } ?>     
                </tbody>
            </table>
        <?php
        }  
        $PageManage->full_navigate(); //调用类里面的这个函数,显示出分页HTML  
        //关闭数据库  
        $mysql->close();  
     ?>  
    </div>  
</body>
</html>

    希望对大家有所帮助!

转载请注明出处。谢谢。!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议