不错的php+mysql分页类

发布时间:2019-10-24编辑:脚本学堂
分享一例php+mysql分页代码,附有分页效果演示图,可以设置分页总记录数,页显示记录数,获取当前url等,简单易用的php分页类,需要的朋友参考下。

 首先,来看下php分页类效果:
php分页类

专题推荐:php分页代码大全    php分页原理     php分页类

1,php分页类 page.class.php
 

复制代码 代码示例:
<?php
/*****************************
 * @类名:   page
 * @参数:   $myde_total - 总记录数
 *  $myde_size - 一页显示的记录数
 *  $myde_page - 当前页
 *  $myde_url - 获取当前的url
 * @功能:   分页实现
 * @作者:   宋海阁
 */
class page {
private $myde_total;  //总记录数
private $myde_size;   //一页显示的记录数
private $myde_page;   //当前页
private $myde_page_count; //总页数
private $myde_i;  //起头页数
private $myde_en; //结尾页数
private $myde_url;//获取当前的url
/*
 * $show_pages
 * 页面显示的格式,显示链接的页数为2*$show_pages+1。
 * 如$show_pages=2那么页面上显示就是[首页] [上页] 1 2 3 4 5 [下页] [尾页]
 */
private $show_pages;
 
public function __construct($myde_total=1,$myde_size=1,$myde_page=1,$myde_url,$show_pages=2){
$this->myde_total = $this->numeric($myde_total);
$this->myde_size = $this->numeric($myde_size);
$this->myde_page = $this->numeric($myde_page);
$this->myde_page_count = ceil($this->myde_total/$this->myde_size);
$this->myde_url = $myde_url;
if($this->myde_total<0) $this->myde_total=0;
if($this->myde_page<1)  $this->myde_page=1;
if($this->myde_page_count<1) $this->myde_page_count=1;
if($this->myde_page>$this->myde_page_count) $this->myde_page=$this->myde_page_count;
$this->limit = ($this->myde_page-1)*$this->myde_size;
$this->myde_i=$this->myde_page-$show_pages;
$this->myde_en=$this->myde_page+$show_pages;
if($this->myde_i<1){
  $this->myde_en=$this->myde_en+(1-$this->myde_i);
  $this->myde_i=1;
}
if($this->myde_en>$this->myde_page_count){
  $this->myde_i = $this->myde_i-($this->myde_en-$this->myde_page_count);
  $this->myde_en=$this->myde_page_count;
}
if($this->myde_i<1)$this->myde_i=1;
}
//检测是否为数字
private function numeric($num){
  if(strlen($num)){
 if(!preg_match("/^[0-9]+$/",$num)){
 $num=1;
   }else{
 $num = substr($num,0,11);
 }
  }else{
   $num=1;
  }
  return $num;
}
//地址替换
private function page_replace($page){
return str_replace("{page}",$page,$this->myde_url);
}
//首页
private function myde_home(){
if($this->myde_page!=1){
return "<a href="".$this->page_replace(1)."" title="首页">首页</a>";
}else{
return "<p>首页</p>";
}
}
//上一页
private function myde_prev(){
   if($this->myde_page!=1){
   return "<a href="".$this->page_replace($this->myde_page-1)."" title="上一页">上一页</a>";
   }else{
  return "<p>上一页</p>";
   }
}
//下一页
private function myde_next(){
if($this->myde_page!=$this->myde_page_count){
return "<a href="".$this->page_replace($this->myde_page+1)."" title="下一页">下一页</a>";
}else{
return"<p>下一页</p>";
}
}
//尾页
private function myde_last(){
if($this->myde_page!=$this->myde_page_count){
return "<a href="".$this->page_replace($this->myde_page_count)."" title="尾页">尾页</a>";
}else{
return "<p>尾页</p>";
}
}
//输出
public function myde_write($id='page'){
   $str ="<div id="".$id."">";
   $str.=$this->myde_home();
   $str.=$this->myde_prev();
   if($this->myde_i>1){
$str.="<p class="pageEllipsis">...</p>";
   }
   for($i=$this->myde_i;$i<=$this->myde_en;$i++){
if($i==$this->myde_page){
$str.="<a href="".$this->page_replace($i)."" title="第".$i."页" class="cur">$i</a>";
}else{
  $str.="<a href="".$this->page_replace($i)."" title="第".$i."页">$i</a>";
}
   }
   if( $this->myde_en<$this->myde_page_count ){
$str.="<p class="pageEllipsis">...</p>";
   }
   $str.=$this->myde_next();
   $str.=$this->myde_last();
   $str.="<p class="pageRemark">共<b>".$this->myde_page_count.
 "</b>页<b>".$this->myde_total."</b>条数据</p>";
   $str.="</div>";
   return $str;
}
}
?>
 

php+mysql 分页原理:limit ($curpage-1)*$showrow,$showrow

2,php展示页面代码
 

复制代码 代码示例:
<?php
require_once('./page.class.php'); //分页类
$showrow = 3;//一页显示的行数
$curpage = empty($_GET['page'])?1:$_GET['page'];//当前的页,还应该处理非数字的情况
$url = "?page={page}";//分页地址,如果有检索条件 ="?page={page}&q=".$_GET['q']
//省略了链接mysql的代码,测试时自行添加
$sql = "SELECT * FROM table";
$query = mysql_query($sql);
$total = mysql_num_rows($query);//记录总条数
if(!empty($_GET['page']) && $total !=0 && $curpage > ceil($total/$showrow))
$curpage = ceil($total_rows/$showrow);//当前页数大于最后页数,取最后一页
//获取数据
$get_data = "select * from table limit ".($curpage-1)*$showrow.",$showrow;";
...
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>简易通用的PHP分页类-www.jb200.com</title>
<style type="text/css">
#page{
height:40px;
padding:20px 0px;
}
#page a{
display:block;
float:left;
margin-right:10px;
padding:2px 12px;
height:24px;
border:1px #cccccc solid;
background:#fff;
text-decoration:none;
color:#808080;
font-size:12px;
line-height:24px;
}
#page a:hover{
color:#077ee3;
border:1px #077ee3 solid;
}
#page a.cur{
border:none;
background:#077ee3;
color:#fff;
}
#page p{
float:left;
padding:2px 12px;
font-size:12px;
height:24px;
line-height:24px;
color:#bbb;
border:1px #ccc solid;
background:#fcfcfc;
margin-right:8px;
 
}
#page p.pageRemark{
border-style:none;
background:none;
margin-right:0px;
padding:4px 0px;
color:#666;
}
#page p.pageRemark b{
color:red;
}
#page p.pageEllipsis{
border-style:none;
background:none;
padding:4px 0px;
color:#808080;
}
</style>
</head>
<body>
<div class="main">
<div class="showData">
<!--显示数据区-->
</div>
<div class="showPage">
  <?php
 if($total>$showrow){//总记录数大于每页显示数,显示分页
 $page = new page($total,$showrow,$curpage,$url,2);
 echo $page->myde_write();
}
?>
</div>
</div>
</body>
</html>