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】