[转载]详细注释帮你了解PHP分页
<?php/**
*页面:datadisplay.php
*功能:分页显示数据,模仿Google的分页方法,可用于文章列表More页面或者后台数据管理等。
*方法:修改$dbhost,$dbusername$dbpassword,$dbname,$dbtablename为你运行环境的真实值
* 然后保存为php文件,在浏览器浏览执行该文件即可得到显示效果,如果像得到其它效果还可修改$pageSize等参数
*作者:十月冷风(Taoshuchen)
*OICQ: 2578549
*创建时间:2007-05-28
*版权:以上信息随意删除,知识来自互联网,只为分享经验心得,不存在任何版权问题。
*/
$dbhost="host"; //数据库地址
$dbusername="usernmae"; //链接数据库用户名
$dbpassword="password"; //数据库密码
$dbname="databasename"; //数据名称
$dbtablename="tablename"; //数据表名
$conn = mysql_connect($dbhost,$dbusername,$dbpassword); //链接数据库(地址,数据库用户名,数据密码)
mysql_select_db($dbname,$conn)or die("链接数据库失败"); //设置当前使用的数据库名
$sql_select="SELECT * FROM $dbtablename";
$rs=mysql_query($sql_select,$conn);
$totalRows=mysql_num_rows($rs); //总记录数
if ($totalRows>0) { //当然了,只有表中有数据才会用下面的一大堆程序来显示
$pageSize = 10; //每页显示的记录数
#当前页号$page,这个值由分页的链接得来,如果没有提供这个参数默认是显示第一页
if(!empty($_GET['page'])){
$page=$_GET['page'];
}else {
$page=1;
}
$totalPage = (int)ceil($totalRows/$pageSize); //总页数 总页数等于总记录数除以每页显示条数小数部分进一取整
#下面只是一些数据合法性的判断
if((int)$page<1){
$page=1;
}
if((int)$page > $totalPage){
$page=$totalPage;
}
#下面的加减2表示显示当前页前两页和后两页的,这个数字2可以根据你的需要修改,目的是为了像google那样只显示一定数量的分页链接,不至于在超大数据量分页时显示几十甚至上百个分页链接
#当然如果你一定要全都显示出来,只需要指定$begin=1;$end=$totalPage;即可
$begin = $page - 2;
$end = $page + 2;
#再下面还是一些数据合法性的判断
if($page<3){
$begin = 1;
$end = 5; //这里是你要提供的可用链接数,本例就是当前页加前后两页共5页,if条件为可用链接数的一半
}
if($page>$totalPage-2){
$begin = $totalPage - 4;
$end = $totalPage;
}
if($begin<1){
$begin = 1;
}
if($end>$totalPage){
$end = $totalPage;
}
#下面开始输出分页链接
echo "共有 $totalPage 页 $totalRows 条 <a href=\"?page=".($page-1)."\">< Back</a>";
#接下来的就是显示带有链接的1、2、3、4...5、6、7、8了
for($i=$begin; $i<=$end; $i++){
echo(" ");
echo("<a href=\"?page={$i}\">");
if($i==$page) echo("<font color=\"red\">");
echo("$i");
if($i==$page) echo("</font>");
echo("</a>");
echo(" ");
if($i!=$end) echo("|");
}
echo ("<a href=\"?page=".($page+1)."\">Next ></a>\n");
#链接显示完了下面就是显示数据了,当然了显示效果大家可以尽情发挥,这里只是提供一个通用的模式
#By the way:不论美工给你设么样效果页面,充分利用我们的 if for 绝对可以搞定
$beginNum=($page-1)*$pageSize; //查询记录从第几条开始
$sql_select="SELECT * FROM $dbtablename LIMIT $beginNum,$pageSize";
$rs=mysql_query($sql_select,$conn);
$rs_field_counts=mysql_num_fields($rs); //查询得到的字段数
echo ("<table border='1'>\n");
echo ("<tr bgcolor=\"#CCFFCC\">\n");
#显示表头,当然实际应用中不太可能直接输出数据库的字段名,那就把下面的for循环直接写成你要显示的表头就好了
for ($i=0;$i<$rs_field_counts;$i++){
$rs_field_name=mysql_field_name($rs,$i);
echo("<th>$rs_field_name</th>");
}
echo ("\n</tr>\n");
#显示数据
$row_number=0; //这个变量用于控制行显示颜色,
while ($row=mysql_fetch_array($rs)){
#判断是单数行还是偶数行,这个原理同样适用于每行显示两条记录的情况(带图片的产品展示一般会用到)
if ($row_number%2==0) {
$tr_color="#CCFFFF";
}else{
$tr_color="#CCFFCC";
}
echo ("<tr bgcolor=\"$tr_color\">\n");
for ($i=0;$i<$rs_field_counts;$i++){
echo ("<td>");
if(empty($row[$i])){
echo (" ");
}else {
echo ($row[$i]);
}
echo ("</td>");
}
echo ("\n</tr>\n");
$row_number++;
}
echo "</table>\n"; //不要忘了数据显示结束一定要输出这个呦!只有到这里你才算大功告成。
}else { //如果表中没有数据
echo("sorry,任何数据!<br />\n");
}
//下面两句纯熟充数 :)
mysql_free_result($rs);
mysql_close($conn);
?>