導航:首頁 > 編程語言 > php多種分頁

php多種分頁

發布時間:2024-07-22 03:39:33

A. php中的分頁顯示

1、前言

分頁顯示是一種非常常見的瀏覽和顯示大量數據的方法,屬於web編程中最常處理的事件之一。對於web編程的老手來說,編寫這種代碼實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原理和實現方法有所了解。本文適合初學者閱讀,所有示例代碼均使用php編寫。

2、原理

所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這里需要兩個初始的參數:

每頁多少條記錄($PageSize)?
當前是第幾頁($CurrentPageID)?

現在只要再給我一個結果集,我就可以顯示某段特定的結果出來。
至於其他的參數,比如:上一頁($PreviousPageID)、下一頁($NextPageID)、總頁數($numPages)等等,都可以根據前邊這幾個東西得到。
以mysql資料庫為例,如果要從表內截取某段內容,sql語句可以用:select * from table limit offset, rows。看看下面一組sql語句,嘗試一下發現其中的規率。

前10條記錄:select * from table limit 0,10
第11至20條記錄:select * from table limit 10,10
第21至30條記錄:select * from table limit 20,10
……

這一組sql語句其實就是當$PageSize=10的時候取表內每一頁數據的sql語句,我們可以總結出這樣一個模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那麼回事。搞定了最重要的如何獲取數據的問題以後,剩下的就僅僅是傳遞參數,構造合適的sql語句然後使用php從資料庫內獲取數據並顯示了。以下我將用具體代碼加以說明。

3、簡單代碼
請詳細閱讀以下代碼,自己調試運行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

<?php
// 建立資料庫連接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 獲取當前頁數
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每頁數量
$PageSize = 10;
// 獲取總數據量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 記算總共有多少頁
if( $amount ){
if( $amount < $page_size ){ $page_count = 1; } //如果總數據量小於$PageSize,那麼只有一頁
if( $amount % $page_size ){ //取總數據量除以每頁數的余數
$page_count = (int)($amount / $page_size) + 1; //如果有餘數,則頁數等於總數據量除以每頁數的結果取整再加一
}else{
$page_count = $amount / $page_size; //如果沒有餘數,則頁數等於總數據量除以每頁數的結果
}
}
else{
$page_count = 0;
}

// 翻頁鏈接
$page_string = '';
if( $page == 1 ){
$page_string .= '第一頁|上一頁|';
}
else{
$page_string .= '<a href="/?page=1>";第一頁</a>|<a href="/?page='."($page-1).'>上一頁</a>|';
}
if( ($page == $page_count) || ($page_count == 0) ){
$page_string .= '下一頁|尾頁';
}
else{
$page_string .= '<a href="/?page='."($page+1).'>下一頁</a>|<a href="/?page='."$page_count.'>尾頁</a>';
}
// 獲取數據,以二維數組格式返回結果
if( $amount ){
$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
$result = mysql_query($sql);

while ( $row = mysql_fetch_row($result) ){
$rowset[] = $row;
}
}else{
$rowset = array();
}
// 沒有包含顯示結果的代碼,那不在討論范圍,只要用foreach就可以很簡單的用得到的二維數組來顯示結果
?>

4、OO風格代碼
以下代碼中的資料庫連接是使用的pear db類進行處理

