国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 PHP分頁顯示製作詳細(xì)解說_PHP教程

PHP分頁顯示製作詳細(xì)解說_PHP教程

Jul 21, 2016 pm 04:08 PM
php 分頁 製作 前言 屬於 數(shù)據(jù) 方法 顯示 瀏覽 講解 詳細(xì)

1、前言

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

2、原理

所謂分頁顯示,也就是將數(shù)據(jù)庫中的結(jié)果集人為的分成一段一段的來顯示,這里需要兩個初始的參數(shù):

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

現(xiàn)在只要再給我一個結(jié)果集,我就可以顯示某段特定的結(jié)果出來。
至于其他的參數(shù),比如:上一頁($PreviousPageID)、下一頁($NextPageID)、總頁數(shù)($numPages)等等,都可以根據(jù)前邊這幾個東西得到。
以mysql數(shù)據(jù)庫為例,如果要從表內(nèi)截取某段內(nèi)容,sql語句可以用:select * from table limit offset, rows??纯聪旅嬉唤Msql語句,嘗試一下發(fā)現(xiàn)其中的規(guī)率。

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

這一組sql語句其實(shí)就是當(dāng)$PageSize=10的時候取表內(nèi)每一頁數(shù)據(jù)的sql語句,我們可以總結(jié)出這樣一個模板:

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

拿這個模板代入對應(yīng)的值和上邊那一組sql語句對照一下看看是不是那么回事。搞定了最重要的如何獲取數(shù)據(jù)的問題以后,剩下的就僅僅是傳遞參數(shù),構(gòu)造合適的sql語句然后使用php從數(shù)據(jù)庫內(nèi)獲取數(shù)據(jù)并顯示了。以下我將用具體代碼加以說明。

3、簡單代碼
請?jiān)敿?xì)閱讀以下代碼,自己調(diào)試運(yùn)行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

// 建立數(shù)據(jù)庫連接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 獲取當(dāng)前頁數(shù)
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每頁數(shù)量
$PageSize = 10;
// 獲取總數(shù)據(jù)量
$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; } //如果總數(shù)據(jù)量小于$PageSize,那么只有一頁
if( $amount % $page_size ){ //取總數(shù)據(jù)量除以每頁數(shù)的余數(shù)
$page_count = (int)($amount / $page_size) + 1; //如果有余數(shù),則頁數(shù)等于總數(shù)據(jù)量除以每頁數(shù)的結(jié)果取整再加一
}else{
$page_count = $amount / $page_size; //如果沒有余數(shù),則頁數(shù)等于總數(shù)據(jù)量除以每頁數(shù)的結(jié)果
}
}
else{
$page_count = 0;
}

// 翻頁鏈接
$page_string = '';
if( $page == 1 ){
$page_string .= '第一頁|上一頁|';
}
else{
$page_string .= '第一頁|上一頁|';
}
if( ($page == $page_count) || ($page_count == 0) ){
?? $page_string .= '下一頁|尾頁';
}
else{
?? $page_string .= '下一頁|尾頁';
}
// 獲取數(shù)據(jù),以二維數(shù)組格式返回結(jié)果
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();
}
// 沒有包含顯示結(jié)果的代碼,那不在討論范圍,只要用foreach就可以很簡單的用得到的二維數(shù)組來顯示結(jié)果
?>

4、OO風(fēng)格代碼
以下代碼中的數(shù)據(jù)庫連接是使用的pear db類進(jìn)行處理

// FileName: Pager.class.php
// 分頁類,這個類別僅用於處理資料結(jié)構(gòu),不負(fù)責(zé)處理顯示的工作
Class Pager
{
?? var $PageSize;???????????? //每頁的數(shù)量
?? var $CurrentPageID????? //下一頁
?? var $PreviousPageID;?????? //上一頁
?? var $numPages;???????????? //總頁數(shù)
?? var $numItems;????????? //是否第一頁
?? var $isLastPage;?????????? //是否為最後一頁
?? var $sql;????????????????? //sql查詢語句

????? $this->_setOptions($option);
?????? // 總條數(shù)
?????? if ( !isset($this->numItems) )
???????????????? $this- >numItems = $res->numRows();
?????? }
?????? // 總頁數(shù)
???????????? if ( $this->numItems PageSize ){ $this->numPages = 1; }
?????????? if ( $this->numItems % $this->PageSize )numPages= (int) ($this->numItems / $this->PageSize) 1;
?????????? }
?????????????????? $this->numPages = $this->numItems / $this->PageSize;
?????????? }
?????? }
??????? else
????>?????? }

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

