PHP分页机制的作用主要是用于处理,当网页要显示多条(大于20条)SQL语句查询的结果时,在一页显示不仅会影响查看,而且对数据库的读取也比较耗费计算机资源。因此,当显示SQL语句的查询结果时,往往会使用分页的机制来缓解内存用于数据库的读取的资源占用、以及给用户更加清晰的浏览体验。
- 在使用select查询时,使用limit子句可用于强制selet语句返回指定的记录数。
语法格式:select * from tableName limit num1,num2;
num1:从第几个开始查找;
num2:要查找的数目
Select * from table limit 0,10
上面是一句简单的sql查询语句,它的作用是从一个名叫table的表里提取前10条数据
- 使用到的变量:
$currentPage; //记录当前所在页
$pageNum; //总页数
$pageSize; //每页显示的条数
- ceil() 函数向上舍入为最接近的整数
ceil(5.2)=>6;ceil(-2.4)=>-2
一、定义参数,并通过GET/POST方式传入默认值
$currentPage=isset($_GET['currentPage'])?intval($_GET['currentPage']):1;
//检查是否传入当前页的值。假如不存在currentPage,默认当前页数为1
$pageSize=isset($_GET['pageSize'])?intval($_GET['pageSize']):5;
//检查是否传入每页显示的条数值。假如不存在pageSize,默认每页显示条数为5条
//假如传入的页数参数apge 大于总页数 pagenum,则显示错误信息
If($currentPage>$pageNum || $currentPage== 0){
Echo "Error : Can Not Found The page .";
Exit();
}
二、建立函数,对想应分页操作进行封装
1、建立一个函数getList():传入当前页码和每页显示的条数,并将这两条数据作为从数据库查询当前页显示数据的条件。然后将查询到的用于当前页显示的数据储存到对象数组$datalist[]中(每条数据封装成对象对应着数组的一个值)。$datalist[0]→第一个数据对象、$datalist[1]→第二个数据对象......
function getList($currentPage, $pageSize)
{
$datalist = array();
$conn = mysqli_connect("localhost", "root","admin");
$result = "select * from tableName limit ".(($currentPage- 1) * $pageSize)."," . $pageSize;
// limit为约束显示多少条信息,后面有两个参数,第一个为从第几个开始,第二个为长度
$result = mysqli_query($conn, $result);
while ($obj = mysqli_fetch_object($result)) {
$datalist[] = $obj;
}
mysqli_close($coon,"jereh");
return$datalist;
}
2、建立第二个函数getPageNum():传入每页要显示的条数,返回总页数
function getPageNnum($pageSize){
$conn = mysqli_connect("localhost", "root","admin");
$total=mysql_num_rows(mysql_query($conn,"select * from table")); //查询数据的总条数total
$pageNum=ceil($total/$pageSize); //获得总页数 pageNum
return $pageNum;
}
$pageNum = getPageNum($pageSize); //假设总共22条数据,默认$pageSize=5。那么$pageNum=5
$datalist=array();
$datalist=getList($currentPage, $pageSize);
3、在页面进行显示
<table border="1" style="text-align: center" cellpadding="0">
<tr>
<td>编号</td>
<td>标题</td>
<td>来源</td>
<td>说明</td>
<td>发布日期</td>
</tr>
<?php
foreach($datalist as $key=>$values){
echo "<tr>";
echo "<td>{$datalist ->id}</td>";
echo "<td>{$datalist ->title}</td>";
echo "<td>{$datalist ->src}</td>";
echo "<td>{$datalist ->remark}</td>";
echo "<td>{$datalist ->date}</td>";
echo "</tr>";
}
?>
</table>
4、实现上一页、下一页效果
要实现页面跳转的效果,我们需要用到了a标签的href属性,地址写“?pageNum = ...”这个pageNum是我们自己定义的,由于是get来传递的,在上一步里面我们已经用$_GET接受了参数,所以我们只需要进行get的参数传递就可以了;
首页:“pageNum=1”;
上一页:"pageNum=<?php echo $pageNum==1?1:$pageNum-1?>"
下一页:"pageNum=<?php echo $pageNum==$endPage ?$endPage :$pageNum+1?>"
尾页:“pageNum=<?php echo $pageNum =$endPage?>”;
特别注意的是,”pageNum=”的时候后面千万千万不要空格,代码如下
<a href="?pageNum=1">首页</a>
<a href="?pageNum=<?php echo $pageNum==1?1:($pageNum-1)?>">上一页</a>
<a href="?pageNum=<?php echo $pageNum==$endPage?$endPage:($pageNum+1)?>">下一页</a>
<a href="?pageNum=<?php echo $endPage?>">尾页</a>
总的代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页</title> <?php //分页的函数 function getList($currentPage, $pageSize) { $datalist = array(); $conn = mysqli_connect("localhost", "root","admin"); $result = "select * from tableName limit ".(($currentPage- 1) * $pageSize)."," . $pageSize;
// limit为约束显示多少条信息,后面有两个参数,第一个为从第几个开始,第二个为长度 $result = mysqli_query($conn, $result); while ($obj = mysqli_fetch_object($result)) { $datalist[] = $obj; } mysqli_close($coon,"jereh"); return $datalist; } //显示总页数的函数 function getPageNnum($pageSize){ $conn = mysqli_connect("localhost", "root","admin"); $total=mysql_num_rows(mysql_query($conn,"select * from table")); //查询数据的总条数total $pageNum=ceil($total/$pageSize); //获得总页数 pageNum return $pageNum; } $currentPage=isset($_GET['currentPage'])?intval($_GET['currentPage']):1;
//检查是否传入当前页的值。假如不存在currentPage,默认当前页数为1 $pageSize=isset($_GET['pageSize'])?intval($_GET['pageSize']):5;
//检查是否传入每页显示的条数值。假如不存在pageSize,默认每页显示条数为5条 //假如传入的页数参数apge 大于总页数 pagenum,则显示错误信息 If($currentPage>$pageNum || $currentPage== 0){ Echo "Error : Can Not Found The page ."; Exit(); } $pageNum = getPageNum($pageSize); //假设总共22条数据,默认$pageSize=5。那么$pageNum=5 $datalist=array(); $datalist=getList($currentPage, $pageSize); ?> </head> <body> <table border="1" style="text-align: center" cellpadding="0"> <tr> <td>编号</td> <td>新闻标题</td> <td>来源</td> <td>点击率</td> <td>发布日期</td> </tr> <?php foreach($datalist as $key=>$values){ echo "<tr>"; echo "<td>{$values->id}</td>"; echo "<td>{$values->title}</td>"; echo "<td>{$values->src}</td>"; echo "<td>{$values->indexs}</td>"; echo "<td>{$values->times}</td>"; echo "</tr>"; } ?> </table> <div> <a href="?currentPage=1">首页</a> <a href="?currentPage=<?php echo $currentPage==1?1:($currentPage-1)?>">上一页</a> <a href="?currentPage=<?php echo $currentPage==$pageNum?$pageNum:($currentPage+1)?>">下一页</a> <a href="?currentPage=<?php echo $pageNum?>">尾页</a> </div> </body> </html>