<?php
// FileName: Pager.class.php
// 分頁類,這個類僅僅用於處理數據結構,不負責處理顯示的工作
Class Pager
{
var $PageSize; //每頁的數量
var $CurrentPageID; //當前的頁數
var $NextPageID; //下一頁
var $PreviousPageID; //上一頁
var $numPages; //總頁數
var $numItems; //總記錄數
var $isFirstPage; //是否第一頁
var $isLastPage; //是否最後一頁
var $sql; //sql查詢語句

function Pager($option)
{
global $db;
$this->_setOptions($option);
// 總條數
if ( !isset($this->numItems) )
{
$res = $db->query($this->sql);
$this->numItems = $res->numRows();
}
// 總頁數
if ( $this->numItems > 0 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
if ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
else
{
$this->numPages = $this->numItems / $this->PageSize;
}
}
else
{
$this->numPages = 0;
}

switch ( $this->CurrentPageID )
{
case $this->numPages == 1:
$this->isFirstPage = true;
$this->isLastPage = true;
break;
case 1:
$this->isFirstPage = true;
$this->isLastPage = false;
break;
case $this->numPages:
$this->isFirstPage = false;
$this->isLastPage = true;
break;
default:
$this->isFirstPage = false;
$this->isLastPage = false;
}

if ( $this->numPages > 1 )
{
if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
}

return true;
}

/***
*
* 返回結果集的資料庫連接
* 在結果集比較大的時候可以直接使用這個方法獲得資料庫連接,然後在類之外遍歷,這樣開銷較小
* 如果結果集不是很大,可以直接使用getPageData的方式獲取二維數組格式的結果
* getPageData方法也是調用本方法來獲取結果的
*
***/

function getDataLink()
{
if ( $this->numItems )
{
global $db;

$PageID = $this->CurrentPageID;

$from = ($PageID - 1)*$this->PageSize;
$count = $this->PageSize;
$link = $db->limitQuery($this->sql, $from, $count); //使用Pear DB::limitQuery方法保證資料庫兼容性

return $link;
}
else
{
return false;
}
}

/***
*
* 以二維數組的格式返回結果集
*
***/

function getPageData()
{
if ( $this->numItems )
{
if ( $res = $this->getDataLink() )
{
if ( $res->numRows() )
{
while ( $row = $res->fetchRow() )
{
$result[] = $row;
}
}
else
{
$result = array();
}

return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}

function _setOptions($option)
{
$allow_options = array(
'PageSize',
'CurrentPageID',
'sql',
'numItems'
);

foreach ( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key = $value;
}
}

return true;
}
}
?>

<?php
// FileName: test_pager.php
// 這是一段簡單的示例代碼,前邊省略了使用pear db類建立資料庫連接的代碼
require "Pager.class.php";
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from table order by id";
$pager_option = array(
"sql" => $sql,
"PageSize" => 10,
"CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option);
$data = $pager->getPageData();
if ( $pager->isFirstPage )
{
$turnover = "首頁|上一頁|";
}
else
{
$turnover = "<a href='?page=1&numItems=".$pager->numItems."'>首頁</a>|<a href="/?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>上一頁</a>|";
}
if ( $pager->isLastPage )
{
$turnover .= "下一頁|尾頁";
}
else
{
$turnover .= "<a href="/?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>下一頁</a>|<a href="/?page=".$pager->numPages."&numItems=".$pager->numItems."'>尾頁</a>";
}
?>

需要說明的地方有兩個:

這個類僅僅處理數據,並不負責處理顯示,因為我覺得將數據的處理和結果的顯示都放到一個類里邊實在是有些勉強。顯示的時候情況和要求多變,不如自己根據類給出的結果處理,更好的方法是根據這個Pager類繼承一個自己的子類來顯示不同的分頁,比如顯示用戶分頁列表可以:

<?php
Class MemberPager extends Pager
{
function showMemberList()
{
global $db;

$data = $this->getPageData();
// 顯示結果的代碼
// ......
}
}
/// 調用
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from members order by id";
$pager_option = array(
"sql" => $sql,
"PageSize" => 10,
"CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager->showMemberList();
?>

第二個需要說明的地方就是不同資料庫的兼容性,在不同的資料庫里截獲一段結果的寫法是不一樣的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在類里邊獲取結果的時候需要使用pear db類的limitQuery方法。

ok,寫完收功,希望花時間看完這些文字的你不覺得是浪費了時間。

B. PHP顯示很多資料庫信息,如何自動分頁呢代碼

PHP代碼如下:

/*

Author:默默
Date :2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):1; //這句就是獲取page=18中的page的值,假如不存在page,那麼頁數就是1。
$num=10; //每頁顯示10條數據

$db=mysql_connect("host","name","pass"); //創建資料庫連接
$select=mysql_select_db("db",$db); //選擇要操作的資料庫

/*
首先咱們要獲取資料庫中到底有多少數據,才能判斷具體要分多少頁,具體的公式就是
總數據數除以每頁顯示的條數,有餘進一。
也就是說10/3=3.3333=4 有餘數就要進一。
*/

$total=mysql_num_rows(mysql_query("select id from table")); //查詢數據的總數,id是資料庫中的一個自動賦值的欄位
$pagenum=ceil($total/$num); //獲得總頁數

//假如傳入的頁數參數大於總頁數,則顯示錯誤信息
If($page>$pagenum || $page == 0){
Echo "Error : Can Not Found The page .";
Exit;
}

$offset=($page-1)*$num; //獲取limit的第一個參數的值,假如第一頁則為(1-1)*10=0,第二頁為(2-1)*10=10。

$info=mysql_query("select name from table limit $offset,$num"); //獲取相應頁數所需要顯示的數據,name是數據里的一個欄位
While($it=mysql_fetch_array($info)){
Echo $it['name']."
";
} //顯示數據

For($i=1;$i<=$pagenum;$i++){

$show=($i!=$page)?"$i":"$i";
Echo $show." ";
}

/*顯示分頁信息,假如是當頁則顯示粗體的數字,其餘的頁數則為超連接,假如當前為第三頁則顯示如下
1 2 3 4 5 6
*/
?>

C. php分頁代碼 怎麼寫

Web開發是今後分布式程式開發的主流,通常的web開發都要涉及到與資料庫打交道,客戶端從伺服器端讀取通常都是以分頁的形式來顯示,一頁一頁的閱讀起來既方便又美觀。所以說寫分頁程序是web開發的一個重要組成部分,在這里,我們共同來研究分頁程序的編寫。

一、分頁程序的原理

分頁程序有兩個非常重要的參數:每頁顯示幾條記錄($pagesize)和當前是第幾頁($page)。有了這兩個參數就可以很方便的寫出分頁程序,我們以MySql資料庫作為數據源,在mysql里如果要想取出表內某段特定內容可以使用的 T-SQL語句:select * from table limit offset,rows來實現。這里的offset是記錄偏移量,它的計算方法是offset=$pagesize*($page-1),rows是要顯示的記錄條數,這里就是$page。也就是說select * from table limit 10,10這條語句的意思是取出表裡從第11條記錄開始的20條記錄。

二、主要代碼解析

$pagesize=10; //設置每一頁顯示的記錄數
$conn=mysql_connect("localhost","root",""); //連接資料庫
$rs=mysql_query("select count(*) from tb_proct",$conn); //取得記錄總數$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//計算總頁數

$pages=intval($numrows/$pagesize);

//判斷頁數設置

if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否則,設置為第一頁
}

三、創建用例用表myTable

create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))

