在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>
希望对大家有所帮助!
转载请注明出处。谢谢。!