最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

默默小談PHP&MYSQL分頁原理及實(shí)現(xiàn)

 更新時(shí)間:2007年01月02日 00:00:00   作者:  
在看本文之前,請確保你已掌握了PHP的一些知識以及MYSQL的查詢操作基礎(chǔ)哦。

作為一個(gè)Web程序,經(jīng)常要和不計(jì)其數(shù)的數(shù)據(jù)打交道,比如會員的數(shù)據(jù),文章數(shù)據(jù),假如只有幾十個(gè)會員那很好辦,在一頁顯示就可以了,可是假如你的網(wǎng)站是幾千甚至幾十萬會員的話,如果都在一頁打開的話無論對瀏覽器還是觀看者都是一種折磨。

相信每個(gè)學(xué)習(xí)PHP的新手都會對分頁這個(gè)東西感覺很頭疼,不過有了默默的這一水帖,你肯定會拍拍腦袋說,嘿,原來分頁竟然如此簡單?的確,現(xiàn)在請深呼吸一口新鮮的空氣,仔細(xì)的聽默默給你一點(diǎn)一點(diǎn)的分解。

假設(shè)我們要處理1000條數(shù)據(jù),要在每頁中顯示10條,這樣的話就會分100頁來顯示,咱們先看一看在mysql里提取10條信息是如何操作的。

Select * from table limit 0,10

上面是一句很簡單的mysql查詢語句,它的作用是從一個(gè)名叫table的表里提取10條數(shù)據(jù),并且把所有字段的值都獲得。

關(guān)鍵的地方就在這段“l(fā)imit 0,10”,它其中的0是以0為起始點(diǎn),后面的10則是顯示10條數(shù)據(jù),那么我們要以10為起始點(diǎn),顯示到第20條數(shù)據(jù)該怎么寫呢?

可能很多大大會心直口快的說“l(fā)imit 10,20”嘛!啊哦,這樣可就錯(cuò)誤了哦,正確的寫法是“l(fā)imit 10,10”它后面的參數(shù)并非是結(jié)束點(diǎn)而是要提取的數(shù)目,記住哦。

懂得了如何提取10條數(shù)據(jù),那么提取1000條也就是做100次這種查詢呀,就是說要做如下的查詢:

Limit 0,10                 //第一頁
Limit 10,10                //第二頁
Limit 20,10                //第三頁
Limit 30,10                //第四頁
……
看出有什么規(guī)律了嗎?沒錯(cuò),第一個(gè)參數(shù)每翻一頁就增加10,可是第二個(gè)參數(shù)是不變的。
也就是說咱們設(shè)法根據(jù)頁數(shù)來改變第一個(gè)參數(shù)的值,就可以進(jìn)行分頁顯示數(shù)據(jù)了,怎么樣,原理是不是很簡單?

可是要怎么設(shè)法根據(jù)頁數(shù)來改變第一個(gè)參數(shù)的值呢?首先,咱們要有一個(gè)頁數(shù)的值,用url的GET方式獲取。
比如index.php?page=18
相信大部分的大大對這個(gè)東西不陌生吧,這種url地址可是隨處可見,其中的page參數(shù)的作用就是傳入要顯示的頁數(shù)。

咱們通過一段代碼來看一看究竟是如何實(shí)現(xiàn)的吧: 



復(fù)制代碼 代碼如下:
<?php 

/* 

Author:默默 
Date  :2006-12-03 

*/ 

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

$db=mysql_connect("host","name","pass");           //創(chuàng)建數(shù)據(jù)庫連接 
$select=mysql_select_db("db",$db);                 //選擇要操作的數(shù)據(jù)庫 

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

$total=mysql_num_rows(mysql_query("select * from table")); //查詢數(shù)據(jù)的總數(shù) 
$pagenum=ceil($total/$num);                                    //獲得總頁數(shù) 

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


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

$info=mysql_query("select * from table limit $offset,$num");   //獲取相應(yīng)頁數(shù)所需要顯示的數(shù)據(jù) 
While($it=mysql_fetch_array($info)){ 
       Echo $it['name']."<br />"; 
}                                                              //顯示數(shù)據(jù) 

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

       $show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>"; 
       Echo $show."&nbsp;"; 


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



假如你仔細(xì)的讀過上面的代碼,把數(shù)據(jù)庫連接和查詢的表替換成你的,那么就能看見它的執(zhí)行效果哦。

是不是很簡單,只要?jiǎng)觿幽X筋,可以讓它顯示的更為個(gè)性化哦,給大家出一個(gè)小題,如何實(shí)現(xiàn)“首頁 上一頁 下一頁 尾頁”這種格式的分頁呢?

OK,水帖灌完,收工。^_^
復(fù)制代碼 代碼如下:

<?php

/*

Author:默默
Date  :2006-12-03

*/

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

$db=mysql_connect("localhost","root","7529639");           //創(chuàng)建數(shù)據(jù)庫連接
mysql_select_db("cr_download");                 //選擇要操作的數(shù)據(jù)庫

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

$result=mysql_query("select * from cr_userinfo");
$total=mysql_num_rows($result); //查詢所有的數(shù)據(jù)

$url='test.php';//獲取本頁URL

//頁碼計(jì)算
$pagenum=ceil($total/$num);                                    //獲得總頁數(shù),也是最后一頁
$page=min($pagenum,$page);//獲得首頁
$prepg=$page-1;//上一頁
$nextpg=($page==$pagenum ? 0 : $page+1);//下一頁
$offset=($page-1)*$num;                                        //獲取limit的第一個(gè)參數(shù)的值,假如第一頁則為(1-1)*10=0,第二頁為(2-1)*10=10。

