PHP 分頁技術

1. PHP 數據顯示分頁技術

數據分頁概述 對大量數據進行分頁顯示是 Web 開發中最多見的狀況,但大多剛開始接觸 Web 開發的開發人員,對分頁技術每每比較迷惘,本節教程以一個分頁顯示留言板的數據爲例就來演示一下 PHP 中基本的數據分頁顯示原理。 本節教程須要用到的 PHP基礎知識 : PHP 預約義 $_GET 變量來接收 URL 參數信息,具體參見《PHP $_GET》。 if 流程控制,具體參見《PHP if ... else 流程控制》。 MySQL 數據庫表基礎知識,具體參見《MySQL 基本概念》。 MySQL 數據查詢,具體參見《MySQL Select From 查詢數據》 MySQL 數據查詢,具體參見《MySQL LIMIT 限定查詢記錄數》。 數據準備 假設儲存留言的數據表(guestbook)數據以下: id nickname email content createtime 1 admin admin@5idev.com 留言測試 1264167501 2 user user@163.com 你們好 1264168127 3 小明 xiaoming@163.com 作得好,繼續努力。。 1264168865 4 小張 xiaozhang@163.com 來看看 1264169118 5 小麗 xiaoli@tom.com haha 1283276566 6 Tom tom@gmail.com Hello 1283336218 7 Jack jack@hotmail.com okok 1283336315 8 admin admin@5idev.com 嗯嗯 1283336315 9 阿里巴巴 alibaba@5idev.com 來看看 1283337158 10 路人甲 haha@163.com 哈哈哈 1283338228 建表 SQL 參考以下: CREATE TABLE guestbook ( id mediumint(8) unsigned NOT NULL auto_increment, nickname char(15) NOT NULL default '', email varchar(100) NOT NULL default '', content text NOT NULL, createtime int(10) unsigned NOT NULL default '0', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 分頁原理 目的很簡單,就是將較多數據記錄,分頁顯示出來,每一頁顯示設定的數據條數。 分頁顯示格式以下: 共 10 條留言 [1] 2 3 該格式比較簡單,只顯示了總的數據和各個分頁數。當前頁面顯示爲 [1] 這樣的格式,非當前頁面的頁數則顯示爲超連接格式。 PHP 分頁技術核心在於肯定當前的頁數,而後利用 MySQL 的 LIMIT 關鍵字來指定輸出對應的記錄數。 如當前是第 1 頁時,那麼就是 LIMIT 0,4(假設一頁輸出 4 條記錄),第 2 頁時,就是 LIMIT 4,4,第 3 頁時,就是 LIMIT 8,4 … 依此類推,第 n 頁時,就是 LIMIT (n-1)*4,4 。 而當前頁數 $p 這個參數,經過 URL 來獲取。如 http://127.0.0.1/guestbook/index.php?p=2 這個這個 URL 連接,表示當前爲第 2 頁,PHP 中經過 $_GET['p'] 來取得對應的頁數值 2 。而對於首頁,則沒有 $p 這個參數,那麼就設定爲默認值 1 便可。php

  1. 分頁代碼實現

<!-- lang: php -->
數據庫連接及參數設定
<!-- lang: php -->
//數據庫鏈接
<!-- lang: php -->

<!-- lang: php -->
    @mysql_connect("localhost","root","root123") or die("鏈接數據庫失敗:".mysql_error());
<!-- lang: php -->
    mysql_select_db("test");
<!-- lang: php -->
    mysql_query("set character set 'gbk'");
<!-- lang: php -->

<!-- lang: php -->
//每頁顯示的留言數
<!-- lang: php -->
$pagesize = 4;
<!-- lang: php -->
輸出當前頁數據
<!-- lang: php -->
//肯定當前頁數 $p 參數
<!-- lang: php -->
$p = $_GET['p']?$_GET['p']:1;
<!-- lang: php -->

<!-- lang: php -->
//數據指針
<!-- lang: php -->
$offset = ($p-1)*$pagesize;
<!-- lang: php -->

<!-- lang: php -->
//查詢本頁顯示的數據
<!-- lang: php -->
$query_sql = "SELECT * FROM guestbook ORDER BY id DESC LIMIT  $offset , $pagesize";
<!-- lang: php -->
$result = mysql_query($query_sql);
<!-- lang: php -->
//循環輸出
<!-- lang: php -->
while($gblist = mysql_fetch_array($result)){
<!-- lang: php -->
    echo '<a href="',$gblist['nickname'],'">',$gblist['nickname'],'</a> ';
<!-- lang: php -->
    echo '發表於:',date("Y-m-d H:i", $gblist[createtime]),'<br />';
<!-- lang: php -->
    echo '內容:',$gblist['content'],'<br /><hr />';
<!-- lang: php -->
}

肯定當前頁參數 $p 中,使用了一個三元運算符: $p = $_GET['p']?$_GET['p']:1; 能夠這麼通俗的理解該運算符:$_GET['p'] 存在嗎?若是存在,那麼 $p = $_GET['p'] ,若是不存在,那麼 $p = 1 。 接下來就是讀取當前頁面顯示數據的具體代碼,該部分可參考《MySQL Select From 查詢數據》。 輸出分頁格式mysql

<!-- lang: php -->
//分頁代碼
<!-- lang: php -->
//計算留言總數
<!-- lang: php -->
$count_result = mysql_query("SELECT count(*) as count FROM guestbook");
<!-- lang: php -->
$count_array = mysql_fetch_array($count_result);
<!-- lang: php -->

<!-- lang: php -->
//計算總的頁數
<!-- lang: php -->
$pagenum=ceil($count_array['count']/$pagesize);
<!-- lang: php -->
echo '共 ',$count_array['count'],' 條留言';
<!-- lang: php -->

<!-- lang: php -->
//循環輸出各頁數目及鏈接
<!-- lang: php -->
if ($pagenum > 1) {
<!-- lang: php -->
    for($i=1;$i<=$pagenum;$i++) {
<!-- lang: php -->
        if($i==$p) {
<!-- lang: php -->
            echo ' [',$i,']';
<!-- lang: php -->
        } else {
<!-- lang: php -->
            echo ' <a href="index.php?p=',$i,'">',$i,'</a>';
<!-- lang: php -->
        }
<!-- lang: php -->
    }
<!-- lang: php -->
}

若是肯定頁數大於 1 ,則開始輸出分頁頁碼。若是是當前頁碼,這輸出 [2] 這樣的格式,若是不是當前頁碼,則輸出超連接格式。 完整代碼 完整代碼以下:sql

<!-- lang: php -->
<?php
<!-- lang: php -->
//數據庫鏈接
<!-- lang: php -->
@mysql_connect("localhost","root","root123") or die("鏈接數據庫失敗:".mysql_error());
<!-- lang: php -->
mysql_select_db("test");
<!-- lang: php -->
mysql_query("set character set 'gbk'");
<!-- lang: php -->

<!-- lang: php -->
//每頁顯示的留言數
<!-- lang: php -->
$pagesize = 4;
<!-- lang: php -->

<!-- lang: php -->
//肯定頁數 p 參數
<!-- lang: php -->
$p = $_GET['p']?$_GET['p']:1;
<!-- lang: php -->

<!-- lang: php -->
//數據指針
<!-- lang: php -->
$offset = ($p-1)*$pagesize;
<!-- lang: php -->

<!-- lang: php -->
//查詢本頁顯示的數據
<!-- lang: php -->
$query_sql = "SELECT * FROM guestbook ORDER BY id DESC LIMIT  $offset , $pagesize";
<!-- lang: php -->
//echo $query_sql;
<!-- lang: php -->
$result = mysql_query($query_sql);
<!-- lang: php -->
//循環輸出
<!-- lang: php -->
while($gblist = mysql_fetch_array($result)){
<!-- lang: php -->
    echo '<a href="',$gblist['nickname'],'">',$gblist['nickname'],'</a>�';
<!-- lang: php -->
    echo '發表於:',date("Y-m-d H:i", $gblist[createtime]),'<br />';
<!-- lang: php -->
    echo '內容:',$gblist['content'],'<br /><hr />';
<!-- lang: php -->
}
<!-- lang: php -->

<!-- lang: php -->
//分頁代碼
<!-- lang: php -->
//計算留言總數
<!-- lang: php -->
$count_result = mysql_query("SELECT count(*) as count FROM guestbook");
<!-- lang: php -->
$count_array = mysql_fetch_array($count_result);
<!-- lang: php -->

<!-- lang: php -->
//計算總的頁數
<!-- lang: php -->
$pagenum=ceil($count_array['count']/$pagesize);
<!-- lang: php -->
echo '共 ',$count_array['count'],' 條留言';
<!-- lang: php -->

<!-- lang: php -->
//循環輸出各頁數目及鏈接
<!-- lang: php -->
if ($pagenum > 1) {
<!-- lang: php -->
    for($i=1;$i<=$pagenum;$i++) {
<!-- lang: php -->
        if($i==$p) {
<!-- lang: php -->
            echo ' [',$i,']';
<!-- lang: php -->
        } else {
<!-- lang: php -->
            echo ' <a href="index.php?p=',$i,'">',$i,'</a>';
<!-- lang: php -->
        }
<!-- lang: php -->
    }
<!-- lang: php -->
}
<!-- lang: php -->
?>

運行顯示效果: Tom 發表於:2010-09-01 18:16 內容:Hello數據庫


小麗 發表於:2010-09-01 01:42 內容:hahahaide


小張 發表於:2010-01-22 22:05 內容:來看看測試


小明 發表於:2010-01-22 22:01 內容:作得好,繼續努力fetch


共 10 條留言 1 [2] 3指針

相關文章
相關標籤/搜索