PHP+MySQL分页原理实现

来源:互联网 发布:淘宝女式薄绒内衣套装 编辑:程序博客网 时间:2024/05/21 11:05

学习日期:20150630
整个功能的实现主要分为三个步骤:
1.传入页码;
2.根据页码取出数据,php->mysql操作;
3.显示数据、分页条。
关键点 在于:
实现定量取指的SQL语句,用到了LIMIT关键字:
SELECT * FROM表名LIMIT 起始位置,显示条数;

$sql = "SELECT*FROM orders LIMIT ".(($page-1)*2).",2";

这句话在书写的时候要注意:LIMIT后面有空格,否则关键字会发生改变;数据库中自增长的编码是从0开始的;起始位置随着页数的变动而变动;起始位置如果用到了计算,要用()括起来。
难点在于:
偏移量的计算以及分页条的多种情况的具体划分。详细见代码及注释:

<html><head>    <meta http-equiv="Content-type" content="text/html;charset=utf8" ></head><style>    body{        font-size:12px;FONT-FAMILY:verdana;width:100%;    }    div.page{        padding:5px;text-align:center;    }    div.content{        height:300px;    }    div.page a{        border:#aaaadd 1px solid;text-decoration:none;padding:2px 5px 2px 5px;margin:2px;    }    div.page span.current{        border:#000099 1px solid;background-color:#000099;padding:3px 6px 3px 6px;margin:2px;color:#fff;font-weight:bold;    }    div.page span.disable{        border:#eee 1px solid;padding:2px 5px 2px 5px;margin:2px;color:#ddd;    }    div.page form{        display:inline;    }</style><body><?php    /**1传入页码*/    $page = $_GET['p'];//p表示接收的页码数    /**2根据页码取出数据:php-> mysql处理*/    //php操作数据库的配置:1配置主机2配置用户名3密码4数据库DB    $host = "localhost";    $username = "root";    $password = "";    $db = "icharging";    $pageSize = 2;    $showPage = 5;//显示的页码数    //连接数据库    $conn = mysql_connect($host,$username,$password);    if(!$conn){        echo"数据库连接失败";        exit;    }    //选择要操作的数据库    mysql_select_db($db);    //设置数据库编码格式    mysql_query('SET NAMES UTF8');    //编写sql语句获取分页数据SELECT * FROM表名LIMIT起始位置,显示条数    $sql = "SELECT*FROM orders LIMIT ".(($page-1)*2).",2";//该语句的书写要特别注意    //$sql = "SELECT*FROM orders LIMIT 0,10";    //把SQL语句传送到数据库    $result = mysql_query($sql);    //处理接收到的数据    echo "<div class='content'>";    echo "<table border=1 cellspacing=0 width=60% align=center>";//添加表格并设置表格样式    echo "<tr><td>订单编号</td><td>用户手机号</td><td>充电时间</td><td>充电电量</td><td>充电金额</td></tr>";//添加标题,内容写在TD中    while($row = mysql_fetch_assoc($result)){        //echo $row['oid'].'-'.$row['unum'].'-'.$row['stime'].'-'.$row['chargeLevel'].'-'.$row['amount'].'<br>';        echo "<tr>";//行        echo "<td>{$row["oid"]}</td>";//第一列        echo "<td>{$row["unum"]}</td>";//第二列        echo "<td>{$row["stime"]}</td>";//第三列        echo "<td>{$row["chargeLevel"]}</td>";//第四列        echo "<td>{$row["amount"]}</td>";//第五列        echo "</tr>";    }    echo "</table>";    echo "</div>";    //释放结果,关闭链接    mysql_free_result($result);    //获取数据总数    $total_sql = "SELECT COUNT(*)FROM orders";    $total_result = mysql_fetch_array(mysql_query($total_sql));    $total = $total_result[0];    //计算页码数    $total_pages = ceil($total/2);    mysql_close($conn);    /**3显示数据+分页条*/    $page_banner="<div class='page'>";    //计算偏移量    $pageoffset = ($showPage-1)/2;    if($page > 1){        $page_banner.="<a href='".$SEVER['PHP_SELF']."?p=1'>首页</a>";        $page_banner.="<a href='".$SEVER['PHP_SELF']."?p=".($page-1)."'>< 上一页</a>";//用.拼接的时候补课使用{}要用()    }else{        $page_banner.="<span class='disable'>首页</a></span>";        $page_banner.="<span class='disable'>< 上一页</a></span>";    }    //初始化数据    $start = 1;    $end = $total_pages;    //头部省略    if($total_pages > $showPage){        if($page > $pageoffset + 1){            $page_banner.="...";        }        if($page > $pageoffset){            $start = $page - $pageoffset;            $end = $total_pages > $page + $pageoffset?$page + $pageoffset:$total_pages;        }else{            $start = 1;            $end = $total_pages > $showPage?$showPage:$total_pages;        }        if($page + $pageoffset > $total_pages){            $start = $start - ($page + $pageoffset - $end);        }    }    //对应页码    for($i = $start;$i <= $end;$i++){        if($page == $i){            $page_banner.="<span class='current'>{$i}</span>";        }else{            $page_banner.="<a href='".$SEVER['PHP_SELF']."?p=".$i."'>{$i}</a>";        }    }    //尾部省略    if($total_pages > $page+$pageoffset && $total_pages > $showPage){//注意此处满足的条件,必须两者同时成立        $page_banner.="...";    }    if($page < $total_pages){        $page_banner.="<a href='".$SEVER['PHP_SELF']."?p=".($page+1)."'>下一页 ></a>";//p注意是小写字母        $page_banner.="<a href='".$SEVER['PHP_SELF']."?p=".($total_pages)."'>尾页</a>";    }else{        $page_banner.="<span class='disable'>下一页 ></a></span>";        $page_banner.="<span class='disable'>尾页</a></span>";    }    //页面跳转    $page_banner.="<form action = 'mypage.php'>";    $page_banner.=" 到第<input type='text' size='2' name='p'>页";    $page_banner.="<input type='submit' value='确定'>";    $page_banner.="</form>";    $page_banner.="共{$total_pages}页</div>";    echo $page_banner;?></body></html>

实现图样
心得:
实现核心功能—>代码优化—>用户体验优化

0 0