实现原理第三大步
第一步:传入页码
第二步:根据页码取出数据
第三步:显示数据+分页条
第一步传入页码:$page = $_GET['p']; 这一步传入的页码,在浏览器中?p = 几页
第二步:根据页码取出数据,也就是PHP与mysql的一些操作
连接数据库:$link = mysqli_connect(主机名,用户名,密码,数据库) 这里加一个是否连接成功的判断if(!$link).....
查询数据库:编写sql获取分页数据,select * fron page limit 起始位置,显示条数
$sql = mysqli_query($link,“Select * from page limit" . ($page-1)*$pageSize .",$pageSize")
把SQL语句传送到数据库,进行读取数据
while($row = mysqli_fetch_assoc($sql)){ //得到的是关联数组,一一对应的关系
echo "<tr>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['id']}</td>";
echo "<tr>";
}
简单阐述一下:mysql --------php
比如PHP要写一封信给mysql 首先得保证线路通畅,也就是连接正常 $link.... 连接正常以后,PHP开始写内容$sql...
道路通畅,内容写好,那下一步就是将内容($sql)发送给mysql
mysqli_fetch_assoc($sql) ,用$row这个变量来接受结果集, 如果接收到了,说明while循环的条件为真,while(true),开始执行循环里面的语句
连接成功数据库以后,释放结果,关闭连接(可有可无,不会影响程序正常运行)
但是在关闭连接的之前要先计算总页数
$totle_sql = mysqli_query($link,"select count (*) from page");
$totle_result = mysql_fetch_array($totle_sql) //得到的即可以是关联数组,也可以是索引数组,因为这里要查的总页数就一条记录,所以用索引数组
$totle = $totle_result[0]; //得到有多少条数据
$totle_page = ceil($totle/10);向上取整,一页十个数据,这样就这道有多少页了
第三步,显示数据+分页条
先来看一个最简单的分页条 只有上一页,下一页
完成上一页,下一页的跳转,用a链接完成 ,内置函数 $_SERVER 的作用:跳转到当前正在执行的文件的脚本名,
输出这两行代码echo "<pre>"; print_r($_SERVER);你就会找到PHP_SELF这个参数, [PHP_SELF] => /666/page2.php 到这里缺传入页码,所以再拼接上就ok ,另外上一页和下一页也要拼接,最后输出即可
$page_banner = "<a href='".$_SEVER['PHP_SELF']."?p=".($page-1). "'>上一页</a>"
$page_banner .= "<a href='".$_SEVER['PHP_SELF']."?p=".($page+1)."'>上一页</a>"
写完简单的分页,再加个首页和尾页,具体思路如下:
当前页大于一,那么显示首页和下一页,首页就是p=1 下一页就是($page+1)
当前页小于总页数,那么显示尾页和上一页,尾页就是p=总页数 上一页就是($page-1)
$page_banner = "";
if($page>1){
$page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
$page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";
}
if($page<$total_pages){
$page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";
$page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾页</a>";
}
分页完成后,显示页码,也就是1,2,3,4,5... ...34567... ...7891011 这三种情况 再加上偏移量
显示页码之前,先把逻辑该清楚,
//初始化数据 $start = 1; $end = $total_pages; if($total_pages>$showPage) { if($page>$offsetpage&+1){ $page_banner.="..."; } if($page>$offsetpage) { $start = $page-$offsetpage; $end = $total_pages>$page+$offsetpage?$page+$offsetpage:$total_pages; } else{ $start = 1; //两个的起始页都是1,$page =1 当前页为1 $page=2 当前页为2 $end = $total_pages>$showPage?$showPage:$total_pages; //显示少的 } if($page+$offsetpage>$total_pages){ $start = $start-($page+$offsetpage-$end); //自己再捋一捋 } }//以上是逻辑部分,下面是实现部分 for($i=$start ;$i<$end; $i++) { $page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=".$i ."'>{$i}</a>"; //
}
if($total_pages>$showPage&&$total_pages>$page+$offsetpage){ $page_banner.="..."; }
下面是界面美化
<style> body{ font-size:12px ; font-family:Verdana; width: 100%; } .page{ text-align: center; } .page a { border: black 1px solid; text-decoration: none; padding: 2px 5px 2px 5px; margin: 2px; } .curr{ border=blue; background-color: blue; padding: 5px; margin: 2px; color: white; /*font-weight: bold;*/ } .disable{ border: #eee 1px solid ; padding : 2px 5px 2px 5px ; margin: 2px; color: #ddddd8; } .page form{ display: inline; } .content{ height:300px; } </style>
具体所有代码如下
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <style> body{ font-size:12px ; font-family:Verdana; width: 100%; } .page{ text-align: center; } .page a { border: black 1px solid; text-decoration: none; padding: 2px 5px 2px 5px; margin: 2px; } .curr{ border=blue; background-color: blue; padding: 5px; margin: 2px; color: white; /*font-weight: bold;*/ } .disable{ border: #eee 1px solid ; padding : 2px 5px 2px 5px ; margin: 2px; color: #ddddd8; } .page form{ display: inline; } .content{ height:300px; } </style> <body> </body> </html> <?php //echo "<pre>"; //print_r($_SERVER); //1传入页码 $page = $_GET['p']; //2根据页码取出数据,php-》mysql $host="127.0.0.1"; $username="root"; $password=""; $db="test"; $pageSize = 10; $showPage = 5; //显示页码 //链接数据库 $link = mysqli_connect($host,$username,$password,$db); if(!$link) { echo "数据库连接失败"; exit; } //选择所要操作的数据库 //mysqli_select_db($db); //设置数据库编码格式 //mysqli_query("SET NANES UTF8"); //编写sql获取分页数据SELECT *FROM 表明LIMIT起始位置,显示条数 $sql = mysqli_query($link,"SELECT * FROM page LIMIT " .($page -1)*$pageSize .",$pageSize"); //把sql语句传送到数据库 //处理我们的数据 echo "<div class='content'>"; echo "<table border=1 cellpadding=0 width=40% align='center'>"; echo "<tr><td>ID</td><td>NAME</td></tr>"; while($row = mysqli_fetch_assoc($sql)) { echo "<tr>"; echo "<td>{$row['name']}</td>"; echo "<td>{$row['id']}</td>"; echo "<tr>"; } echo "</table>"; echo "</div>"; //释放结果,关闭链接 //mysqli_free_result($sql); //在关闭数据库之前,要获取数据库总数,并且计算总页数 $total_sql = mysqli_query($link,"SELECT COUNT(*)FROM page"); $total_result = mysqli_fetch_array($total_sql); $total=$total_result[0]; $total_pages = ceil($total/10); //向上取整 mysqli_close($link); 计算页数 //3:显示数据+分页条 $page_banner = "<div class='page'>"; //计算偏移量 $pageoffset = ($showPage-1)/2; if($page>1) { $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>"; $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'><上一页</a>"; } else{ $page_banner.="<span class = 'disable'>首页</span>"; $page_banner.="<span class = 'disable'><上一页</span>"; } 初始化数据 $start = 1 ; $end = $total_pages; if($total_pages>$showPage) { if($page>$pageoffset) { $page_banner.="..."; } if($page>$pageoffset+1){ $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='curr'>{$i}</span>"; } else { $page_banner .= "<a href='" . $_SERVER['PHP_SELF'] . "?p=" . $i . "'>{$i}</a>"; } } //省略尾页 if($total_pages>$showPage&&$total_pages>$page+$pageoffset) { $page_banner.="..."; } if($page<$total_pages) { $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>>下一页</a>"; $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾页</a>"; } else{ $page_banner.="<span class = 'disable'>尾页</span>"; $page_banner.="<span class = 'disable'>>下一页</span>"; } $page_banner .="共{$total_pages}页"; $page_banner.="<form action='page.php' method='get'>"; $page_banner.="到第<input type='text' size='2' name = 'p'>"; $page_banner.="<input type='submit' name='确定'>"; $page_banner.="</form></div>"; echo $page_banner; ?>