Blogger Information
Blog 12
fans 1
comment 1
visits 19145
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP分页原理以及分页类的实现
黄小凡的博客
Original
956 people have browsed it

    在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>

    希望对大家有所帮助!

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post