如何實現分頁功能LOGIN

如何實現分頁功能

上一章我們完成了後台的內容展示html頁面的修改,這裡就需要把資料庫的資料透過SQL語句查詢出來並在表格中顯示。 這裡使用分頁功能來顯示,畢竟第一頁顯示的數目是有限的。

所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這裡需要兩個初始的參數:

每頁顯示數量:$limitNews

取得目前的分頁數:$page

由於電腦語言預設從0開始取得記錄

如果設定每頁顯示數量為3,$limitNews = 3,

那麼第一頁$page = 1 就會顯示0, 1, 2  三筆記錄

第二頁 $ page = 2 就會顯示3, 4, 5  三筆記錄

第三頁 $page = 3 就會顯示6, 7, 8 三筆記錄

#以此類推。 。 。 。 。 。 。 。 。

設定一個參數$limitFrom 從第幾個資料開始讀取

從上面的規律就可以得到:

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

就會分別從第0 ,3,6條開始取得數據。

透過查詢語句取得資料庫表中的新聞總數$countNews

<?php
$retQuery = mysqli_query($link, $sqlCount);  //查询数量sql语句
$retCount = mysqli_fetch_array($retQuery);   //获取数量
$count = $retCount[0]?$retCount[0]:0;   //判断获取的新闻数量
$countNews = $count;
?>

這裡需要給到另一個參數$countPage 總共顯示多少頁

現在就出現另一個問題,如果有10條新聞紀錄,每頁顯示3條紀錄,那剩餘的一條怎麼辦?

我們就要用%取餘來判斷:

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

其他參數上一頁$prev,下一頁$next;

在分頁功能中常會有點選「上一頁」和點選「下一頁」進行跳轉

先說一下PHP程式碼功能實現想法:

上一頁$prev,就是當前頁$page -1 一步一步往前頁跳轉,噹噹前頁$page為第一頁的時候再往前跳轉就為第0頁了,這顯然會出現bug,

這裡我們就需要給它一個設定,當當前頁$page為第一頁的時候點擊「上一頁」就設定它顯示為第一頁,不在往前跳轉了。

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

下一頁$next, 就是目前頁$page -1 一步一步往後頁跳轉,問題在於當$page為最後一頁的時候點選「下一頁」再往後跳轉,

跟上一頁類似,我們設定它就顯示最後一頁。

<?php
  $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>

朋友可以在資料庫 list 表格中加入幾個測試資料來測試分頁功能。

用while語句循環出資料庫中的資料並展示在list.php檔案中:

<?php while($rows=mysqli_fetch_array($result)):?>
<tr>
  <td style="text-align:left; padding-left:20px;">
  <input type="checkbox" name="id[]" value="<?php echo $rows["id"]?>" />
  <?php echo $rows["id"]?></td>
  <td><input type="text" name="sort[1]" value="1" style="width:50px; text-align:center; border:1px solid #ddd; padding:7px 0;" /></td>
  <td width="10%">
      <video width="200" height="150" controls="controls" >
          <source src="<?php echo $rows["video"]?>" type="video/mp4">
      </video>
  </td>
  <td><?php echo $rows["title"]?></td>
  <td><font color="#00CC99">首页</font></td>
  <td><?php echo $rows["cate_name"]?></td>
  <td><?php echo date("Y-m-d H:i:s",$rows["time"])?></td>
  <td>
      <div class="button-group">
          <a class="button border-main" href="#"><span class="icon-edit"></span>修 改</a>
          <a class="button border-red" href="#" onclick="return del(1,1,1)">
              <span class="icon-trash-o"></span>删 除
          </a>
      </div>
  </td>
</tr>
<?php endwhile;?>

注意:這裡使用了date函數對時間戳進行了轉換,顯示為正常的添加時間。

<?php echo date("Y-m-d H:i:s",$rows["time"])?>

下一節
<!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>
章節課件