详细注释说明PHP分页原理

<?php
/**
*页面:datadisplay.php
*功能:分页显示数据,模仿Google的分页方法,可用于文章列表More页面或者后台数据管理等。
*方法:修改$dbhost,$dbusername$dbpassword,$dbname,$dbtablename为你运行环境的真实值
*     然后保存为php文件,在浏览器浏览执行该文件即可得到显示效果,如果像得到其它效果还可修改$pageSize等参数
*开源技术部落:7357904
*创建时间:2007-05-28
*版权:以上信息随意删除,知识来自互联网,只为分享经验心得,不存在任何版权问题。
*/
$dbhost="host";//数据库地址
$dbusername="username";//链接数据库用户名
$dbpassword="password";//数据库密码
$dbname="dbname";//数据名称
$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 = 2; //每页显示的记录数
    #当前页号$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 - 4;
    $end = $page + 5;
    #再下面还是一些数据合法性的判断
    if($page<5){
        $begin = 1;
        $end = 10;//这里是你要提供的可用链接数,本例就是当前页加前后两页共5页,if条件为可用链接数的一半
    }
    if($page>$totalPage-5){
        $begin = $totalPage - 9;
        $end = $totalPage;
    }
    if($begin<1){
        $begin = 1;
    }
    if($end>$totalPage){
        $end = $totalPage;
    }
    #下面开始输出分页链接
    /*==================显示第一种分页链接 开始===============*/
    echo "<table border=1 bgcolor=\"gray\"><tr>";
    echo "<td>$totalRows</td><td>$page/$totalPage</td>";
    if($page>1){
     echo "<td><a href=\"?page=1\"> |< </a></td><td><a href=\"?page=".($page-1)."\"> << </a></td>";
    }
    for($i=$begin; $i<=$end; $i++){
      if($i==$page){
       echo("<td bgcolor='red'> ");
      }else{
       echo("<td> ");
      }
        echo("<a href=\"?page={$i}\">$i</a>");
        echo(" </td>");
    }
    if($page < $end){
     echo "<td><a href=\"?page=".($page+1)."\"> >> </a></td><td><a href=\"?page=".$totalPage."\"> >| </a></td>";
    }
    echo "<td><input type=\"text\" size=\"3\" ōnkeydown=\"javascrīpt:if(event.keyCode==13){window.location='?page='+this.value;}\"></td>";
    echo "</tr></table>";
    
    /*==================显示第一种分页链接 结束===============*/
    
    /*==================显示第二种分页链接 开始===============*/
    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");
    $selecet_page="<select name=\"page\" ōnChange=\"window.location='?page='+this.value;\">\n";
  for($i=1;$i<=$totalPage;$i++){
   if($i==$page){
    $selecet_page.="<option value=\"$i\" selected>$i</option>\n";
   }else {
    $selecet_page.="<option value=\"$i\">$i</option>\n";
   }
  }
  $selecet_page.="</select>\n";
  echo $selecet_page;
    /*==================显示第二种分页链接 结束===============*/
    #链接显示完了下面就是显示数据了,当然了显示效果大家可以尽情发挥,这里只是提供一个通用的模式
    #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);
?> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值