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:
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:
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:
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页 | 1 | 0,5 |
第2页 | 2 | 5,5 |
第3页 | 3 | 10,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);