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:
Oleh itu, kita boleh membuat fail konfigurasi config.php. Tetapkan semua konfigurasi yang perlu digunakan sebagai pemalar Kodnya adalah seperti berikut:
<?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'); ?>
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:
元素 | 說明 | 備注 |
---|---|---|
首頁 | 最開始進(jìn)入到頁面的第一頁 | 用get傳參才進(jìn)去時默認(rèn)為1 |
上一頁 | 當(dāng)前頁減1 | 如果頁碼為第一頁時減1,為應(yīng)該為第一頁 |
下一頁 | 當(dāng)前頁加1 | 如果為最后一 |
尾頁 | 最后一頁 | 總條數(shù)除以每頁顯示數(shù)得到總頁數(shù) |
當(dāng)前頁 | 當(dāng)前所在的頁碼 | 就是當(dāng)前的頁碼 |
總頁數(shù) | 一共有多少個頁面 | 總條數(shù)除以每頁顯示數(shù) |
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中g(shù)et值 | limit偏移量,數(shù)量 |
---|---|---|
第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 為規(guī)定的5
Kami melaksanakan perniagaan melalui kod:
1. Kira parameter yang diperlukan untuk paging
Jumlah nombor
通過查詢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'];
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.
//每頁顯示數(shù) $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> 當(dāng)前是第 ' . $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); //得到總的用戶數(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);