Operasi pangkalan data PHP: penomboran pengguna

Dalam projek sebenar, kami menulis hos, nama pengguna, kata laluan dan pustaka dalam fail konfigurasi.

Jika ia ditulis dengan keras dalam kod, jika maklumat berkaitan pelayan pangkalan data berubah, ia jelas tidak selaras dengan pemikiran pengaturcara untuk mengubah suai semua kod.

Selain itu, dalam setiap halaman yang perlu disambungkan ke pangkalan data. Kita semua perlu menulis sambungan, menilai kesilapan, dan menetapkan set aksara, yang terlalu menyusahkan. Dan ia tidak kondusif untuk menggunakan semula kod ini.

Kami boleh menggunakan siri sertakan fungsi yang dinyatakan sebelum ini untuk mencapai matlamat kami. Contoh gambar adalah seperti berikut:

2015-10-13_561c9c5350f16.png

Oleh itu, kita boleh membuat fail konfigurasi config.php. Tetapkan semua konfigurasi yang perlu digunakan sebagai pemalar Kodnya adalah seperti berikut:

<?php
//数据库服务器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库密码
define('DB_PWD', 'secret');
//库名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');
?>

Kami mengekstrak halaman connection.php apabila kami perlu menyambung ke pangkalan data pada masa hadapan, kami hanya perlu memasukkan fail connection.php. Kodnya adalah seperti berikut:

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

Kami boleh melaksanakan sambungan pangkalan data dengan memasukkan terus fail connection.php dalam setiap fail pada masa hadapan:

serta 'connection.php';

Lengkapkan persediaan di atas, dan kemudian lengkapkan paging. Kesan penomboran adalah seperti berikut:

2015-10-13_561c9c536b206.png

Halaman harus mengandungi elemen asas berikut:


元素说明备注
首页最开始进入到页面的第一页用get传参才进去时默认为1
上一页当前页减1如果页码为第一页时减1,为应该为第一页
下一页当前页加1如果为最后一
尾页最后一页总条数除以每页显示数得到总页数
当前页当前所在的页码就是当前的页码
总页数一共有多少个页面总条数除以每页显示数

Apabila kami mengawal nombor halaman, kami melaksanakan kawalan nombor halaman dengan menghantar nilai nombor halaman dalam bar alamat URL. Dengan menambahkan maklumat berkaitan nombor halaman pada page.php, kami boleh mengira maklumat yang lebih berkesan. Kesan url mengawal paging adalah seperti berikut:

QQ截图20161114161938.png

Dalam pelaksanaan kod, kedua-dua nilai ini sebenarnya direalisasikan melalui offset (offset) dan kuantiti ( num) selepas had paging.

mengimbangi had , bilangan

页码url中get值limit偏移量,数量
第1页10,5
第2页25,5
第3页310,5
第n页n(n-1)*5,5


Anggapkan bahawa 5 item dipaparkan setiap halaman. Formula terakhir untuk mengawal had dalam paging adalah seperti berikut:

offset的值为 (n-1)*5
num 为规定的5

Kami melaksanakan perniagaan melalui kod:

1. Kira parameter yang diperlukan untuk paging

Jumlah nombor

通过查询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'];

Halaman semasa

Apabila anda mula-mula memasuki halaman page.php, urlnya ialah http://www.php.com/page .php, diikuti dengan tiada Terdapat ?page=1 nombor pengenalan halaman.

Jadi kita perlu mencipta nombor pengenalan halaman secara manual dan menyerahkannya kepada pembolehubah nombor halaman semasa $page.

Kami khuatir terdapat perpuluhan dalam halaman yang dilalui oleh pengguna, jadi kami melakukan penukaran jenis paksa: (int) $_GET['page'].

Cara penulisan pertama:

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

Cara penulisan kedua

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

Halaman terakhir

Setiap halaman mestilah integer. Sama seperti matematik di sekolah rendah. Secara purata, 5.6 orang harus menyediakan berapa banyak epal. Jawapannya mestilah 6.

Jika halaman keluar dengan 20.3 halaman, siling fungsi pembundaran mesti digunakan. Biarkan bilangan penomboran menjadi 21.

Kami membahagikan jumlah bilangan dengan bilangan item data yang dipaparkan pada setiap halaman untuk mendapatkan jumlah bilangan halaman.

//每页显示数
$num = 5;
$total = ceil($count / $num);

Kawalan pengecualian halaman sebelumnya dan halaman seterusnya

Bagaimana jika pengguna mengklik halaman sebelumnya pada halaman pertama dan mengklik halaman seterusnya pada halaman terakhir?

Dalam kes ini, data akan melebihi julat, menyebabkan tiada data dipaparkan apabila kami membuat penomboran.

Jelas sekali situasi luar biasa ini perlu diambil kira. Oleh itu, jika halaman pertama ditolak dengan satu semasa halaman, kami menjadikannya halaman pertama.
Apabila menambahkan satu pada halaman terakhir, kami menjadikannya halaman terakhir, yang melengkapkan kawalan pengecualian.

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

2 pernyataan SQL

Kami berkata sebelum ini bahawa teras paging adalah untuk mengawal paparan setiap halaman melalui offset dan num dalam nombor pernyataan SQL.

Kami juga menyenaraikan formula khusus di atas Kami menukar syarikat kepada kod seperti berikut:

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

Kami menggunakan $num dan $offset pada pernyataan SQL:

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

Control. nilai paging dalam 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>';

Kami akhirnya menyambung seluruh perniagaan bersama-sama untuk mencapai kesan akhir Kodnya adalah seperti berikut:

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);


.
Meneruskan pembelajaran
||
<?php $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); ?>
  • Cadangan kursus
  • Muat turun perisian kursus