新闻开发之分页功能

分页是几乎每个网站都会使用的功能,因为如果内容很多,不用分页的话,页面显示会很长很长,使用和查找起来会非常麻烦,所以我们来讲下这个很实用的功能。

分页的总体思路:

分页就是将数据库中所有的信息以固定的数量分成若干段,所以这里需要两个数据:

每页显示的信息条数$limitPage

获取当前的分页数$Page 


由于计算机语言默认从0开始获取记录

如果设置每页显示数量为5,$limitPage = 5,

那么第一页 $page = 1 就会显示 0, 1, 2  , 3 , 4三条记录

第二页 $page = 2 就会显示 5 , 6 , 7 , 8 , 9 , 10  三条记录

第三页 $page = 3 就会显示11, 12, 13 , 14 , 15 三条记录

以此类推。。。。。。。。。

设置一个参数 $limitFrom 从第几条数据开始读取

从上面的规律就可以得到:

$limitFrom = ($page - 1) * $limitPage;

就会分别从第0 ,5, 11条开始获取数据。


接下来就是连接数据库,并统计总的新闻条数:

<?php
$link = mysqli_connect('localhost','uesrname','password','news');
$sql = "select * from new";  //  select * from表示获取全部字段的值
$sqlCount = "select count(*) from new";    //count(*)是计算数据总的条数
$retQuery = mysqli_query($link, $sqlCount);  //查询数量sql语句
$retCount = mysqli_fetch_array($retQuery);   //获取数量
$count = $retCount[0]?$retCount[0]:0;   //判断获取的新闻数量
$countNews = $count;
?>

接着,我们给出一个变量$countPage用来表示总共显示了多少页

可能我们时长会遇到这样的情况,假如有100条信息,我们给定的是每页显示11个,剩下的1条如何处理呢,

那么我们就要使用%进行取余来判断:

<?php
$countPage = $countNews%$limitPage;   //求余数获取分页数量能否被除尽
if(($countPage) > 0) {  //获取的页数有余
  $countPage = ceil($countNews/$limitPage);    
// ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 100个新闻每个页面显示11个,成9个页面,剩余1个单独成1个页面,这样总共有10个页面
} else {
  $countPage = $countNews/$limitPage;  //如果是10个新闻每个页面显示2个,成5个页面
}
?>

其他参数上一页$prev,下一页$next;

在分页功能中经常会有点击“上一页”和点击“下一页”进行跳转

先说一下PHP代码功能实现思路:

上一页$prev,就是当前页$page -1 一步一步往前页跳转,当当前页$page为第一页的时候再往前跳转就为第0页了,这显然会出现bug,

这里我们就需要给它一个设定,当当前页$page为第一页的时候点击“上一页”就设定它显示为第一页,不在往前跳转了。

$prev = ($page - 1 <= 0 )?1:$page-1;

下一页$next, 就是当前页$page -1 一步一步往后页跳转,问题在于当$page为最后一页的时候点击“下一页”再往后跳转,

跟上一页类似,我们设定它就显示最后一页。

$next = ($page + 1 > $countPage)?$countPage:$page+1;

//当前页数要大于总页数的时候就显示当前页。

<!DOCTYPE html>
<html>
<head>  
<meta charset=utf8">  
<title>分表页</title>
</head>
<body>
   <div>
         <a href="?page=<?php echo $prev;?>">|上一页</a>         
         <?php for($i=1; $i<=$countPage; $i++):?>         
         <a href="?page=<?php echo $i;?>"><?php echo $i;?></a>         
         <?php endfor;?>         
         <a href="?page=<?php echo $next;?>">|下一页</a>
   </div>
</body>
</html>


继续学习
||
<?php $link = mysqli_connect('localhost','usermane','password','test'); mysqli_set_charset($link, "utf8"); if (!$link) { die("连接失败:".mysqli_connect_error()); } $page = isset($_GET['page'])?$_GET['page']:1;//获取当前分页数 $limitNews = 5; //每页显示新闻数量 $countNews = ""; //总共有多少条新闻 $countPage = ""; //一共有多少页数 $limitFrom = ($page - 1) * $limitPage;//从第几条数据开始读记录 //每页显示5个 //page = l limit 0 //page = 2 limit 5 //page = 3 limit 11 $sql = "select * from new"; $sqlCount = "select count(*) from new"; $retQuery = mysqli_query($link, $sqlCount); //查询数量sql语句 $retCount = mysqli_fetch_array($retQuery); //获取数量 $count = $retCount[0]?$retCount[0]:0; //判断获取的新闻数量 $countNews = $count; $countPage = $countNews%$limitPage; //求余数获取分页数量能否被除尽 if(($countPage) > 0) { //获取的页数有余 $countPage = ceil($countNews/$limitPage); // ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 100个新闻每个页面显示11个,成9个页面,剩余1个成1个页面 } else { $countPage = $countNews/$limitPage; } $prev = ($page - 1 <= 0 )?1:$page-1; //上一页 $next = ($page + 1 > $countPage)?$countPage:$page+1; //下一页 $result = mysqli_query($link, $sql); ?> <!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分页</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一页</a> <?php for($i=1; $i<=$countPage; $i++):?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endfor;?> <a href="?page=<?php echo $next;?>">|下一页</a> </div> </body> </html>
提交重置代码