四、完整代碼

<html>
<head>
<title>php分頁示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<?php
$conn=mysql_connect("localhost","root","");
//設定每一頁顯示的記錄數
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得記錄總數$rs,計算總頁數用
$rs=mysql_query("select count(*) from tb_proct",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//計算總頁數

$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//設置頁數
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//設置為第一頁
$page=1;
}
//計算記錄偏移量
$offset=$pagesize*($page - 1);
//讀取指定記錄數
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">標題</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">發布時間</td>
</tr>
<?php
do {
$i++;
?>
<tr>
<td width="50%"><?=$myrow["news_title"]?></td>
<td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."頁(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "[".$page."]";
for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
?>
</body>
</html>

五、總結

本例代碼在windows2000 server+php4.4.0+mysql5.0.16上運行正常。該示例顯示的分頁格式是[1][2][3]…這樣形式。假如想顯示成「首頁 上一頁 下一頁 尾頁」這樣形式,請加入以下代碼:

$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

if ($page > 1)
{
echo "<a href='fenye.php?page=".$first."'>首頁</a> ";
echo "<a href='fenye.php?page=".$prev."'>上一頁</a> ";
}

if ($page < $pages)
{
echo "<a href='fenye.php?page=".$next."'>下一頁</a>
echo "<a href='fenye.php?page=".$last."'>尾頁</a> ";
}

其實,寫分頁顯示代碼是很簡單的,只要掌握了它的工作原理。希望這篇文章能夠帶給那些需要這方面程序web程序員的幫助。

D. PHP鍒嗛〉鏄劇ず鍒朵綔璇﹁В

銆銆 鍓嶈█

銆銆鍒嗛〉鏄劇ず鏄涓縐嶉潪甯稿父瑙佺殑嫻忚堝拰鏄劇ず澶ч噺鏁版嵁鐨勬柟娉 灞炰簬web緙栫▼涓鏈甯稿勭悊鐨勪簨浠朵箣涓 瀵逛簬web緙栫▼鐨勮佹墜鏉ヨ 緙栧啓榪欑嶄唬鐮佸疄鍦ㄦ槸鍜屽懠鍚鎬竴鏍瘋嚜鐒 浣嗘槸瀵逛簬鍒濆﹁呮潵璇 甯稿父瀵硅繖涓闂棰樻懜涓嶈憲澶寸華 鍥犳ょ壒鍦版挵鍐欐ゆ枃瀵硅繖涓闂棰樿繘琛岃︾粏鐨勮茶В 鍔涙眰璁╃湅瀹岃繖綃囨枃絝犵殑鏈嬪弸鍦ㄧ湅瀹屼互鍚庡逛簬鍒嗛〉鏄劇ず鐨勫師鐞嗗拰瀹炵幇鏂規硶鏈夋墍浜嗚В 鏈鏂囬傚悎鍒濆﹁呴槄璇 鎵鏈夌ず渚嬩唬鐮佸潎浣跨敤php緙栧啓

銆銆 鍘熺悊

銆銆鎵璋撳垎欏墊樉紺 涔熷氨鏄灝嗘暟鎹搴撲腑鐨勭粨鏋滈泦浜轟負鐨勫垎鎴愪竴孌典竴孌電殑鏉ユ樉紺 榪欓噷闇瑕佷袱涓鍒濆嬬殑鍙傛暟

銆銆姣忛〉澶氬皯鏉¤板綍($PageSize)?

銆銆褰撳墠鏄絎鍑犻〉($CurrentPageID)?

銆銆鐜板湪鍙瑕佸啀緇欐垜涓涓緇撴灉闆 鎴戝氨鍙浠ユ樉紺烘煇孌電壒瀹氱殑緇撴灉鍑烘潵

銆銆鑷充簬鍏朵粬鐨勫弬鏁 姣斿 涓婁竴欏($PReviousPageID) 涓嬩竴欏($NextPageID) 鎬婚〉鏁($numPages)絳夌瓑 閮藉彲浠ユ牴鎹鍓嶈竟榪欏嚑涓涓滆タ寰楀埌

銆銆浠MySQL鏁版嵁搴撲負渚 濡傛灉瑕佷粠琛ㄥ唴鎴鍙栨煇孌靛唴瀹 sql璇鍙ュ彲浠ョ敤 select * from table limit offset rows 鐪嬬湅涓嬮潰涓緇剆ql璇鍙 灝濊瘯涓涓嬪彂鐜板叾涓鐨勮勭巼

銆銆鍓 鏉¤板綍 select * from table limit

銆銆絎 鑷 鏉¤板綍 select * from table limit

銆銆絎 鑷 鏉¤板綍 select * from table limit

銆銆鈥︹

銆銆榪欎竴緇剆ql璇鍙ュ叾瀹炲氨鏄褰$PageSize= 鐨勬椂鍊欏彇琛ㄥ唴姣忎竴欏墊暟鎹鐨剆ql璇鍙 鎴戜滑鍙浠ユ葷粨鍑鴻繖鏍蜂竴涓妯℃澘

銆銆select * from table limit ($CurrentPageID ) * $PageSize $PageSize

銆銆鎷胯繖涓妯℃澘浠e叆瀵瑰簲鐨勫煎拰涓婅竟閭d竴緇剆ql璇鍙ュ圭収涓涓嬬湅鐪嬫槸涓嶆槸閭d箞鍥炰簨 鎼炲畾浜嗘渶閲嶈佺殑濡備綍鑾峰彇鏁版嵁鐨勯棶棰樹互鍚 鍓╀笅鐨勫氨浠呬粎鏄浼犻掑弬鏁 鏋勯犲悎閫傜殑sql璇鍙ョ劧鍚庝嬌鐢╬hp浠庢暟鎹搴撳唴鑾峰彇鏁版嵁騫舵樉紺轟簡 浠ヤ笅鎴戝皢鐢ㄥ叿浣撲唬鐮佸姞浠ヨ存槑

銆銆 綆鍗曚唬鐮

銆銆璇瘋︾粏闃呰諱互涓嬩唬鐮 鑷宸辮皟璇曡繍琛屼竴嬈 鏈濂芥妸瀹冧慨鏀逛竴嬈 鍔犱笂鑷宸辯殑鍔熻兘 姣斿傛悳緔㈢瓑絳

銆銆 <?php

銆銆// 寤虹珛鏁版嵁搴撹繛鎺

銆銆$link = mysql_connect("localhost", "mysql_user", "mysql_passWord")

銆銆or die("Could not connect: " . mysql_error());

銆銆// 鑾峰彇褰撳墠欏墊暟

銆銆if( isset($_GET['page']) ){

銆銆$page = intval( $_GET['page'] );

銆銆}

銆銆else{

銆銆$page = 1;

銆銆}

銆銆// 姣忛〉鏁伴噺

銆銆$PageSize = 10;

銆銆// 鑾峰彇鎬繪暟鎹閲

銆銆$sql = "select count(*) as amount from table";

銆銆$result = mysql_query($sql);

銆銆$row = mysql_fetch_row($result);

銆銆$amount = $row['amount'];

銆銆// 璁扮畻鎬誨叡鏈夊氬皯欏

銆銆if( $amount ){

銆銆if( $amount < $page_size ){ $page_count = 1; } //濡傛灉鎬繪暟鎹閲忓皬浜$PageSize錛岄偅涔堝彧鏈変竴欏

銆銆if( $amount % $page_size ){ //鍙栨繪暟鎹閲忛櫎浠ユ瘡欏墊暟鐨勪綑鏁

銆銆$page_count = (int)($amount / $page_size) + 1; //濡傛灉鏈変綑鏁幫紝鍒欓〉鏁扮瓑浜庢繪暟鎹閲忛櫎浠ユ瘡欏墊暟鐨勭粨鏋滃彇鏁村啀鍔犱竴

銆銆}else{

銆銆$page_count = $amount / $page_size; //濡傛灉娌℃湁浣欐暟錛屽垯欏墊暟絳変簬鎬繪暟鎹閲忛櫎浠ユ瘡欏墊暟鐨勭粨鏋

銆銆}

銆銆}

銆銆else{

銆銆$page_count = 0;

銆銆}

銆銆// 緲婚〉閾炬帴

銆銆$page_string = ''

銆銆if( $page == 1 ){

銆銆$page_string .= '絎涓欏祙涓婁竴欏祙'

銆銆}

銆銆else{

銆銆$page_string .= '<a href=?page=1>絎涓欏</a>|<a .($page-1).'>涓婁竴欏</a>|' }

銆銆if( ($page == $page_count) || ($page_count == 0) ){

銆銆$page_string .= '涓嬩竴欏祙灝鵑〉'

銆銆}

銆銆else{

銆銆$page_string .= '<a .($page+1).'>涓嬩竴欏</a>|<a .$page_count.'>灝鵑〉</a>' }

銆銆// 鑾峰彇鏁版嵁錛屼互浜岀淮鏁扮粍鏍煎紡榪斿洖緇撴灉

銆銆if( $amount ){

銆銆$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";

銆銆$result = mysql_query($sql);

銆銆while ( $row = mysql_fetch_row($result) ){

銆銆$rowset[] = $row;

銆銆}

銆銆}else{

銆銆$rowset = array();

銆銆}

銆銆// 娌℃湁鍖呭惈鏄劇ず緇撴灉鐨勪唬鐮侊紝閭d笉鍦ㄨㄨ鴻寖鍥達紝鍙瑕佺敤foreach灝卞彲浠ュ緢綆鍗曠殑鐢ㄥ緱鍒扮殑浜岀淮鏁扮粍鏉ユ樉紺虹粨鏋

銆銆?>

銆銆4銆丱O椋庢牸浠g爜

銆銆浠ヤ笅浠g爜涓鐨勬暟鎹搴撹繛鎺ユ槸浣跨敤鐨刾ear db綾昏繘琛屽勭悊

銆銆 <?php

銆銆// FileName: Pager.class.php

銆銆// 鍒嗛〉綾伙紝榪欎釜綾諱粎浠呯敤浜庡勭悊鏁版嵁緇撴瀯錛屼笉璐熻矗澶勭悊鏄劇ず鐨勫伐浣

銆銆Class Pager

銆銆{

銆銆var $PageSize; //姣忛〉鐨勬暟閲

銆銆var $CurrentPageID; //褰撳墠鐨勯〉鏁

銆銆var $NextPageID; //涓嬩竴欏

銆銆var $PreviousPageID; //涓婁竴欏

銆銆var $numPages; //鎬婚〉鏁

銆銆var $numItems; //鎬昏板綍鏁

銆銆var $isFirstPage; //鏄鍚︾涓欏

銆銆var $isLastPage; //鏄鍚︽渶鍚庝竴欏

銆銆var $sql; //sql鏌ヨ㈣鍙

銆銆function Pager($option)

銆銆{

銆銆global $db;

銆銆$this->_setOptions($option);

銆銆// 鎬繪潯鏁

銆銆if ( !isset($this->numItems) )

銆銆{

銆銆$res = $db->query($this->sql);

銆銆$this->numItems = $res->numRows();

銆銆}

銆銆// 鎬婚〉鏁

銆銆if ( $this->numItems > 0 )

銆銆{

銆銆if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }

銆銆if ( $this->numItems % $this->PageSize )

銆銆{

銆銆$this->numPages= (int)($this->numItems / $this->PageSize) + 1;

銆銆}

銆銆else

銆銆{

銆銆$this->numPages = $this->numItems / $this->PageSize;

銆銆}

銆銆}

銆銆else

銆銆{

銆銆$this->numPages = 0;

銆銆}

銆銆switch ( $this->CurrentPageID )

銆銆{

銆銆case $this->numPages == 1:

銆銆$this->isFirstPage = true;

銆銆$this->isLastPage = true;

銆銆break;

銆銆case 1:

銆銆$this->isFirstPage = true;

銆銆$this->isLastPage = false;

銆銆break;

銆銆case $this->numPages:

銆銆$this->isFirstPage = false;

銆銆$this->isLastPage = true;

銆銆break;

銆銆default:

銆銆$this->isFirstPage = false;

銆銆$this->isLastPage = false;

銆銆}

銆銆if ( $this->numPages > 1 )

銆銆{

銆銆if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }

銆銆if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }

銆銆}

銆銆return true;

銆銆}

