实用的简单PHP分页集合包括使用方法

  方法一:

  

复制代码 代码如下:

  <?php

  /*

  分页类 用于实现对多条数据分页显示 

  version:1.0

  Date:2013-10-20

  */

  /*

  调用非常方便,先连接好数据库,直接传人查询的sql字符串即可,也可以指定每页显示的数据条数

  例如$pages = new Page('SELECT * FROM `zy_common_member`');

  或  $pages = new Page('SELECT * FROM `zy_common_member`', 10);

  */

  class Page{

  private $curPage;

  private $totalPages;//数据总共分多少页显示

  private $dispNum;//每页显示的数据条数

  private $queryStr;//查询的SQL语句

  private $limitStr;//查询语句后面的limit控制语句

  /*

  构造函数

  $queryStr 查询数据的SQL语句

  $dispNum  每页显示的数据条数

  */

  public function __construct($queryStr='',$dispNum=10){

  $result = mysql_query($queryStr);

  $totalNum = mysql_num_rows($result);

  $this->dispNum = $dispNum;

  $this->totalPages = ceil($totalNum / $dispNum);

  $this->queryStr = $queryStr;

  $temp = (isset($_GET["curPage"]) ? $_GET["curPage"] : 1);

  $this->setCurPage($temp);

  $this->showCurPage();

  $this->showFoot();

  }

  /*显示当前页的数据内容*/

  private function showCurPage(){

  $this->limitStr = ' LIMIT '.(($this->curPage - 1)* $this->dispNum).','.$this->dispNum;

  //echo $this->queryStr.$this->limitStr;

  $result = mysql_query($this->queryStr.$this->limitStr);

  if (!$result)

  {

  if ($this->totalPages > 0)

  {

  echo '查询出错'.'<br>';

  }

  else

  {

  echo '无数据'.'<br>';

  }

  return;

  }

  $cols = mysql_num_fields($result);

  echo '<table border="1">';

  echo '<tr>';

  for($i=0; $i<$cols; $i++)

  {

  echo '<th>';

  echo mysql_field_name($result, $i);

  echo '</th>';

  }

  echo '</tr>';

  while($row = mysql_fetch_assoc($result))

  {

  echo '<tr>';

  foreach($row as $key=>$value)

  {

  echo '<td>';

  echo $value;

  echo '</td>';

  }

  echo '</tr>';

  }

  echo '</table>';

  }

  private function setCurPage($curPage){

  if($curPage < 1)

  {

  $curPage = 1;

  }

  else if($curPage > $this->totalPages)

  {

  $curPage = $this->totalPages;

  }

  $this->curPage = $curPage;

  }

  /*

  显示分页页脚的信息

  如首页,上一页,下一页,尾页等信息

  */

  private function showFoot(){

  echo '<a href="?curPage=1">首页</a>';

  echo '<a href="?curPage='.($this->curPage - 1).'">上一页</a>';

  echo '<a href="?curPage='.($this->curPage + 1).'">下一页</a>';

  echo '<a href="?curPage='.$this->totalPages.'">尾页</a>';

  }

  }

  ?>

  方法二:

  

