您所在的位置: 首页>>读书频道>>设计开发>>网站开发>>

8.3.6 数据分页显示

http://book.51cto.com  2008-06-02 17:00  叶新伟等编著  电子工业出版社  我要评论(0)
  • 摘要:《PHP+Ajax Web 2.0编程技术与项目开发大全》第8章主要讲的是PHP和MySQL的应用,在网站项目中,网站的数据是存放在数据库中的。PHP+MySQL是一个非常好的网站解决方案,具有非常好的性能和安全性。在PHP网站中,程序常常进行数据库访问,数据库访问是通过SQL语句完成的。本章讲解PHP对MySQL数据库进行连接、表单使用、数据查询等方面的内容,本节为您介绍的是数据分页显示。
  • 标签:PHP+Ajax  编程技术  程序  PHP  MySQL  项目开发

8.3.6  数据分页显示

本章8.3.2节中的数据列表程序,只是对少数几个数据进行列表。如果显示的数据很多,显示在一页上就不利于数据的查看,这时需要对显示的数据进行分页显示。在分页显示时,需要理解分页的算法和分页链接的生成方法。下面的实例,可以实现8.3.2节中的数据分页显示。

在代码中先完成数据总行数的统计和页数的计算,生成当前页数的第一条记录所在的行数,代码如下所示。

代码8-22  分页显示(\源文件\08\page.php)

1. <html>
2. <head>
3. <title>院系管理列表</title>
4. </head>
5. <body>
6. <div align="center">院系管理列表</div>
7. <?php
8. require_once("conn.php");      //包含数据库连接文件
9. $sql = "select * from tb_class";   //构造SQL语句
10. $rs=  mysql_query($sql)       //进行SQL查询
11. or die('数据库查询失败') ;
12. $pagesize= 7;        //定义每页的记录数
13. $sum = mysql_numrows($rs);     //用mysql_numrows函数求得总记录数
14. if($sum % $pagesize==0)     //算出总页数
15.    $total=(int)($sum /$pagesize);
16. else
17.    $total=(int)($sum /$pagesize)+1;
18. if(isset($_GET['page']))     //如果在URL中,有page则赋值
19. {
20.    $page = (int)$_GET['page'];
21. }
22. else          //如果URL中没有page则$page为1
23.    $page  =1 ;
24. if($page < 1 or $page> $total)    //如果$page不合法则为1
25.    $page = 1 ;
26. $start = ($page-1) * $pagesize;   //第一条记录所在的行数
27. $sql = "select * from tb_class limit ".$start .", ". $pagesize;
28. $rs=  mysql_query($sql)  ;     //构造SQL语句进行查询

在这段代码中,需要注意的算法如下所示。

在分页算法中,最重要的是页数的处理。在代码的第13行,用mysql_numrows函数求得记录中一共有多少行记录,赋值给$sum。

在代码的第14行,计算总页数。在进行计算时,需要考虑不够一整页的情况。如果$sum对$pagesize求余有余数,则在页数上加1。

注意当前需要显示的页数。第18行,判断URL中是否有page变量,如果有则转换成整型后赋值给$page;否则,定义当前的页数为1。

第24行,判断URL中传来的页数是否合法,如果不合法则设置当前页数为1。

第26行,计算出当前页数第1条记录所在的行数。

第27行,在SQL语句中,用limit子句选择当前页中的记录。例如“limit 5,10”,表示返回记录集中的第5行记录以后的10行数据。这里的行数是从0开始计算的。第28行进行数据查询,返回的记录集为$rs。

下面的代码进行数据的列表显示。

29. echo "<table width=300 border=1 align=center>"; 
30. echo "<tr><td>院系名称</td><td>管理</td></tr>";
31. while($row=mysql_fetch_array($rs))   //依次从
记录集中取一行数据,返回数组赋值到$row
32. {
33.  echo "<tr>";       //循环生成行
34.  echo "<td>". $row['class'] ."</td>";  //生成列和显示数据
35.  echo "<td><a href=yuanxi_del.php?id=". $row['id'] .">删除</a>  
36.  <a href=yuanxi_edit.php?id=". $row['id'] .">编辑</a></td>";
37.  echo "</tr>";
38. }
39. echo "</table>";

在这段代码中,用while循环生成表格,显示记录集中的数据。代码分析如下所示。

代码的第29行和第30行,输出表格和表格第一行的提示信息。

第31行,用mysql_fetch_array函数依次从记录集“$rs”中取出一行记录,返回数据赋值给$row,$row作为while循环的条件进行循环。

代码的第32~38行是while循环的循环体。第33行在每次循环时生成表格的一行,第34~36行生成表格的两列。

上面的这些代码完成了数据的分页显示和数据记录的列表输出。但是在实际程序中,记录有多页时,需要生成翻页链接,用户可以单击这些链
接实现翻页功能。翻页链接的代码如下所示。

 40. echo "<div align=center>";       //<div>标签实现居中显示
41. if($page>1 && $total >1)       //生成第一页链接
42. {
43. echo  "<a href=?page=1 >第一页</a> ";
44. }
45. if($page>1 && $total >1)       //生成上一页链接
46. {
47. echo  "<a href=?page=". ($page-1) ." >上一页</a> ";
48. }
49. if($page<$total && $total >1)      //生成下一页链接
50. {
51. echo  "<a href=?page=".( $page+1 )." >下一页</a> ";
52. }
53. if($page<$total && $total >1)      //生成末页链接
54. {
55. echo  "<a href=?page=".( $total )." >末页</a> ";
56. }
57. echo "</div>"
58. ?>
59. </body>
60. </html>

在生成翻页链接时,需要判断当前页数和总页数的关系,在不同的情况下选择生成链接。生成链接的算法分析如下所示。

在代码的第41~44行,当前页数大于1且总页数大于1时,生成第一页的链接。第一页链接page=1。

在代码的第45~48行,当前页数大于1且总页数大于1时,生成上一页的链接。上一页链接page=$page-1。

在代码的第49~52行,当前页数小于总页数且总页数大于1时,生成下一页的链接。下一页链接page=$page+1。

在代码的第53~55行,当前页数小于总页数且总页数大于1时,生成末页链接。末页链接page=$total。

★ 注意 ★

在第47行和第51行中,需要用小括号改变运算顺序,否则会先运行字符串连接,导致程序出错。

运行这个网页,效果如图8.6所示。在网页中,可以单击分页链接,实现显示内容的翻页。在显示数据较多时,需要用这种分页算法实现数据的分页显示。

 
图8.6  数据的分页显示
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
深入Vista应用程序开发
Sun以10亿美元并购开源数据库厂商MySQL
程序员如何成长?
MySQL5.0新品推介
MySQL基础与配置
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有