PHP+MySQL分页原理实现

学习日期: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>

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值