銆銆/***

銆銆*

銆銆* 榪斿洖緇撴灉闆嗙殑鏁版嵁搴撹繛鎺

銆銆* 鍦ㄧ粨鏋滈泦姣旇緝澶х殑鏃跺欏彲浠ョ洿鎺ヤ嬌鐢ㄨ繖涓鏂規硶鑾峰緱鏁版嵁搴撹繛鎺ワ紝鐒跺悗鍦ㄧ被涔嬪栭亶鍘嗭紝榪欐牱寮閿杈冨皬

銆銆* 濡傛灉緇撴灉闆嗕笉鏄寰堝ぇ錛屽彲浠ョ洿鎺ヤ嬌鐢╣etPageData鐨勬柟寮忚幏鍙栦簩緇存暟緇勬牸寮忕殑緇撴灉

銆銆* getPageData鏂規硶涔熸槸璋冪敤鏈鏂規硶鏉ヨ幏鍙栫粨鏋滅殑

銆銆*

銆銆***/

銆銆function getDataLink()

銆銆{

銆銆if ( $this->numItems )

銆銆{

銆銆global $db;

銆銆$PageID = $this->CurrentPageID;

銆銆$from = ($PageID - 1)*$this->PageSize;

銆銆$count = $this->PageSize;

銆銆$link = $db->limitQuery($this->sql, $from, $count); //浣跨敤Pear DB::limitQuery鏂規硶淇濊瘉鏁版嵁搴撳吋瀹規

銆銆return $link;

銆銆}

銆銆else

銆銆{

銆銆return false;

銆銆}

銆銆}