//開始分頁導(dǎo)航條代碼:
$pagenav="顯示第 <B>".($total?($offset+1):0)."</B>-<B>".min($offset+10,$total)."</B> 條記錄,共 $total 條記錄 ";


//如果只有一頁則跳出函數(shù):
if($pagenum<=1) return false;

$pagenav.=" <a href='$url?page=1'>首頁</a> ";
if($prepg) $pagenav.=" <a href='$url?page=$prepg'>前頁</a> "; else $pagenav.=" 前頁 ";
if($nextpg) $pagenav.=" <a href='$url?page=$nextpg'>后頁</a> "; else $pagenav.=" 后頁 ";
$pagenav.=" <a href='$url?page=$pagenum'>尾頁</a> ";

//下拉跳轉(zhuǎn)列表,循環(huán)列出所有頁碼:
$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url?page=\"+this.value'>\n";
for($i=1;$i<=$pagenum;$i++){
if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n";
else $pagenav.="<option value='$i'>$i</option>\n";
}
$pagenav.="</select> 頁,共 $pagenum 頁";

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

$info=mysql_query("select * from cr_userinfo limit $offset,$num");   //獲取相應(yīng)頁數(shù)所需要顯示的數(shù)據(jù)
While($it=mysql_fetch_array($info)){
       Echo $it['username'];
       echo "<br>";
}                                                              //顯示數(shù)據(jù)
  echo"<br>";
  echo $pagenav;//輸出分頁導(dǎo)航

?> 

順便再深入下,在實(shí)際應(yīng)用中,幾乎涉及列表的就要用到分頁,大家可以試試做一個(gè)分頁通用函數(shù),這樣只要需要分頁的地方就調(diào)用這個(gè)函數(shù),呵呵~~

相關(guān)文章

  • 解決php 處理 form 表單提交多個(gè) name 屬性值相同的 input 標(biāo)簽問題

    解決php 處理 form 表單提交多個(gè) name 屬性值相同的 input 標(biāo)簽問題

    這篇文章主要介紹了php 處理 form 表單提交多個(gè) name 屬性值相同的 input 標(biāo)簽問題的解決方法,需要的朋友參考下吧
    2017-05-05
  • php設(shè)計(jì)模式之命令模式使用示例

    php設(shè)計(jì)模式之命令模式使用示例

    這篇文章主要介紹了php設(shè)計(jì)模式之命令模式使用示例,命令模式將一個(gè)請求封裝為一個(gè)對象,從而你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可撤銷操作
    2014-03-03
  • Laravel中的Auth模塊詳解

    Laravel中的Auth模塊詳解

    最近在工作中遇到了Auth模塊,但是對Auth模塊一知半解,通過查找相關(guān)的資料了解學(xué)習(xí),所以下面這篇文章主要給大家介紹了關(guān)于Laravel中Auth模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • PHP生成縮略圖實(shí)例講解

    PHP生成縮略圖實(shí)例講解

    這篇文章主要介紹了PHP生成縮略圖實(shí)例講解,文章列舉了實(shí)例代碼,有正好需要的同學(xué)可以借鑒下
    2021-03-03
  • PHP開發(fā)中常用的十個(gè)代碼樣例

    PHP開發(fā)中常用的十個(gè)代碼樣例

    本文是小編日常收集整理的有關(guān)php開發(fā)中常用的十個(gè)代碼樣例,非常不錯(cuò),特此分享供大家參考
    2016-02-02
  • Zend Framework實(shí)現(xiàn)Zend_View集成Smarty模板系統(tǒng)的方法

    Zend Framework實(shí)現(xiàn)Zend_View集成Smarty模板系統(tǒng)的方法

    這篇文章主要介紹了Zend Framework實(shí)現(xiàn)Zend_View集成Smarty模板系統(tǒng)的方法,詳細(xì)分析了視圖組件Zend_View使用接口Zend_View_Interface繼承Smarty的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • Laravel 框架返回狀態(tài)攔截代碼

    Laravel 框架返回狀態(tài)攔截代碼

    今天小編就為大家分享一篇Laravel 框架返回狀態(tài)攔截代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • CI框架Session.php源碼分析

    CI框架Session.php源碼分析

    Session類并不使用PHP本身的session,而是使用類自己的session,這樣做,可以給開發(fā)者提供更大的彈性。下面我們就來仔細(xì)分析下CI框架的Session類Session.php文件
    2014-11-11
  • ThinkPHP中url隱藏入口文件后接收alipay傳值的方法

    ThinkPHP中url隱藏入口文件后接收alipay傳值的方法

    這篇文章主要介紹了ThinkPHP中url隱藏入口文件后接收alipay傳值的方法,可實(shí)現(xiàn)針對第三方接口的URL地址中的?進(jìn)行轉(zhuǎn)換處理,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • tp5.1 框架數(shù)據(jù)庫常見操作詳解【添加、刪除、更新、查詢】

    tp5.1 框架數(shù)據(jù)庫常見操作詳解【添加、刪除、更新、查詢】

    這篇文章主要介紹了tp5.1 框架數(shù)據(jù)庫常見操作,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5.1針對數(shù)據(jù)庫的添加、刪除、更新、查詢相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-05-05

最新評論

江安县| 泾阳县| 昭通市| 奈曼旗| 榆林市| 河南省| 二手房| 常山县| 维西| 北安市| 蕉岭县| 东阿县| 任丘市| 杭锦后旗| 伊金霍洛旗| 镇原县| 华坪县| 陕西省| 南宁市| 福海县| 安福县| 青田县| 上犹县| 葫芦岛市| 舒兰市| 舟曲县| 上饶县| 吉水县| 马边| 广宗县| 都江堰市| 宜春市| 甘泉县| 沭阳县| 梧州市| 昆明市| 盘山县| 西和县| 榆社县| 锦州市| 柘荣县|