Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。 /}1LP#$A
- Kw?S
一、分页程序的原理 iFC %3v1b
i,g
分页程序有两个非常重要的参数:每页显示几条记录($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条记录。 nYX"+Z
_0 (=n
二、主要代码解析 X\-R=GzS!
eKZht~U
$pagesize=10; //设置每一页显示的记录数 qQK_Mw<
$conn=mysql_connect("localhost","root",""); //连接数据库 IM p=f
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs M&W1P{*
$myrow = mysql_fetch_array($rs); 7C=~Xf$
$numrows=$myrow[0]; _Q35" J
k5_EgOF
//计算总页数 h' Td0C
1H|Is"
$pages=intval($numrows/$pagesize); h)kuQm
gh)M=J.
//判断页数设置 ?%L?Pe^RK
o $|wvyB`
if (isset($_GET['page'])){ 9y<<:TX6e
$page=intval($_GET['page']); {EpT`^Q
} UBK#e8U,h
else{ .# !DhU,
$page=1; //否则,设置为第一页 Sm9]'<{?g
} T*XT?6hT
6$\9X%=Q5
三、创建用例用表myTable |f>'7VLw[
3 E) ?:i\
create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id)) 1)AN~n>'
~F&@cw{yV]
四、完整代码 `0sL!a
egc&(5/Fb,
<html> pP5(t y>
<head> "-wO PHp
<title>php分页示例</title> \J7W
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> gywk'4f
</head> tqE 6M a
2SKqY-p
<body> UO'n/8
<?php j*y^ )FXF
$conn=mysql_connect("localhost","root",""); m488IJAk
//设定每一页显示的记录数 `da]{oN}@
$pagesize=1; (n8 i:Fu
mysql_select_db("mydata",$conn); {ZF|A #
//取得记录总数$rs,计算总页数用 eCIz6CJ
$rs=mysql_query("select count(*) from tb_product",$conn); _34&Y*`5
$myrow = mysql_fetch_array($rs); e>G;sbLk B
$numrows=$myrow[0]; dp?\?.t
//计算总页数 zYupt
*s/ADVS
$pages=intval($numrows/$pagesize); D|&CvO H
if ($numrows%$pagesize) wyY+Rj Mg
$pages ; t6KcL71[k
//设置页数 As;VJ j}[
if (isset($_GET['page'])){ `K <e'K5
$page=intval($_GET['page']); VT$n6
} yf'B{P^^4
else{ RZZ(/bR
//设置为第一页 ~]M'P~O"
$page=1; B.xTqq*
} )Mgqc)F|Y
//计算记录偏移量 ]#.l5'{z
$offset=$pagesize*($page - 1); vRqxvLa
//读取指定记录数 J`N8W#r(
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn); PiJ0Sfz
if ($myrow = mysql_fetch_array($rs)) d~ zZ{V
{ LVdn #k
$i=0; .)*B`n2k
?> Mv_82\A5
<table border="0" width="80%"> vgfL TZN
<tr> ](`#?}
<td width="50%" bgcolor="#E0E0E0"> 87jZfu?
<p align="center">标题</td> 5?^Dt
<td width="50%" bgcolor="#E0E0E0"> Cj yKd?
<p align="center">发布时间</td> K`gt^a W
</tr> qh VPX&
<?php ~fX^>)U
do { r'Lx|Ye cU
$i ; D!
?> !UF99Uyx
<tr> ec}SPgfg
<td width="50%"><?=$myrow["news_title"]?></td> '#yp[K')
<td width="50%"><?=$myrow["news_cont"]?></td> ?i2l;>
</tr> L])`5y{/
<?php !gW Kb
} T%w;'
while ($myrow = mysql_fetch_array($rs)); TtbCy'Ys
echo "</table>"; - GP$' 8{
} |\OwC`']
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")"; "I;NoD 5w
for ($i=1;$i< $page;$i ) Hd5+UEr'<
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> "; u04v
echo "[".$page."]"; ;W=% {
for ($i=$page 1;$i<=$pages;$i ) ndg;!~C
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> "; P-tk- ,ap
echo "</div>"; +%BWS)
?> #;G|>+
</body> V1$R)MSZ
</html> Haoz+)M
%&}8O\M
五、总结 G?,!&.!=
e3pM[,1p1
本例代码在windows2000 server php4.4.0 mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码: h`o)WN
XH(lu{eY3O
$first=1; 0XC +0)5%
$prev=$page-1; khI79%e
$next=$page 1; mCcU
$last=$pages; xr2id8X '
V>9n 5K
if ($page > 1) j6~\x&g~ "
{ `pW>{Dq
echo "<a href='fenye.php?page=".$first."'>首页</a> "; {lMV[cg{
echo "<a href='fenye.php?page=".$prev."'>上一页</a> "; NTo2u6I
} @dY++M4(M
o0(+ W?h
if ($page < $pages) aZ4xeb
{ Bs N y8f|
echo "<a href='fenye.php?page=".$next."'>下一页</a> wY [*N
echo "<a href='fenye.php?page=".$last."'>尾页</a> "; gIuT *lD
} cca'X
d(G#il[%h
其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。 `B) &D
dQJ
阅读(594) | 评论(0) | 转发(0) |