銆銆/***

銆銆*

銆銆* 浠ヤ簩緇存暟緇勭殑鏍煎紡榪斿洖緇撴灉闆

銆銆*

銆銆***/

銆銆function getPageData()

銆銆{

銆銆if ( $this->numItems )

銆銆{

銆銆if ( $res = $this->getDataLink() )

銆銆{

銆銆if ( $res->numRows() )

銆銆{

銆銆while ( $row = $res->fetchRow() )

銆銆{

銆銆$result[] = $row;

銆銆}

銆銆}

銆銆else

銆銆{

銆銆$result = array();

銆銆}

銆銆return $result;

銆銆}

銆銆else

銆銆{

銆銆return false;

銆銆}

銆銆}

銆銆else

銆銆{

銆銆return false;

銆銆}

銆銆}

銆銆function _setOptions($option)

銆銆{

銆銆$allow_options = array(

銆銆'PageSize',

銆銆'CurrentPageID',

銆銆'sql',

銆銆'numItems'

銆銆);

銆銆foreach ( $option as $key => $value )

銆銆{

銆銆if ( in_array($key, $allow_options) && ($value != null) )

銆銆{

銆銆$this->$key = $value;

銆銆}

銆銆}

銆銆return true;

銆銆}

銆銆}

銆銆?>

銆銆 <?php

銆銆// FileName: test_pager.php

銆銆// 榪欐槸涓孌電畝鍗曠殑紺轟緥浠g爜錛屽墠杈圭渷鐣ヤ簡浣跨敤pear db綾誨緩絝嬫暟鎹搴撹繛鎺ョ殑浠g爜

銆銆require "Pager.class.php";

銆銆if ( isset($_GET['page']) )

銆銆{

銆銆$page = (int)$_GET['page'];

銆銆}

銆銆else

銆銆{

銆銆$page = 1;

銆銆}

銆銆$sql = "select * from table order by id";

銆銆$pager_option = array(

銆銆"sql" => $sql,

銆銆"PageSize" => 10,

銆銆"CurrentPageID" => $page

銆銆);

銆銆if ( isset($_GET['numItems']) )

銆銆{

銆銆$pager_option['numItems'] = (int)$_GET['numItems'];

銆銆}

銆銆$pager = @new Pager($pager_option);

銆銆$data = $pager->getPageData();

銆銆if ( $pager->isFirstPage )

銆銆{

銆銆$turnover = "棣栭〉|涓婁竴欏祙";

銆銆}

銆銆else

銆銆{

銆銆$turnover = "<a ?page=1&numItems=".$pager->numItems."'>棣栭〉</a>|<a ?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>涓婁竴欏</a>|"; }

銆銆if ( $pager->isLastPage )

銆銆{

銆銆$turnover .= "涓嬩竴欏祙灝鵑〉";

銆銆}

銆銆else

銆銆{

銆銆$turnover .="<a ?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>涓嬩竴欏</a>|<a ?page=".$pager->numPages."&numItems=".$pager->numItems."'>灝鵑〉</a>"; }

銆銆?>

銆銆闇瑕佽存槑鐨勫湴鏂規湁涓や釜錛

銆銆榪欎釜綾諱粎浠呭勭悊鏁版嵁錛屽苟涓嶈礋璐e勭悊鏄劇ず錛屽洜涓烘垜瑙夊緱灝嗘暟鎹鐨勫勭悊鍜岀粨鏋滅殑鏄劇ず閮芥斁鍒頒竴涓綾婚噷杈瑰疄鍦ㄦ槸鏈変簺鍕夊己銆俆w.wINgWIT鏄劇ず鐨勬椂鍊欐儏鍐靛拰瑕佹眰澶氬彉錛屼笉濡傝嚜宸辨牴鎹綾葷粰鍑虹殑緇撴灉澶勭悊錛屾洿濂界殑鏂規硶鏄鏍規嵁榪欎釜Pager綾葷戶鎵誇竴涓鑷宸辯殑瀛愮被鏉ユ樉紺轟笉鍚岀殑鍒嗛〉錛屾瘮濡傛樉紺虹敤鎴峰垎欏靛垪琛ㄥ彲浠ワ細

銆銆 <?php

銆銆Class MemberPager extends Pager

銆銆{

銆銆function showMemberList()

銆銆{

銆銆global $db;

銆銆$data = $this->getPageData();

銆銆// 鏄劇ず緇撴灉鐨勪唬鐮

銆銆// ......

銆銆}

銆銆}

銆銆/// 璋冪敤

銆銆if ( isset($_GET['page']) )

銆銆{

銆銆$page = (int)$_GET['page'];

銆銆}

銆銆else

銆銆{

銆銆$page = 1;

銆銆}

銆銆$sql = "select * from members order by id";

銆銆$pager_option = array(

銆銆"sql" => $sql,

銆銆"PageSize" => 10,

銆銆"CurrentPageID" => $page

銆銆);

銆銆if ( isset($_GET['numItems']) )

銆銆{

銆銆$pager_option['numItems'] = (int)$_GET['numItems'];

銆銆}

銆銆$pager = @new MemberPager($pager_option);

