Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19285783
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: Mysql/postgreSQL

2008-04-01 17:14:43

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) |
给主人留下些什么吧!~~