PHP分页函数代码实例说明
在PHP网站开发与建设过程中,分页显示相关数据是我们经常遇到的,而PHP+Mysql的分页显示技术有不同的解决方案,今天和大家分享我自己写的PHP分页代码,数据库采用Mysql。
此PHP分页代码主要由以下几个PHP分页函数组成:
分页页数计算函数(getTotalpages)、分页参数设定函数(setPagesPar)、Mysql分页记录函数(turnPages)、分页显示样式函数(showTurnPages)
PHP分页代码显示效果
1 2 3 4 5 6 7 8 9 10 > >>
<< <10 11 12 13 14 15 16 17 18 19 > >>
<< <19 … … … … … … … … … … …> >>
startpage:1、10、19、28….
<<:首页 >>:尾页 <:前十页 >:后十页
需要预先设定的PHP分页参数说明
$pageSize:页面记录数,即每个页面显示多少条记录
$showpagenum:一次显示多少页码数
$url:链接的具体页面地址,建议采用相对地址
PHP分页页数计算函数代码实例
功能:计算需要显示的总页数
算法:总记录数/每个页面显示的记录数
1 2 3 4 | function getTotalpages($sql,$pageSize) { return ceil(@mysql_num_rows(query_error($sql))/$pageSize); } |
注:query_error($sql)函数相当于mysql_query()函数,ceil函数用来取整数。
PHP分页参数设定函数代码实例
功能:设定分页函数所需要的相关参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | function setPagesPar($page,$totalpages,$startpage,$showpagenum,$direct) { if($page>$totalpages ||$page <=0) { $page = 1; $startpage = 1; } $tail = 1; $startpagecode = array(''); $startpagecode[0] = 1; for($i=1;$i<=(($totalpages/$showpagenum));$i++) { $tail = $tail + ($showpagenum-1); $startpagecode[$i] = $tail; } if(!in_array($startpage,$startpagecode)) { $startpage = $startpagecode[0]; $page = 1; } if(!($page%$showpagenum)) { if($startpage == 1) $startpage = $showpagenum; else { if($page == $startpage) { if($direct == 'next' || $direct == 'prev'|| $direct == 'tail') $startpage = $startpage; else $startpage = $startpage - ($showpagenum-1); } } $info['page'] = $page; $info['startpage'] = $startpage; $info['tail'] = $tail; return $info; } if($page%$showpagenum && $startpage!=1) { if($page == $startpage) { if($direct == 'next' || $direct == 'prev') $startpage = $startpage; else $startpage = $startpage - ($showpagenum-1); } else { if($page == ($startpage+($showpagenum-1))) $startpage = $startpage + ($showpagenum-1); } $info['page'] = $page; $info['startpage'] = $startpage; $info['tail'] = $tail; return $info; } $info['page'] = $page; $info['startpage'] = $startpage; $info['tail'] = $tail; return $info; } |
注释:此PHP分页函数主要用来设定这些分页参数:当前页($page);下一个$showpagenum的起始页($startpage),即如之前显示效果所示的1,10,19,28…,我在应用这个PHP分页函数时设定$showpagenum = 10;最后十页的起始页($tail)
第9~23行:获取每隔$showpagenum页的起始页数以及最后$showpagenum页的起始页($tail),并做一定的预判,如非法输入则将$startpage和当前页初始化。
第25~65行:主要用来判断分页显示以$startpage为基点的前十分页还是后十分页
Mysql分页记录函数代码实例
功能:根据Mysql的SQL语句获取对应的Mysql分页记录集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function turnPages($currentPage,$pageSize,$sql) { if(!is_numeric($currentPage) || $currentPage<=0) $currentPage = 1; if(!is_numeric($pageSize) || $pageSize<=0) $pageSize = 10; $totalPages = getTotalpages($sql,$pageSize); if($currentPage>$totalPages && $totalPages>0) $currentPage = $totalPages; if($currentPage == 1) $start = 0; else $start = ($currentPage-1) * $pageSize; $sql = $sql.$start.",".$pageSize; return query_error($sql); } |
注释:此PHP分页函数主要用到了Mysql语句中的limit参数来实现获取指定分页中的相关记录。其通过计算Mysql数据库中相关记录的起始位置来获得指定数量($pageSize)的的记录。
PHP分页显示样式函数代码实例
功能:输出PHP分页代码显示效果,具体样式可以根据网站的需要自行修改相应样式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | function showTurnPages($startpage,$showpagenum,$totalpages,$tail,$url,$condition) { $newcon = "&"; if(count($condition)) { foreach($condition as $key =>$value) { if(strcmp("page", $key) == 0 || strcmp("startpage", $key) == 0 ) { continue; } $newcon = $newcon.$key."=".$value."&"; } } echo "<div>"; echo "<ul>"; if($startpage>=$showpagenum) { echo "<li><a href=\"".$url."?page=1&startpage=1".$newcon."\"><<</a></li>"; echo "<li><a href=\"".$url."?page=".($startpage-($showpagenum-1))."&startpage=".($startpage-($showpagenum-1))."&direct=prev".$newcon."\"><</a></li>"; } $turnpagenum = $startpage + $showpagenum; for($i=$startpage;$i< $turnpagenum;$i++) { if($i>$totalpages) break; echo "<li><a href=\"".$url."?page=".$i."&startpage=".$startpage.$newcon."\">".$i."</a></li>"; } if(($startpage+($showpagenum-1)) < $totalpages) { echo "<li><a href=\"".$url."?page=".($startpage+($showpagenum-1))."&startpage=".($startpage+($showpagenum-1))."&direct=next".$newcon."\">></a></li>"; echo "<li><a href=\"".$url."?page=".$tail."&startpage=".$tail."&direct=tail".$newcon."\">>></a></li>"; } echo "</ul></div>"; echo "</div>"; } |
注释:此PHP分页函数的功能主要是实现之前所说的PHP分页代码显示效果,分页函数的参数$condition是个数组,主要用来附带一些可能用到的条件查询,比如将此分页函数应用在查询页面。你可以将其理解为$_GET数组。
完整的调用方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //include("上述函数文件") $pageSize = 10; $totalpages = getTotalpages($sql,$pageSize); $showpagenum = 10; $url = "leapsoulcn.php"; if(!isset($_GET['page']) || !is_numeric($_GET['page']) || $_GET['page']<=0) { $page = 1; $startpage = 1; } if(!isset($_GET['startpage']) || !is_numeric($_GET['startpage']) || $_GET['startpage']<$showpagenum) { $startpage = 1; } if(!isset($_GET['direct']) || (strcmp($_GET['direct'],"next") && strcmp($_GET['direct'],"prev") && strcmp($_GET['direct'],"tail"))) $direct = ""; $pagePara = setPagesPar($page,$totalpages,$startpage,$showpagenum,$direct); $page = $pagePara['page']; $startpage = $pagePara['startpage']; $tail = $pagePara['tail']; $result = turnPages($page,$pageSize,$sql); //在html页面中显示分页页面的位置调用PHP分页显示样式函数 showTurnPages($startpage,$showpagenum,$totalpages,$tail,$url,$_GET); |
总结:
以上就是PHP分页函数代码的说明和使用方式,其实分页技术的实现原理主要在于Mysql数据库记录集中相应位置的算法。搞清楚了也就容易很多,当然如果在设计数据库时考虑到分页的问题,可能方法更简单。
注:PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。


















分页,开始接触PHP的时候研究过,哈哈,顶~~
嗯,这个要认真学习一下啊
思路值得学习,不过代码写的太烂了
呵呵,很久以前写的代码
Dear Author http://www.leapsoul.cn !
Good question
I want to quote your post in my blog. It can?
And you et an account on Twitter?
Sure,As long as you specify source from http://www.leapsoul.cn
I am sorry, I do not know why my twitter account can’t be accessed.Thank you for your support.