复制代码 代码如下:

  <?php

  class mysqlPager{

  var $pagePerNum=5;//每页显示数据项数

  var $pagePerGroup=5;//每分页组中页数

  var $curPage=0;//当前页,Defualt 第一页

  var $totalPage=0;//总页数

  var $totalNum=0;//数据项总数

  var $curPageGroup=0;//当前分页组

  var $curPageUrl="";//当前用到分页的 URL

  var $customStyle="";//自定义风格

  var $pageQuerySql="";

  function mysqlPager(){//构造函数 PHP4

  }

  /**

  * 初始化所有变量

  */

  function InitAllVar($totalNum,$pagePerGroup,$curPageUrl,$curPage=1,$curPageGroup=1)

  {

  $this->totalNum=$totalNum;

  $this->pagePerGroup=$pagePerGroup;

  $this->curPageUrl=$curPageUrl;

  $this->curPage=$curPage;

  $this->curPageGroup=$curPageGroup;

  }

  /**

  * 设置当前页变量

  *

  * @param 数字 $curPage

  */

  function setCurPage($curPage)

  {

  $this->curPage=$curPage;

  }

  /**

  * 设置当前分页组变量

  *

  * @param mixed $curPageGroup

  */

  function setCurPageGroup($curPageGroup)

  {

  $this->curPageGroup=$curPageGroup;

  }

  /**

  * 设置当前用到分布类的URL

  * $curPageUrl string

  */

  function setCurPageUrl($curPageUrl)

  {

  $this->curPageUrl=$curPageUrl;

  }

  /**

  * 获取所有

  *

  * @param 数字 $totalNum

  * @param 数字 $curPage

  * @return float

  */

  function getTotalPage($totalNum,$curPage=0)

  {

  return $this->totalPage=ceil($totalNum/$this->pagePerNum);

  }

  /**

  * 设置用户自定义风格

  *

  * @param mixed $customStyle

  */

  function setCustomStyle($customStyle)

  {

  $this->customStyle=$customStyle;

  }

  /**

  * 设置用户自定义风格返回字符串

  *

  *

  * @param mixed $pagerString

  */

  function setCustomStyleString($pagerString)

  {

  return $styleString="<span class=".$customStyle.">".$pagerString."</span>";

  }

  /**

  * 输出导航页信息 可以不用参数,但是在使用前一定要设置相应的变量

  *

  * @param mixed $curPageGroup

  * @param mixed $curPage

  * @param mixed $curPageUrl

  */

  function showNavPager($curPageGroup=0,$curPage=0,$curPageUrl=0)

  {

  if($curPageGroup)

  {

  $this->curPageGroup=$curPageGroup;

  }

  if($curPage)

  {

  $this->curPage=$curPage;

  }

  if($curPageUrl)

  {

  $this->curPageUrl=$curPageUrl;

  }

  $rtnString="";

  //判断变量是否以经初始化

  if($this->curPageGroup && $this->curPageUrl && $this->totalNum && $this->curPage)

  {

  $this->totalPage=$this->getTotalPage($this->totalNum);

  if($this->curPage==1)

  $this->curPage=($this->curPageGroup-1)*$this->pagePerGroup+1;

  if($this->curPageGroup!=1)

  {

  $prePageGroup=$this->curPageGroup-1;

  $rtnString.="<a href=".$this->curPageUrl."?cpg=$prePageGroup >".$this->setCustomStyleString("<<")."</a> ";

  }

  for($i=1;$i<=$this->pagePerGroup;$i++)

  {

  $curPageNum=($this->curPageGroup-1)*$this->pagePerGroup+$i;

  if($curPageNum<=$this->totalPage){

  if($curPageNum==$this->curPage)

  {

  $rtnString.=" ".$this->setCustomStyleString($curPageNum);

  }else

  {

  $rtnString.=" <a href=$this->curPageUrl?cpg={$this->curPageGroup}&cp=$curPageNum >";

  $rtnString.=$this->setCustomStyleString($curPageNum)."</a>";

  }

  }

  }

  if($this->curPageGroup<ceil($this->totalPage/$this->pagePerGroup)-1)

  {

  $nextPageGroup=$this->curPageGroup+1;

  $rtnString.=" <a href=$this->curPageUrl?cpg=$nextPageGroup >".$this->setCustomStyleString(">>")."</a>";

  }

  $this->pageQuerySql=" limit ".(($this->curPage-1)*$this->pagePerNum).",".$this->pagePerNum;

  }

  else

  {

  $rtnString="错误:变量未初始化!";

  }

  return $rtnString;

  }

  /**

  * 得到完整的查询MYSQL的Sql语句

  *

  * @param mixed $sql

  */

  function getQuerySqlStr($sql)

  {

  $allsql=$sql.$this->pageQuerySql;

  return $allsql;

  }

  /**

  * 设置每页有多少数据项

  *

  * @param INT $num

  */

  function setPagePerNum($num)

  {

  $this->pagePerNum=$num;

  }

  }

  ?>

  使用方法:

  $curPage=$_GET['cp'];

  $curPageGroup=$_GET['cpg']

  if($curPage=="")

  $curPage=1;

  if($curPageGroup=="")

  $curPageGroup=1;

  //都是从1开始,之前要对传入的数据进行验证,防注入

  //。。。

  $pager=new MysqlPager();

  $pager->initAllVar(...)

  $pager->showNavPager();

  //后面的SQL可以是任意的输出

  $sql="select id form dbname ";

  $querysql=$pager->getQuerySqlStr($sql)

  //以后用$querysql 查询数据库就可以得到相应的结果集了

  方法三:

  PHP分页函数:

  

复制代码 代码如下:

  < ?

  //为了避免重复包含文件而造成错误,

  加了判断函数是否存在的条件:

  if(!function_exists(pageft)){

  //定义函数pageft(),三个参数的含义为:

  //$totle:信息总数;

  //$displaypg:每页显示信息数,这里设置为默认是20;

  //$url:分页导航中的链接,除了加入不同的查询信息

  “page”外的部分都与这个URL相同。

  //默认值本该设为本页URL(即$_SERVER["REQUEST_URI"])

  ,但设置默认值的右边只能为常量,所以该默认值设为空字符串

  ,在函数内部再设置为本页URL。

  function pageft($totle,$displaypg=20,$url=”){

  //定义几个全局变量:

  //$page:当前页码;

  //$firstcount:(数据库)查询的起始项;

  //$pagenav:页面导航条代码,函数内部并没有将它输出;

  //$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。

  global $page,$firstcount,$pagenav,$_SERVER;

  //为使函数外部可以访问这里的“$displaypg”,

  将它也设为全局变量。注意一个变量重新定

  义为全局变量后,原值被覆盖,所以这里给它重新赋值。

  $GLOBALS["displaypg"]=$displaypg;

  if(!$page) $page=1;

  //如果$url使用默认,即空值,则赋值为本页URL:

  if(!$url){ $url=$_SERVER["REQUEST_URI"];}

  //URL分析:

  $parse_urlparse_url=parse_url($url);

  $url_query=$parse_url["query"];

  //单独取出URL的查询字串

  if($url_query){

  //因为URL中可能包含了页码信息,我们要把它去掉,

  以便加入新的页码信息。

  //这里用到了正则表达式,请参考“PHP中的正规表达式”

  $url_query=ereg_replace(”(^|&)page=$page”,”",$url_query);

  //将处理后的URL的查询字串替换原来的URL的查询字串:

  $url=str_replace($parse_url["query"],$url_query,$url);

  //在URL后加page查询信息,但待赋值:

  if($url_query) $url.=”&page”; else $url.=”page”;

  }else {

  $url.=”?page”;

  }

  $lastpg=ceil($totle/$displaypg);

  //最后页,也是总页数

  $page=min($lastpg,$page);

  $prepg=$page-1;

  //上一页

  $nextpg=($page==$lastpg ? 0 : $page+1);

  //下一页

  $firstcount=($page-1)*$displaypg;

  //开始分页导航条代码:

  $pagenav=”显示第 < B>”.($totle?($firstcount+1):0).”

  < /B>-< B>”.min($firstcount+$displaypg,$totle).”

  < /B> 条记录,共 $totle 条记录< BR>”;

  //如果只有一页则跳出函数:

  if($lastpg<=1) return false;

  $pagenav.=” < a href='$url=1′>首页< /a> “;

  if($prepg) $pagenav.=” < a href='$url=$prepg'>

  前页< /a> “; else $pagenav.=” 前页 “;

  if($nextpg) $pagenav.=” < a href='$url=$nextpg'>

  后页< /a> “; else $pagenav.=” 后页 “;

  $pagenav.=” < a href='$url=$lastpg'>尾页< /a> “;

  //下拉跳转列表,循环列出所有页码:

  $pagenav.=” 到第 < select name='topage'

  size='1′ onchange='window.location=\”

  $url=\”+this.value'>\n”;

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

  if($i==$page) $pagenav.=”< option value='$i'

  selected>$i< /option>\n”;

  else $pagenav.=”< option value='$i'>$i< /option>\n”;

  }

  $pagenav.=”< /select> 页,共 $lastpg 页”;

  }

  }

  ?>

  分页时调用pageft()函数。不过它并没有输出任何东西,但产生几个全局变量供使用:$firstcount、$displaypg、$pagenav。

  下面举例说明PHP分页函数的用法:

  

复制代码 代码如下:

  < ?

  //(前面程序略)

  include(”pageft.php”);

  //包含“pageft.php”文件

  //取得总信息数

  $result=mysql_query(”select

  * from mytable”);

  $total=mysql_num_rows($result);

  //调用pageft(),每页显示10条信息

  (使用默认的20时,可以省略此参数),

  使用本页URL(默认,所以省略掉)。

  pageft($total,10);

  //现在产生的全局变量就派上用场了:

  $result=mysql_query(”select *

  from mytable limit $firstcount,

  $displaypg “);

  while($row=mysql_fetch_array($result)){

  //(列表内容略)

  }

  //输出分页导航条代码:

  echo $pagenav;

  //(后面程序略)

  ?>