php實現分頁的原理及步驟

2020-07-16 10:05:48

一、封裝設定資訊

1、我們可以做一個組態檔config.php。將需要使用到的設定全部設定為常數,程式碼如下:

<?php
//資料庫伺服器
define('DB_HOST', 'localhost');
//資料庫使用者名稱
define('DB_USER', 'root');
//資料庫密碼
define('DB_PWD', 'secret');
//庫名
define('DB_NAME', 'book');
//字元集
define('DB_CHARSET', 'utf8');

2、2.我們將connection.php頁面抽取出來,以後需要連線資料庫的時候只需要包含connection.php檔案即可。

程式碼如下:

<?php
include 'config.php';$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
if (mysqli_errno($conn))
 {  mysqli_error($conn);
    exit;
  }
mysqli_set_charset($conn, DB_CHARSET);
?>

我們在以後每個檔案使用中直接包含 connection.php檔案就可以實現資料庫連線了:

include 'connection.php';

二、顯示分頁實現

頁要實現分頁中包含以下幾個基本元素:

分頁.jpg

我們在控制頁碼的時候,都是通過URL位址列傳入頁碼值來實現的頁碼控制。在page.php後面接上頁碼的相關資訊,我們就能夠算出更多的有效資訊。url控制分頁的效果如下:

分頁.png

在程式碼實現中,是通過limit後的偏移量(offset)和數量(num),這兩個值真正實現的分頁。

limit offset , num

分頁01.jpg

假設每頁顯示5條。最終得到的分頁中控制limit公式如下:

offset的值為 (n-1)*5
num 為規定的5

三、實現步驟;

1、計算出分頁所需引數

1-1、總數

通過查詢user表的count(id),得到總數$count。
$count_sql = 'select count(id) as c from user';
$result = mysqli_query($conn, $count_sql);
$data = mysqli_fetch_assoc($result);
//得到總的使用者數
$count = $data['c'];

1-2、當前頁

剛進入page.php頁時,url為http://www.php.com/page.php,後面是不存在 ?page=1 頁面標識號的。

因此我們需要手動建立一個頁面標識號傳給當前頁碼變數$page。

我們害怕使用者傳的頁面中存在小數等,所以我們做一次強制的型別轉換:(int) $_GET['page']。

第一種寫法:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

第二種寫法:

if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}

1-3、最後一頁

每一頁一定是一個整數。就跟小學的時候數學一樣。平均有5.6個人應該準備幾個蘋果。答案一定是6個。

如果頁面出來了20.3個頁面,一定是使用進一法取整函數ceil。讓分頁數變為21。

我們用總數除以每頁顯示的資料條數,就得到了總頁數了。

//每頁顯示數
$num = 5;
$total = ceil($count / $num);

1-4、上下頁異常情況控制

如果使用者的在第一頁點選了上一頁,在最後一頁點選了下一頁怎麼辦呢?

這樣的話資料會超出範圍,而造成我們分頁時無資料顯示。

顯然這種異常情況需要考慮到。因此,如果在分頁時在第一頁減一時,我們就讓他為第一頁。
在最後一頁加一時,我們就讓他為最後一頁,即完成了異常控制。

if ($page <= 1) {
    $page = 1;
}
if ($page >= $total) {
    $page = $total;
}

2、SQL語句

我們之前說過分頁的核心是通過SQL語句中的offset和num來控制每頁顯示數。

$num = 5;
$offset = ($page - 1) * $num;

我們將$num和$offset應用於SQL語句中:

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

控制好URI中的分頁值

echo '<tr>
    <td colspan="5">
    <a href="page.php?page=1">首頁</a>
    <a href="page.php?page=' . ($page - 1) . '">上一頁</a>
    <a href="page.php?page=' . ($page + 1) . '">下一頁</a>
    <a href="page.php?page=' . $total . '">尾頁</a>
    當前是第 ' . $page . '頁  共' . $total . '頁
    </td>
    </tr>';

四、整體程式碼實現

include 'connection.php';
$count_sql = 'select count(id) as c from user';
$result = mysqli_query($conn, $count_sql);
$data = mysqli_fetch_assoc($result);
//得到總的使用者數
$count = $data['c'];
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
/*
if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}
 */
 
//每頁顯示數
$num = 5;
//得到總頁數
$total = ceil($count / $num);
if ($page <= 1) {
    $page = 1;
}
if ($page >= $total) {
    $page = $total;
}
$offset = ($page - 1) * $num;
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
$result = mysqli_query($conn, $sql);
if ($result && mysqli_num_rows($result)) {
    //存在資料則迴圈將資料顯示出來
    echo '<table width="800" border="1">';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<tr>';
        echo '<td>' . $row['username'] . '</td>';
        echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
        echo '<td>' . long2ip($row['createip']) . '</td>';
        echo '<td><a href="edit.php?id=' . $row['id'] . '">編輯使用者</a></td>';
        echo '<td><a href="delete.php?id=' . $row['id'] . '">刪除使用者</a></td>';
        echo '</tr>';
    }
    echo '<tr><td colspan="5"><a href="page.php?page=1">首頁</a>  <a href="page.php?page=' . ($page - 1) . '">上一頁</a>   <a href="page.php?page=' . ($page + 1) . '">下一頁</a>  <a href="page.php?page=' . $total . '">尾頁</a>  當前是第 ' . $page . '頁  共' . $total . '頁 </td></tr>';
    echo '</table>';
} else {
    echo '沒有資料';
}
mysqli_close($conn);

以上內容便實現了簡單的分頁功能,相了解更多相關內容請存取PHP中文網:PHP視訊教學

以上就是php實現分頁的原理及步驟的詳細內容,更多請關注TW511.COM其它相關文章!