\n
Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
\n
\n
一、分页程序的原理
\n
\n
分页程序有两个非常重要的参数:每页显示几条记录(pagesize)和当前是第几页(page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在MySQL里如果要想取出表内某段特定内容可以使用的T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=pagesize*(page-1),rows是要显示的记录条数,这里就是page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
\n
\n
二、主要代码解析
\n
\n
\n
\npagesize=10; //设置每一页显示的记录数 \nconn=mysql_connect(“localhost”,”root”,”"); //连接数据库 \nrs=mysql_query(“select count(*) from tb_product”,conn); //取得记录总数rs \nmyrow = mysql_fetch_array(rs); \nnumrows=myrow[0];\n//计算总页数 \npages=intval(numrows/pagesize); \n//判断页数设置 \nif (isset(_GET[\'page\'])){ \n page=intval(_GET[\'page\']); \n} \nelse{ \n page=1; //否则,设置为第一页 \n} |
\n
三、创建用例用表myTable
\n
\n
\n
\ncreate table myTable \n(id int NOT NULL auto_increment,news_title varchar(50), \nnews_cont text,add_time datetime,PRIMARY KEY(id)) |
\n
四、完整代码
\n
\n
\n
\n<html> \n<head> \n<title>php分页示例</title> \n<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> \n</head>\n<body> \n<?php \n conn=mysql_connect(“localhost”,”root”,”"); \n //设定每一页显示的记录数 \n pagesize=1; \n mysql_select_db(“mydata”,conn); \n //取得记录总数rs,计算总页数用 \n rs=mysql_query(“select count(*) from tb_product”,conn); \n myrow = mysql_fetch_array(rs); \n numrows=myrow[0]; \n //计算总页数 \n pages=intval(numrows/pagesize); \n if (numrows%pagesize) \npages++; \n //设置页数 \n if (isset(_GET[\'page\'])){ \npage=intval(_GET[\'page\']); \n } \n else{ \n//设置为第一页 \npage=1; \n } \n //计算记录偏移量 \n offset=pagesize*(page – 1); \n //读取指定记录数 \n rs=mysql_query(“select * from myTable \n order by id desc limit offset,pagesize”,conn); \n if (myrow = mysql_fetch_array(rs)) \n { \ni=0; \n?> \n<table border=”0″ width=”80%”> \n<tr> \n <td width=”50%” bgcolor=”#E0E0E0″> \n<p align=”center”>标题</td> \n<td width=”50%” bgcolor=”#E0E0E0″> \n<p align=”center”>发布时间</td> \n</tr> \n<?php \n do { \ni++; \n?> \n<tr> \n <td width=”50%”><?=myrow["news_title"]?></td> \n <td width=”50%”><?=myrow["news_cont"]?></td> \n</tr> \n <?php \n } \n while (myrow = mysql_fetch_array(rs)); \necho “</table>”; \n} \necho “<div align=’center’>共有”.pages.”页(“.page.”/”.pages.”)”; \nfor (i=1;i< page;i++) \n echo “<a href=’fenye.php?page=”.i.”‘>[".i ."]</a> “; \n echo “[".page."]“; \n for (i=page+1;i<=pages;i++) \necho “<a href=’fenye.php?page=”.i.”‘>[".i ."]</a> “; \necho “</div>”; \n ?> \n</body> \n</html> |
\n
五、总结
\n
\n
本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:
\n
\n
\n
\nfirst=1; \nprev=page-1; \nnext=page+1; \nlast=pages;\nif (page > 1) \n{ \n echo “<a href=’fenye.php?page=”.first.”‘>首页</a> “; \n echo “<a href=’fenye.php?page=”.prev.”‘>上一页</a> “; \n} \nif (page < pages) \n{ \n echo “<a href=’fenye.php?page=”.next.”‘>下一页</a> \n echo “<a href=’fenye.php?page=”.last.”‘>尾页</a> “; \n} |
\n
其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。
\n
\n