PHP 原生操作 Mysql 分頁資料案例

卡爾特斯發表於2020-11-13
  • PHP 原生操作 Mysql 增刪改查案例

  • 基於上面文章的檔案,調整了 index.php 程式碼,支援分頁查詢顯示。

    • 效果

    • index.php
    <?php
    // 匯入公共檔案
    require_once("./db.php");
    // 一頁多少條資料
    $pagesize = 2;
    // 頁碼,預設 1
    $page = isset($_GET['page']) ? $_GET['page'] : 1;
    // 開始行號
    $startRow = max(($page - 1), 0) * $pagesize;
    // 執行查詢語句
    $sql = "select * from user";
    $result = mysqli_query($link, $sql);
    // 總條數
    $count = mysqli_num_rows($result);
    // 總頁數
    $pages = ceil($count / $pagesize);
    // 構建查詢分頁 sql 語句,注意我這裡用的 `.=` 也就是用上面的 sql 語句拼接下面的 sql 語句
    $sql .= " order by id asc limit {$startRow},{$pagesize}";
    // 再次執行查詢語句
    $result = mysqli_query($link, $sql);
    // 獲取所有行資料
    $arrs = mysqli_fetch_all($result, MYSQLI_ASSOC);
    // print_r($arrs);
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script>
        // 新增使用者
        function addUser() {
          location.href = "./add.php";
        }
        // 刪除使用者
        function deleteUser(id) {
          // 詢問是否刪除
          if (window.confirm("確定要刪除嗎?")) {
            // 跳轉到 delete.php 頁面進行刪除,只要不是表單傳送的都是 GET 請求
            location.href = "./delete.php?id="+id;
          }
        }
        // 修改使用者
        function modifyUser(id) {
          // 跟新增一樣,跳轉新頁面即可
        }
      </script>
    </head>
    <body style="display: flex; align-items: center; flex-direction: column;">
      <!-- 提示 -->
      <h2>總共有 <?php echo $count ?> 個人</h2>
      <a href="#" onclick="addUser()" style="margin-bottom: 20px;">新增使用者</a>
      <!-- 列表 -->
      <table width="300" border="1" rules="all" cellpadding="5">
        <!-- 頭部 -->
        <tr bgcolor="#ccc">
          <th>id</th>
          <th>名稱</th>
          <th>年齡</th>
          <th>操作</th>
        </tr>
        <!-- 展示資料 -->
        <?php foreach ($arrs as $arr) { ?>
          <tr style="text-align: center;">
            <td><?php echo $arr["id"] ?></td>
            <td><?php echo $arr["name"] ?></td>
            <td><?php echo $arr["age"] ?></td>
            <!-- 操作 -->
            <td>
              <a href="#" onclick="modifyUser(<?php echo $arr['id'] ?>)">修改</a>
              <!-- 刪除使用者操作 -->
              <a href="#" onclick="deleteUser(<?php echo $arr['id'] ?>)">刪除</a>
            </td>
          </tr>
        <?php } ?>
      </table>
      <!-- 分頁器 -->
      <div style="margin-top: 20px;">
    
        <!-- 寫法一:列出所有頁碼 -->
        <!-- <?php for ($i=1; $i <= $pages; $i++) { ?>
          <a href="?page=<?php echo $i ?>"><?php echo $i ?></a>
        <?php } ?> -->
    
        <!-- 寫法二:列出所有頁碼,當前頁不可點 -->
        <!-- <?php
          for ($i=1; $i <= $pages; $i++) { 
            // echo "<a href='index.php?page=$i'>$i</a>";
            // 推薦簡寫成這樣,這樣可以使用各種檔案目錄場景:
            // echo "<a href='?page=$i' style='padding: 5px;'>$i</a>";
            // 判斷當前頁不能點選
            if ($page == $i) {
              echo "<span style='padding: 5px;'>$i</span>";
            }else {
              echo "<a href='?page=$i' style='padding: 5px;'>$i</a>";
            }
          }
        ?> -->
    
        <!-- 寫法三:列出所有頁碼,當前頁不可點,且不一次性展示所有分頁,只展示前後2頁頁碼 -->
        <?php
          $start = max($page - 2, 1);
          $end = min($page + 2, $pages);
          for ($i=$start; $i <= $end; $i++) { 
            if ($page == $i) {
              echo "<span style='padding: 5px;'>$i</span>";
            }else {
              echo "<a href='?page=$i' style='padding: 5px;'>$i</a>";
            }
          }
        ?>
      </div>
    </body>
    </html>
    

相關文章