|
<br> 我们在浏览网页时,经常看到分页显示的页面。如果想把大量数据提供给浏览者,分页显示是个非常实用的方法。在下面的文章中,我们将介绍如何用PHP和MS SQL Server实现对数据库中纪录的分页显示。 <BR><BR><BR> 在本例中,我们用mssql_num_rows()函数得到当前查询的记录数,结合页面大小SgPageSize,得到当前记录集要显示的页面数,为分页显示打下了基础。mssql_data_seek()函数是分页显示的关键函数,该函数的第二个参数标示当前纪录的偏移量,根据这个偏移量就可以找到要显示的页面。 <BR><BR><BR> 分页显示源程序: <BR><BR><BR><br><html> <BR><BR><head> <BR><BR><title> HP分页</title> <BR><BR></head> <BR><BR><body> <BR><BR><? <BR><BR>//为了便于理解和更快地应用到工作中去,我们以MS SQL Server的NorthWind数据库Customers表为例。 <BR><BR>$gPageSize= 10; //每页显示的记录数 <BR><BR>$hostname = "localhost"; //MSSQL Server <BR><BR>$dbuser = "sa"; //用户名 <BR><BR>$dbpasswd = "1111111"; //密码 <BR><BR>//连接数据库 <BR><BR>$id = mssql_connect($hostname,$dbuser,$dbpasswd) or die("无法连接数据库服务器!"); <BR><BR>//选择数据库,为了方便,这里以MSSQL Server的NorthWind数据库为例 <BR><BR>$db = mssql_select_db("northwind",$id) or die("无法连接数据库!"); <BR><BR>//以Customers表为例,构建查询字符串 <BR><BR>$query = "select * from Customers"; <BR><BR>//执行查询语句 <BR><BR>$rresult = mssql_query($query) or die("无法执行SQL:$query"); <BR><BR>//$page变量标示当前显示的页 <BR><BR>if(!isset($page)) $page=1; <BR><BR>if($page==0) $page=1; <BR><BR>//得到当前查询到的纪录数 $nNumRows <BR><BR>if(($nNumRows= mssql_num_rows($rresult))<=0) <BR><BR>{ <BR><BR>echo "<p align=center>没有纪录"; <BR><BR>exit; <BR><BR>}; <BR><BR>//得到最大页码数MaxPage <BR><BR>$MaxPage = (int)ceil($nNumRows/$gPageSize); <BR><BR>if((int)$page > $MaxPage) <BR><BR>$page=$maxPage; <BR><BR>?> <BR><BR><table align="center" width="80%" border=0> <tr><td><? echo "<font size=2>第 <BR>$page 页,共 $MaxPage 页</font>";?></td><td></td></tr></table> <BR><BR><table align="center" width="80%" border="1" cellspacing="0" cellpadding="4" bordercolorlight="#CC9966" bgcolor="#00F2EE" bordercolordark="#FFFFFF" class="LZH"> <BR><BR><tr bgcolor="#F7F2ff" style="font-size:14.8px;font-weight:bold"> <BR><BR><? <BR><BR>//显示表格头 <BR><BR>for($iCnt = 0; $iCnt < mssql_num_fields($rresult); $iCnt++) <BR><BR>{ <BR><BR>echo "<td>".mssql_field_name($rresult,$iCnt)."</td>" ; <BR><BR>} <BR><BR>?> <BR><BR></tr> <BR><BR><? <BR><BR>//根据偏移量($page - 1)*$gPageSize,运用mssql_data_seek函数得到要显示的页面 <BR><BR>if( mssql_data_seek($rresult,($page-1)*$gPageSize) ) <BR><BR>{ <BR><BR>$i=0; <BR><BR>//循环显示当前纪录集 <BR><BR>for($i;$i<$gPageSize;$i++) <BR><BR>{ <BR><BR>echo "<tr style=\"font-size:12px\">"; <BR><BR>//得到当前纪录,填充到数组$arr; <BR><BR>$arr= mssql_fetch_row($rresult); <BR><BR>if($arr) <BR><BR>{ <BR><BR>//循环显示当前纪录的所有字段值 <BR><BR>for($nOffSet = 0;$nOffSet < count($arr);$nOffSet++) <BR><BR>{ <BR><BR>echo "<td>".$arr[$nOffSet]."</td>"; <BR><BR>} <BR><BR>} <BR><BR>echo "</tr>"; <BR><BR>} <BR><BR>} <BR><BR>?> <BR><BR></table> <BR><BR><br> <BR><BR><hr size=1 width=80%> <BR><BR><div align=center style="font-size:12px"> <BR><BR><? <BR><BR>//首页和上一页的链接 <BR><BR>if( $nNumRows>1 && $page>1) <BR><BR>{ <BR><BR>$prevPage=$page-1; <BR><BR>echo " <a href=$PHP_SELF?page=1>首页</a> "; <BR><BR>echo " <a href=$PHP_SELF?page=$prevPage >上一页</a> "; <BR><BR>} <BR><BR>//下一页和末页的链接 <BR><BR>if( $page>=1 && $page<$MaxPage) <BR><BR>{ <BR><BR>$nextPage= $page+1; <BR><BR>echo " <a href=$PHP_SELF?page=$nextPage >下一页</a> "; <BR><BR>echo " <a href=$PHP_SELF?page=$MaxPage >末页</a> "; <BR><BR>} <BR><BR>?> <BR><BR></div> <BR><BR></body> <BR><BR></html> <BR><BR> <BR>把上述脚本程序进行一些修改,你就可以建立自己的服务器端分页显示的脚本程序了。 <br><br> |
|