国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php數(shù)據(jù)庫操作之把用戶做個(gè)分頁

在真實(shí)的項(xiàng)目中,我們是將主機(jī)、用戶名、密碼、庫都寫在配置文件當(dāng)中。

如果在代碼中寫死了,萬一數(shù)據(jù)庫服務(wù)器的相關(guān)信息發(fā)生變化了,要把所有代碼修改一次顯然不符合程序員的思維。

此外,在每一個(gè)需要連接數(shù)據(jù)庫的頁面中。我們都需要寫上連接、判斷錯(cuò)誤、設(shè)置字符集、太過于麻煩。并且不利于重復(fù)使用這些代碼。

我們可以用上之前講過的include系列函數(shù)達(dá)成目標(biāo)。示例圖如下:

2015-10-13_561c9c5350f16.png

因此,我們可以做一個(gè)配置文件config.php。將需要使用到的配置全部設(shè)置為常量,代碼如下:

<?php
//數(shù)據(jù)庫服務(wù)器
define('DB_HOST', 'localhost');
//數(shù)據(jù)庫用戶名
define('DB_USER', 'root');
//數(shù)據(jù)庫密碼
define('DB_PWD', 'secret');
//庫名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');
?>

我們將connection.php頁面抽取出來,以后需要連接數(shù)據(jù)庫的時(shí)候只需要包含connection.php文件即可。代碼如下:

<?phpinclude '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);
?>

我們在以后每個(gè)文件使用中直接包含 connection.php文件就可以實(shí)現(xiàn)數(shù)據(jù)庫連接了:

include 'connection.php';

把上面的準(zhǔn)備工作完成,接下來完成分頁。分頁效果如下:

2015-10-13_561c9c536b206.png

頁要實(shí)現(xiàn)分頁中包含以下幾個(gè)基本元素:


元素說明備注
首頁最開始進(jìn)入到頁面的第一頁用get傳參才進(jìn)去時(shí)默認(rèn)為1
上一頁當(dāng)前頁減1如果頁碼為第一頁時(shí)減1,為應(yīng)該為第一頁
下一頁當(dāng)前頁加1如果為最后一
尾頁最后一頁總條數(shù)除以每頁顯示數(shù)得到總頁數(shù)
當(dāng)前頁當(dāng)前所在的頁碼就是當(dāng)前的頁碼
總頁數(shù)一共有多少個(gè)頁面總條數(shù)除以每頁顯示數(shù)

我們在控制頁碼的時(shí)候,都是通過URL地址欄傳入頁碼值來實(shí)現(xiàn)的頁碼控制。在page.php后面接上頁碼的相關(guān)信息,我們就能夠算出更多的有效信息。url控制分頁的效果如下:

QQ截圖20161114161938.png

在代碼實(shí)現(xiàn)中,是通過limit后的偏移量(offset)和數(shù)量(num),這兩個(gè)值真正實(shí)現(xiàn)的分頁。

limit offset , num

頁碼url中g(shù)et值limit偏移量,數(shù)量
第1頁10,5
第2頁25,5
第3頁310,5
第n頁n(n-1)*5,5


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

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

我們通過代碼來實(shí)現(xiàn)業(yè)務(wù):

一、計(jì)算出分頁所需的參數(shù)

總數(shù)

通過查詢user表的count(id),得到總數(shù)$count。
$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到總的用戶數(shù)
$count = $data['c'];

當(dāng)前頁

剛進(jìn)入page.php頁時(shí),url為http://www.php.com/page.php,后面是不存在 ?page=1 頁面標(biāo)識號的。

因此我們需要手動(dòng)創(chuàng)建一個(gè)頁面標(biāo)識號傳給當(dāng)前頁碼變量$page。

我們害怕用戶傳的頁面中存在小數(shù)等,所以我們做一次強(qiáng)制的類型轉(zhuǎn)換:(int) $_GET['page']。

第一種寫法:

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

第二種寫法

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

最后一頁

每一頁一定是一個(gè)整數(shù)。就跟小學(xué)的時(shí)候數(shù)學(xué)一樣。平均有5.6個(gè)人應(yīng)該準(zhǔn)備幾個(gè)蘋果。答案一定是6個(gè)。

如果頁面出來了20.3個(gè)頁面,一定是使用進(jìn)一法取整函數(shù)ceil。讓分頁數(shù)變?yōu)?1。

我們用總數(shù)除以每頁顯示的數(shù)據(jù)條數(shù),就得到了總頁數(shù)了。

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

上一頁、下一頁異常情況控制

如果用戶的在第一頁點(diǎn)擊了上一頁,在最后一頁點(diǎn)擊了下一頁怎么辦呢?

這樣的話數(shù)據(jù)會(huì)超出范圍,而造成我們分頁時(shí)無數(shù)據(jù)顯示。

顯然這種異常情況需要考慮到。因此,如果在分頁時(shí)在第一頁減一時(shí),我們就讓他為第一頁。
在最后一頁加一時(shí),我們就讓他為最后一頁,即完成了異??刂啤?/p>

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

二、SQL語句

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

我們在上面還列了具體的公式,我們將公司轉(zhuǎn)化為代碼如下:

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

我們將$num和$offset應(yīng)用于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>
    當(dāng)前是第 ' . $page . '頁  共' . $total . '頁
    </td>
    </tr>';

我們最后將整體業(yè)務(wù)串聯(lián)起來實(shí)現(xiàn)最終效果,代碼如下:

include 'connection.php';


$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到總的用戶數(shù)
$count = $data['c'];

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

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

//每頁顯示數(shù)

$num = 5;

//得到總頁數(shù)
$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)) {

    //存在數(shù)據(jù)則循環(huán)將數(shù)據(jù)顯示出來

    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>  當(dāng)前是第 ' . $page . '頁  共' . $total . '頁 </td></tr>';

    echo '</table>';

} else {
    echo '沒有數(shù)據(jù)';
}

mysqli_close($conn);


Weiter lernen
||
<?php $num = 5; $offset = ($page - 1) * $num; //我們將$num和$offset應(yīng)用于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> 當(dāng)前是第 ' . $page . '頁 共' . $total . '頁 </td> </tr>'; //我們最后將整體業(yè)務(wù)串聯(lián)起來實(shí)現(xiàn)最終效果,代碼如下: include 'connection.php'; $count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到總的用戶數(shù) $count = $data['c']; $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; /* if (isset($_GET['page'])) { $page = (int) $_GET['page']; } else { $page = 1; } */ //每頁顯示數(shù) $num = 5; //得到總頁數(shù) $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)) { //存在數(shù)據(jù)則循環(huán)將數(shù)據(jù)顯示出來 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> 當(dāng)前是第 ' . $page . '頁 共' . $total . '頁 </td></tr>'; echo '</table>'; } else { echo '沒有數(shù)據(jù)'; } mysqli_close($conn); ?>
einreichenCode zurücksetzen