PHP语言之php分页函数[经典]
小标 2018-11-14 来源 : 阅读 1992 评论 0

摘要:本文主要向大家介绍了PHP语言之php分页函数[经典],通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言之php分页函数[经典],通过具体的内容向大家展示,希望对大家学习php语言有所帮助。


/*

  分页类

  design by xqbar 

  qq:174171262

  email:wxddong@163.com

  blog://www.xqbar.com

  考虑输入参数

  size(每页记录数目)

  url(连接地址)

  style(分页样式)

  sql(运行语句)

*/

class page{

   public  $sql='';//分页sql语句

   public  $url='';//分页传递过来的下页地址,可以另外加参数用来搜索使用

   public  $size=10;//默认每页显示数据10条

   public  $style=1;//默认分页显示风格

   private $totalsize=0;//数据总数

   private $totalpage=0;//总页数

   private $page=1;//当前页

   private $link;//数据库连接点

   private $flag=false;//初始化标志点

   private $offset=0;//分页偏移值 limit $offset,$size;

   //构造函数 传递数据库连接点

   function __construct($link){

      $this->page=(isset($_GET['page'])&&!empty($_GET['page'])&&(int)($_GET['page']))?(int)$_GET['page']:1;//获取当前page参数值,确定当前是第几分页

      $this->link=$link;

   }

   //析构函数

   function __destruct(){

  @mysql_close($this->link);

  $this->link=NULL;

   }

  //构造函数兼顾<php5

   function page($link){

     $this->__construct($link);

   }

   //初始化

   function init(){

     if(empty($this->sql)){$this->halt("错误警告:sql语句不能为空!");exit();}//判断sql是否存在

  $this->sql=str_replace(sql);//">'@_',DB_PREFIX,$this->sql);//替换sql中的表前缀

     $this->size=($this->size<=0)?10:$this->size;//初始每页显示数据条数

  $this->page=($this->page<1)?1:$this->page;//当前页码值

     #大于第一页后优化查询总记录数

  //这里我使用了第一次浏览分页时查询数据库得出数据库总数,点下页时传递并不再查询数据库,数据量多时可能会节省些(自己想的)

  if($this->page==1&&!isset($_GET['tsize'])){

     sql">$result=@mysql_query($this->sql);

     $this->totalsize=@mysql_num_rows($result);

     @mysql_free_result($result);

  }else{

       //上面的问题唯一缺点就是用户手动在地址栏更改了tsize值后分页将不再正确

     $this->totalsize=(int)$_GET['tsize'];

    }

     $this->url=(empty($this->url))?$_SERVER['PHP_SELF'].'?tsize='.$this->totalsize:$this->url.'&tsize='.$this->totalsize;//传递totalsize给下一页

  $this->totalpage=ceil($this->totalsize/$this->size);//获取总页数

  $this->page=($this->page>$this->totalpage)?$this->totalpage:$this->page;

  $this->offset=($this->page-1)*$this->size;//获取偏移值

   }

  //查询数据库返回结果给二维数组

   function fetch_array($result_type=MYSQL_BOTH){

     if(!$this->flag){$this->init();$this->flag=true;}

     if($this->totalsize<=0){return NULL;}

  $this->sql.=" limit $this->offset,$this->size";

  sql,$this->link">$result=@mysql_query($this->sql,$this->link);

  while($row=mysql_fetch_array($result,$result_type)){$rows[]=$row;}

  @mysql_free_result($result);

  return $rows;

   }

  //获取总数据数

   function getsize(){

     if(!$this->flag){$this-init();$this->flag=true;}//判断是否已经在此之前初始化过,是则直接返回 (下同)

     return $this->totalsize;

   }

//获取总页数

   function getpage(){

     if(!$this->flag){$this-init();$this->flag=true;}

     return $this->totalpage;

   }

//根据传入参数输出分页链接

   function outpage(){

     if(!$this->flag){$this-init();$this->flag=true;}

  switch($this->style){

    #1 第x页 共x页 首页 上一页 下一页 尾页 x条/页 共x页

    case 1:

           $pagehtml="第{$this->page}页 共{$this->totalpage}页";

     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";

           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" 下一页 尾页";

     $pagehtml.=" 共{$this->totalsize}条";

           break;

    #1 首页 上一页 下一页 尾页 x条/页 共x页

    case 2:

           $pagehtml="";

     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";

           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" 下一页 尾页";

     $pagehtml.=" 共{$this->totalsize}条";

           break;

    #2 1 2 3 4 5

    case 3:

           $offset=(ceil($this->page/10)-1)*10;

     $pagehtml="";

     if($offset!=0){$pagehtml.="|<< <<";}

     for($i=1;$i<=10;$i++){

       $n=$i+$offset;

       if($n>$this->totalpage){break;}

       if($n==$this->page){$pagehtml.=" $n ";}

       else{$pagehtml.=" $n ";} 

     }

     if($n<$this->totalpage){$pagehtml.=" >> >>|";}

     unset($offset,$i,$n);

           break;   

    #1

    default:

           $pagehtml="第{$this->page}页 共{$this->totalpage}页";

     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";

           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":"  下一页 尾页";

           break;   

  }

    return $pagehtml; 

   }

//错误输出

   function halt($msg){

  echo "";

  echo "";

  echo "\r\n";

  echo "";

  echo "";

  echo "

";

  echo $msg;

  echo "

";

  echo "";

}

}

?>



 



require_once('mysql.class.php');

require_once('page.class.php');

$db=new mysql();

$link=$db->open();

#定义sql和url

$sql='select * from @_info';(@_是我的表定义前缀在传入类后被替换掉)

$url='';

$mypage=new page($link);

$mypage->size=10;

$mypage->style=3;

$mypage->url=$url;

$mypage->sql=$sql." order by id desc";

$ls=$mypage->fetch_array(MYSQL_ASSOC);//得到返回的结果

if(count($ls)==0){

   echo '无结果';

}else{

foreach($ls as $value){

    echo $value['title'];

}

//分页码

echo $mypage->outpage(); 

}

?>    

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved