Posted in PHP onOctober 21, 2013
方法一:
<?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; //(后面程序略) ?>
实用的简单PHP分页集合包括使用方法
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@