銆銆$pager->showMemberList();

銆銆?>

銆銆絎浜屼釜闇瑕佽存槑鐨勫湴鏂瑰氨鏄涓嶅悓鏁版嵁搴撶殑鍏煎規э紝鍦ㄤ笉鍚岀殑鏁版嵁搴撻噷鎴鑾蜂竴孌電粨鏋滅殑鍐欐硶鏄涓嶄竴鏍風殑銆

銆銆mysql: select * from table limit offset, rows

銆銆pgsql: select * from table limit m offset n

銆銆......

lishixin/Article/program/PHP/201311/21304

E. php怎麼實現分頁

/**
* 獲取分頁的HTML內容
* @param integer $page 當前頁
* @param integer $pages 總頁數
* @param string $url 跳轉url地址 最後的頁數以 '&page=x' 追加在url後面
*
* @return string HTML內容;
*/
public static function getPageHtml($page, $pages, $url){
//最多顯示多少個頁碼
$_pageNum = 5;
//當前頁面小於1 則為1
$page = $page<1?1:$page;
//當前頁大於總頁數 則為總頁數
$page = $page > $pages ? $pages : $page;
//頁數小當前頁 則為當前頁
$pages = $pages < $page ? $page : $pages;

//計算開始頁
$_start = $page - floor($_pageNum/2);
$_start = $_start<1 ? 1 : $_start;
//計算結束頁
$_end = $page + floor($_pageNum/2);
$_end = $_end>$pages? $pages : $_end;

//當前顯示的頁碼個數不夠最大頁碼數,在進行左右調整
$_curPageNum = $_end-$_start+1;
//左調整
if($_curPageNum<$_pageNum && $_start>1){
$_start = $_start - ($_pageNum-$_curPageNum);
$_start = $_start<1 ? 1 : $_start;
$_curPageNum = $_end-$_start+1;
}
//右邊調整
if($_curPageNum<$_pageNum && $_end<$pages){
$_end = $_end + ($_pageNum-$_curPageNum);
$_end = $_end>$pages? $pages : $_end;
}

$_pageHtml = '<ul class="pagination">';
/*if($_start == 1){
$_pageHtml .= '<li><a title="第一頁">«</a></li>';
}else{
$_pageHtml .= '<li><a title="第一頁" href="'.$url.'&page=1">«</a></li>';
}*/
if($page>1){
$_pageHtml .= '<li><a title="上一頁" href="'.$url.'&page='.($page-1).'">«</a></li>';
}
for ($i = $_start; $i <= $_end; $i++) {
if($i == $page){
$_pageHtml .= '<li class="active"><a>'.$i.'</a></li>';
}else{
$_pageHtml .= '<li><a href="'.$url.'&page='.$i.'">'.$i.'</a></li>';
}
}
/*if($_end == $pages){
$_pageHtml .= '<li><a title="最後一頁">»</a></li>';
}else{
$_pageHtml .= '<li><a title="最後一頁" href="'.$url.'&page='.$pages.'">»</a></li>';
}*/
if($page<$_end){
$_pageHtml .= '<li><a title="下一頁" href="'.$url.'&page='.($page+1).'">»</a></li>';
}
$_pageHtml .= '</ul>';
echo $_pageHtml;
}

閱讀全文

與php多種分頁相關的資料

熱點內容
幼兒編程教育培訓多少錢 瀏覽:404
經常生氣有什麼東西能解壓 瀏覽:901
代理伺服器地址和埠可以怎麼填 瀏覽:63
unity5手游編譯模型 瀏覽:265
安卓無人機app源碼 瀏覽:808
pl1編程語言 瀏覽:801
台達plc編程換算指令大全 瀏覽:174
手機上的編程游戲 瀏覽:108
伺服器密碼機有什麼用 瀏覽:477
dos磁碟命令 瀏覽:955
單片機cpu52的功能 瀏覽:691
opc伺服器怎麼開發 瀏覽:373
覓喜是個什麼app 瀏覽:402
加密cd機 瀏覽:946
社保用什麼app繳納 瀏覽:313
nodevlinux 瀏覽:582
騰訊tt伺服器怎麼登錄密碼 瀏覽:898
windows命令提示符 瀏覽:352
win7管理員許可權命令 瀏覽:729
地圖app哪個適合老年人用 瀏覽:74