?????? if ( $this->numPages > 1 )
?????? {
??????}
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
?????? }
??????? }
?**
??? *
??? * 回傳結(jié)果集的資料庫連接
??? * 在結(jié)果集比較大的時候可以直接使用此方法取得資料庫連接,然後在類別之外遍歷,這樣開銷???如果結(jié)果集不是很大,可以直接使用getPageData的方式取得二維陣列格式的結(jié)果
??? * getPageData方法是使用二維陣列格式的結(jié)果
??? *
??? ***/

?? function getDataLink()
?? {
?????? if ( $this->num?db;

?????????? $PageID = $this->CurrentPageID;

?????????? $from = ($PageID - 1) *$this->PageSize;limitQuery($this->sql, $from, $count);?? //使用梨子db :: limitquery方法保證資料庫相容性

回傳$ link;
}
else
回傳$ link;
}
else
{
{
回傳false;
}
} } }

?? /***
??? *
??? * 以二維陣列的格式傳回結(jié)果集
??? *
??? ***/

?? /***/

?? /***/

????>?? {
?????? if ( $this->numItems )
?????? {
??????? {??????
?????????????? if ( $res->numRows() )
?????????????? {
?????????????????? while ( $row = $res->fetchRow() )
?????????????????? {
?????????????????????? $result[] = $row;
????????????????? }
?????????????? }
?????????????? else
?????????????? {
????????????????????>回傳$結(jié)果;
?????????? }
?????????? else?????????? }
?????? }
?????? else
?????? {
????????

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

?????? foreach ( $option as $key => $value )
???tions) && ($value != null) )
?????????? {
?????????????? $this->$key = $value??>
?????? return true;
?? }
}
?>
// FileName: test_pager.php
// 這是一段簡單的範(fàn)例程式碼,前邊省略了使用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(
???PageSize" => 10,
?????? "CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
{}
$pager = @new Pager($pager_option);
$data = $pager->getPageData();
if ( $pager->isFirstPage )
{
?? $turnover = "首頁|上一頁|";
}
else
{
?? $turnover = "首頁|上一頁|";
}
if ( $pager->isLastPage )
{
?? $turnover .= "下一頁|尾頁";
}
else
{
?? $turnover .= "下一頁|尾頁";
}
? >
?

需要說明的地方有兩個:

這個類僅僅處理數(shù)據(jù),並不負(fù)責(zé)處理顯示,因?yàn)槲矣X得將數(shù)據(jù)的處理和結(jié)果的顯示都放到一個類裡邊實(shí)在是有些勉強(qiáng)。顯示的時候情況和要求多變,不如自己根據(jù)類別給出的結(jié)果處理,更好的方法是根據(jù)這個Pager類別繼承一個自己的子類別來顯示不同的分頁,例如顯示使用者分頁列表可以:

Class MemberPager extends Pager
{

?? function showMemberList()

?? {

???( );

// 顯示結(jié)果的程式碼

?????? // ......

?? }
}
/// 呼叫
if ( isset($_GET[??>/// 呼叫
if ( isset($_GET['page' ]) )
{
?? $page = (int)$_GET['page'];
}
else
{
?? $page = 1;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
$sql = "select * from members order by id";
$pager_option = array(
?????? "sql" => $sql,
?????? "sql" => $sql,
?????? "sql" => $sql,
???> $page
);

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

{
?? $pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager->showMemberList();

?>

?

第二個需要說明的地方就是不同資料庫的兼容性,在不同的資料庫裡截獲一段結(jié)果的寫法是不一樣的。

mysql: select * from table limit offset, rowspgsql: select * from table limit m offset n......所以要在類別裡邊取得結(jié)果的時候需要使用pear db類別的limitQuery方法。 ok,寫完收功,希望花時間看完這些文字的你不覺得是浪費(fèi)了時間。 ?

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314945.htmlTechArticle1、前言分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設(shè)計(jì)中最常處理的事件之一。對於web程式設(shè)計(jì)的老手來說,寫這種代...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

為什麼我們評論:PHP指南 為什麼我們評論:PHP指南 Jul 15, 2025 am 02:48 AM

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

如何在Windows上安裝PHP 如何在Windows上安裝PHP Jul 15, 2025 am 02:46 AM

安裝PHP在Windows上的關(guān)鍵步驟包括:1.下載合適的PHP版本並解壓,推薦使用ThreadSafe版本配合Apache或NonThreadSafe版本配合Nginx;2.配置php.ini文件,將php.ini-development或php.ini-production重命名為php.ini;3.將PHP路徑添加到系統(tǒng)環(huán)境變量Path中以便命令行使用;4.測試PHP是否安裝成功,通過命令行執(zhí)行php-v和運(yùn)行內(nèi)置服務(wù)器測試解析能力;5.若使用Apache,需在httpd.conf中配置P

PHP語法:基礎(chǔ)知識 PHP語法:基礎(chǔ)知識 Jul 15, 2025 am 02:46 AM

PHP的基礎(chǔ)語法包括四個關(guān)鍵點(diǎn):1.PHP標(biāo)籤必須使用結(jié)束,推薦使用完整標(biāo)籤;2.輸出內(nèi)容常用echo和print,其中echo支持多參數(shù)且效率更高;3.註釋方式有//、#和//,用於提升代碼可讀性;4.每條語句必須以分號結(jié)尾,空格和換行不影響執(zhí)行但影響可讀性。掌握這些基本規(guī)則有助於寫出清晰穩(wěn)定的PHP代碼。

PHP 8安裝指南 PHP 8安裝指南 Jul 16, 2025 am 03:41 AM

在Ubuntu上安裝PHP8的步驟為:1.更新軟件包列表;2.安裝PHP8及基礎(chǔ)組件;3.檢查版本確認(rèn)安裝成功;4.按需安裝額外模塊。 Windows用戶可下載ZIP包並解壓,隨後修改配置文件、啟用擴(kuò)展並將路徑加入環(huán)境變量。 macOS用戶推薦使用Homebrew安裝,依次執(zhí)行添加tap、安裝PHP8、設(shè)置默認(rèn)版本及驗(yàn)證版本等步驟。不同系統(tǒng)下安裝方式雖有差異,但流程清晰,根據(jù)用途選對方法即可。

什麼是PHP,它是用什麼? 什麼是PHP,它是用什麼? Jul 16, 2025 am 03:45 AM

PHPisaserver-sidescriptinglanguageusedforwebdevelopment,especiallyfordynamicwebsitesandCMSplatformslikeWordPress.Itrunsontheserver,processesdata,interactswithdatabases,andsendsHTMLtobrowsers.Commonusesincludeuserauthentication,e-commerceplatforms,for

python如果還有示例 python如果還有示例 Jul 15, 2025 am 02:55 AM

寫Python的ifelse語句關(guān)鍵在於理解邏輯結(jié)構(gòu)與細(xì)節(jié)。 1.基礎(chǔ)結(jié)構(gòu)是if條件成立執(zhí)行一段代碼,否則執(zhí)行else部分,else可選;2.多條件判斷用elif實(shí)現(xiàn),順序執(zhí)行且一旦滿足即停止;3.嵌套if用於進(jìn)一步細(xì)分判斷,建議不超過兩層;4.簡潔場景可用三元表達(dá)式替代簡單ifelse。注意縮進(jìn)、條件順序及邏輯完整性,才能寫出清晰穩(wěn)定的判斷代碼。

您的第一個PHP腳本:實(shí)用介紹 您的第一個PHP腳本:實(shí)用介紹 Jul 16, 2025 am 03:42 AM

如何開始編寫第一個PHP腳本?首先設(shè)置本地開發(fā)環(huán)境,安裝XAMPP/MAMP/LAMP,使用文本編輯器,了解服務(wù)器運(yùn)行原理。其次,創(chuàng)建一個名為hello.php的文件,輸入基本代碼並運(yùn)行測試。第三,學(xué)習(xí)混合使用PHP與HTML以實(shí)現(xiàn)動態(tài)內(nèi)容輸出。最後,注意常見錯誤如缺少分號、引用問題及文件擴(kuò)展名錯誤,並開啟錯誤報告以便調(diào)試。

如何處理PHP中的未定義索引 如何處理PHP中的未定義索引 Jul 15, 2025 am 02:08 AM

出現(xiàn)“undefinedindex”錯誤是因?yàn)樵L問了數(shù)組中不存在的鍵。解決方法包括:1.使用isset()檢查鍵是否存在,適合處理用戶輸入;2.使用array_key_exists()判斷鍵是否被設(shè)置,即使值為null也能識別;3.使用空合併運(yùn)算符??設(shè)置默認(rèn)值,避免直接訪問未定義鍵;此外還需注意表單字段名拼寫、數(shù)據(jù)庫結(jié)果為空、數(shù)組解包未驗(yàn)證、foreach中未檢查子級鍵以及未調(diào)用session_start()等常見問題。

See all articles