Buat penomboran

Dalam projek sebenar, kami menulis hos, nama pengguna, kata laluan dan pustaka dalam fail konfigurasi.
Jika ia ditulis keras dalam kod, jika maklumat berkaitan pelayan pangkalan data berubah, ia jelas tidak selari 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:

QQ截图20161010101506.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', 123456789);
//库名
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:

<?php
include '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:

QQ截图20161010101814.png

Halaman hendaklah mengandungi elemen asas berikut:

QQ截图20161010101852.png

QQ截图20161010101858.png

Apabila kami mengawal nombor halaman, kami melaksanakan kawalan nombor halaman dengan menghantar nilai nombor halaman melalui 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截图20161010101933.png

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

mengimbangi had , bilangan

QQ截图20161010101943.png

Andaikan 5 item dipaparkan pada setiap halaman. Formula had kawalan akhir untuk paging adalah seperti berikut:

Nilai ofset ialah (n-1)*5
num ialah 5 yang ditentukan

Kami melaksanakan perniagaan melalui kod:

1. Kira parameter yang diperlukan untuk halaman

Jumlah nombor

Dapatkan jumlah nombor $count dengan menanyakan count(id) jadual pengguna.

$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.phpxy.com/page.php, diikuti dengan halaman ?yang tidak wujud =1 nombor pengenalan muka surat bagi.

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.

//Bilangan paparan setiap halaman

$num = 5;
$total = ceil($count / $num);

Kawalan tidak normal halaman sebelumnya dan halaman seterusnya

Jika pengguna mengklik pada halaman sebelumnya pada halaman pertama, pada halaman terakhir halaman Apakah yang perlu saya lakukan jika saya mengklik pada halaman seterusnya?

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 bilangan paparan pada setiap halaman melalui offset dan num dalam 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:

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

Prinsip paging.

1 fahami penggunaan had dalam pernyataan SQL

PILIH * DARI jadual... hadkan kedudukan permulaan, nombor. operasi (di mana permulaan Kedudukan bermula dari 0)

Contoh:

Dapatkan 20 rekod pertama: PILIH * DARI jadual... had 0, 20
Dapatkan 20 rekod bermula dari yang ke-11: PILIH * DARI jadual …… had 10 , 20

LIMIT n bersamaan dengan LIMIT 0,n.

Sebagai contoh, pilih * daripada jadual LIMIT 5; //Kembali 5 baris pertama, sama seperti pilih * daripada jadual LIMIT 0, 5

2 prinsip

Apa yang dipanggil paparan paging bermakna keputusan yang ditetapkan dalam pangkalan data dipaparkan segmen demi segmen

Cara membahagikannya, segmen mana ia berada pada masa ini ( berapa banyak item setiap halaman, berapa banyak item pada masa ini di dalamnya) Halaman)

10 rekod pertama: pilih * daripada had jadual 0,10
Rekod ke-11 hingga ke-20: pilih * daripada had jadual 10 ,10
Rekod ke-21 hingga ke-30:pilih * daripada had jadual 20,10

Formula halaman:

(nombor halaman semasa - 1) >

3. Fungsi $_SERVER["REQUEST_URI"]

ialah sejenis pembolehubah pelayan pratakrif Semua yang bermula dengan $_SERVER dipanggil pembolehubah pelayan yang telah ditetapkan.

Fungsi REQUEST_URI adalah untuk mendapatkan URI semasa, iaitu laluan alamat lengkap kecuali nama domain.

Contoh:

Halaman semasa ialah: http://www.test.com/home.php?id=23&cid=22

gema $_SERVER["REQUEST_URI"]

Hasilnya ialah : / home.php?id=23&cid=22

4. parse_url() fungsi parsing URL

parse_url() adalah untuk menghuraikan URL ke dalam Fungsi untuk tatasusunan nilai kunci tetap

Contoh

Select * from table limit ($Page- 1) * $PageSize, $PageSize

Hasil:

Array
(
[skim] => ; http ;Protokol
                                                                                                                                                                   [path] => /path >

5. Contoh kod




Paging mesej ini terbahagi kepada 3 bahagian, satu reka bentuk pangkalan data, satu ialah halaman sambungan, dan satu lagi ialah halaman paparan.


(1) Pangkalan data reka bentuk

Pangkalan data reka bentuk dipanggil bbs. Terdapat jadual data yang dipanggil mesej, yang mengandungi medan seperti tajuk, tarikh akhir, pengguna dan kandungan, masing-masing. Tajuk mesej, tarikh mesej, orang mesej, kandungan mesej (2) Halaman sambungan

$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
 print_r($ua);

(3) Paparan halaman

<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误"); mysql_select_db("bbs", $conn); mysql_query("set names 'GBK'"); //使用GBK中文编码;
//将空格,换行转换为HTML可解析
function htmtocode($content) {  $content = str_replace("\n", "<br>", str_replace(" ", "&nbsp;", $content)); //两个str_replace嵌套
 return $content; }
//$content=str_replace("'","‘",$content);  //htmlspecialchars(); 
?>
rrree

Meneruskan pembelajaran
||
<?php 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