作為一個Web程序,經常要和不計其數的數據打交道,比如會員的數據,文章數據,假如只有幾十個會員那很好辦,在一頁顯示就可以了,可是假如你的網站是幾 " /> 加勒比一本大道香蕉在线视频,亚洲欧美日韩精品,欧美黄色高清

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

默默小談PHP&MYSQL分頁原理及實現

在看本文之前,請確保你已掌握了php的一些知識以及MYSQL的查詢操作基礎哦。

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

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

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

Select * from table limit 0,10

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

關鍵的地方就在這段“limit 0,10”,它其中的0是以0為起始點,后面的10則是顯示10條數據,那么我們要以10為起始點,顯示到第20條數據該怎么寫呢?

可能很多大大會心直口快的說“limit 10,20”嘛!啊哦,這樣可就錯誤了哦,正確的寫法是“limit 10,10”它后面的參數并非是結束點而是要提取的數目,記住哦。

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

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

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

咱們通過一段代碼來看一看究竟是如何實現的吧: 



復制代碼 代碼如下:<?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 * from table")); //查詢數據的總數 
$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 * from table limit $offset,$num");   //獲取相應頁數所需要顯示的數據 
While($it=mysql_fetch_array($info)){ 
       Echo $it['name']."<br />"; 
}                                                              //顯示數據 

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

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


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


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

是不是很簡單,只要動動腦筋,可以讓它顯示的更為個性化哦,給大家出一個小題,如何實現“首頁   尾頁”這種格式的分頁呢?

OK,水帖灌完,收工。^_^
復制代碼 代碼如下:
<?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("localhost","root","7529639");           //創建數據庫連接
mysql_select_db("cr_download");                 //選擇要操作的數據庫

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

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

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

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

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


//如果只有一頁則跳出函數:
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> ";

//下拉跳轉列表,循環列出所有頁碼:
$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 頁";

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

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

?> 

順便再深入下,在實際應用中,幾乎涉及列表的就要用到分頁,大家可以試試做一個分頁通用函數,這樣只要需要分頁的地方就調用這個函數,呵呵~~

php技術默默小談PHP&amp;amp;MYSQL分頁原理及實現,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久一视频在线观看 | 天天插伊人 | 狠狠狠地在啪线香蕉 | 色女人综合网 | 草久久久久 | 天天综合网天天综合色不卡 | 国产专区视频在线观看 | 欧美日韩国产精品 | 亚洲网站在线播放 | 一道精品视频一区二区三区图片 | 一区二区三区美女视频 | 日本一区二区三区国产 | 久久久久久国产精品mv | 色在线网站| 九九热8 | 小说区乱图片区 | 精品伊人久久久久7777人 | 午夜一级 | 亚洲香蕉久久综合网 | 日本激情一区二区三区 | 久久精品国产一区二区三区肥胖 | 亚洲第一页在线观看 | 日韩亚洲国产欧美精品 | 又色又爽又黄的视频女女高清 | 怡红院日韩 | 国产午夜免费视频片夜色 | 国产综合久久久久影院 | 视色4se成人午夜精品 | 女人洗澡一级毛片一级毛片 | 国产一区二区视频免费 | 黄色网址免费在线 | 美女视频一区 | 淫啪| 久久无码精品一区二区三区 | 伊人色婷婷综在合线亚洲 | 欧美一级性视频 | 亚洲天堂一区二区 | 国产成人亚洲综合一区 | 国产一区二区三区免费观看 | 色婷婷五| 国产欧美视频综合二区 |