PHP+MySQL分页原理实现
2015-07-01 10:12
639 查看
学习日期:20150630
整个功能的实现主要分为三个步骤:
1.传入页码;
2.根据页码取出数据,php->mysql操作;
3.显示数据、分页条。
关键点 在于:
实现定量取指的SQL语句,用到了LIMIT关键字:
SELECT * FROM表名LIMIT 起始位置,显示条数;
这句话在书写的时候要注意:LIMIT后面有空格,否则关键字会发生改变;数据库中自增长的编码是从0开始的;起始位置随着页数的变动而变动;起始位置如果用到了计算,要用()括起来。
难点在于:
偏移量的计算以及分页条的多种情况的具体划分。详细见代码及注释:
心得:
实现核心功能—>代码优化—>用户体验优化
整个功能的实现主要分为三个步骤:
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>
心得:
实现核心功能—>代码优化—>用户体验优化
相关文章推荐
- 织梦去掉后台验证码的方法
- PHP5 扩展SOAP 调用 webservice
- php的socket通信
- 小胖学PHP总结1-----PHP的数据类型
- 织梦图集上传照片失败,提示302
- PHP概率算法(适用于抽奖、随机广告)
- PHP+mysql+Highcharts实现饼状统计图
- PHP-Socket服务端客户端发送接收通信实例详解
- 基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用
- 织梦上传图片失败,提示302错误
- php实现socket
- 织梦登录后台,提示验证码不正确
- 织梦搜索时间间隔的修改方法
- 深入浅出讲解:php的socket通信
- 织梦里面的data、module不支持写入
- [php] 面包屑导航
- javaBridge php调用java
- php全面获取url地址栏及各种参数
- php字符串比较函数
- NTP时间服务器