首頁 > 後端開發 > php教程 > php實作分頁的原理與步驟

php實作分頁的原理與步驟

王林
發布: 2023-04-07 11:24:01
原創
8232 人瀏覽過

php實作分頁的原理與步驟

一、封裝設定資訊

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

<?php
//数据库服务器
define(&#39;DB_HOST&#39;, &#39;localhost&#39;);
//数据库用户名
define(&#39;DB_USER&#39;, &#39;root&#39;);
//数据库密码
define(&#39;DB_PWD&#39;, &#39;secret&#39;);
//库名
define(&#39;DB_NAME&#39;, &#39;book&#39;);
//字符集
define(&#39;DB_CHARSET&#39;, &#39;utf8&#39;);
登入後複製

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

程式碼如下:

<?php
include &#39;config.php&#39;;$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 &#39;connection.php&#39;;
登入後複製

二、顯示分頁實作

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

php實作分頁的原理與步驟

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

php實作分頁的原理與步驟

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

limit offset , num
登入後複製

php實作分頁的原理與步驟

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

offset的值为 (n-1)*5
num 为规定的5
登入後複製

三、實作步驟;

##1、計算出分頁所需參數

1-1、總數


通过查询user表的count(id),得到总数$count。
$count_sql = &#39;select count(id) as c from user&#39;;
$result = mysqli_query($conn, $count_sql);
$data = mysqli_fetch_assoc($result);
//得到总的用户数
$count = $data[&#39;c&#39;];
登入後複製

1-2、目前頁


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

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

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

第一種寫法:

$page = isset($_GET[&#39;page&#39;]) ? (int) $_GET[&#39;page&#39;] : 1;
登入後複製

第二種寫法:


if (isset($_GET[&#39;page&#39;])) {
    $page = (int) $_GET[&#39;page&#39;];
} 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 &#39;<tr>
    <td colspan="5">
    <a href="page.php?page=1">首页</a>
    <a href="page.php?page=&#39; . ($page - 1) . &#39;">上一页</a>
    <a href="page.php?page=&#39; . ($page + 1) . &#39;">下一页</a>
    <a href="page.php?page=&#39; . $total . &#39;">尾页</a>
    当前是第 &#39; . $page . &#39;页  共&#39; . $total . &#39;页
    </td>
    </tr>&#39;;
登入後複製

四、整體程式碼實作

include &#39;connection.php&#39;;
$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[&#39;page&#39;]) ? (int) $_GET[&#39;page&#39;] : 1;
/*
if (isset($_GET[&#39;page&#39;])) {
    $page = (int) $_GET[&#39;page&#39;];
} 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 '';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '';
        echo '';
        echo '';
        echo '';
        echo '';
        echo '';
        echo '';
    }
    echo '';
    echo '
' . $row['username'] . '' . date('Y-m-d H:i:s', $row['createtime']) . '' . long2ip($row['createip']) . '编辑用户删除用户
首页 上一页 下一页 尾页 当前是第 ' . $page . '页 共' . $total . '页
'; } else { echo '没有数据'; } mysqli_close($conn);
登入後複製

以上內容可實現了簡單的分頁功能,相了解更多相關內容請造訪PHP中文網:PHP影片教學

以上是php實作分頁的原理與步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板