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

不问归期 提交于 2020-03-07 15:32:41

  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>

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!