功能三——读取试题列表与分页显示

  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>

 

 

 

 

 

posted @ 2017-08-10 20:38  皮皮留声机  阅读(321)  评论(0编辑  收藏  举报