作為一個(gè)Web程序,經(jīng)常要和不計(jì)其數(shù)的數(shù)據(jù)打交道,比如會(huì)員的數(shù)據(jù),文章數(shù)據(jù),假如只有幾十個(gè)會(huì)員那很好辦,在一頁(yè)顯示就可以了,可是假如你的網(wǎng)站是幾 " /> 纯肉合集(高H),久久综合伊人 magnet,一本道dvd久久综合高清免费

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

在看本文之前,請(qǐng)確保你已掌握了php的一些知識(shí)以及MYSQL的查詢操作基礎(chǔ)哦。

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

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

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

Select * from table limit 0,10

上面是一句很簡(jiǎn)單的mysql查詢語(yǔ)句,它的作用是從一個(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ù)該怎么寫呢?

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

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

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

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

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



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

/* 

Author:默默 
Date  :2006-12-03 

*/ 

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

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

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

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

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


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

$info=mysql_query("select * from table limit $offset,$num");   //獲取相應(yīng)頁(yè)數(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." "; 


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


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

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

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

/*

Author:默默
Date  :2006-12-03

*/

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

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

/*
首先咱們要獲取數(shù)據(jù)庫(kù)中到底有多少數(shù)據(jù),才能判斷具體要分多少頁(yè),具體的公式就是
總數(shù)據(jù)庫(kù)除以每頁(yè)顯示的條數(shù),有余進(jìn)一。
也就是說(shuō)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';//獲取本頁(yè)URL

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

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


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

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

//下拉跳轉(zhuǎn)列表,循環(huán)列出所有頁(yè)碼:
$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> 頁(yè),共 $pagenum 頁(yè)";

//假如傳入的頁(yè)數(shù)參數(shù)大于總頁(yè)數(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)頁(yè)數(shù)所需要顯示的數(shù)據(jù)
While($it=mysql_fetch_array($info)){
       Echo $it['username'];
       echo "<br>";
}                                                              //顯示數(shù)據(jù)
  echo"<br>";
  echo $pagenav;//輸出分頁(yè)導(dǎo)航

?> 

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

php技術(shù)默默小談PHP&amp;amp;MYSQL分頁(yè)原理及實(shí)現(xiàn),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 草莓视频免费在线观看 | 午夜黄视频 | 久草在线草a免费线看 | 精品久久中文字幕有码 | 成人区在线观看免费视频 | 久久精品国产亚洲AV妓女不卡 | 日韩免费一区 | 艳鉧动漫1~6全集观看在线 | 国产精品亚洲电影久久成人影院 | 窝窝影院午夜看片毛片 | 国产精品久久久久久久人人看 | 99热这里只就有精品22 | 把腿张开再深点好爽宝贝 | 国产成人精品永久免费视频 | 胖老太与人牲交BBWBBW高潮 | 超碰免费视频在线观看 | 亚洲成人一区二区 | 亚洲乱码在线卡一卡二卡新区 | 自拍 偷拍 亚洲 经典 | 菠萝蜜国际一区麻豆 | 久久亚洲国产成人影院 | 欧美性猛交AAA片免费观看 | 欧美亚洲另类丝袜自拍动漫 | 小妇人电影免费完整观看2021 | 777午夜精品久久AV蜜臀 | 五月丁香啪啪. | 长泽梓黑人初解禁bdd07 | 少妇大荫蒂毛多毛大 | 忘忧草日本在线WWW日本 | 亚洲色综合中文字幕在线 | 欧美一级久久久久久久大 | 99热在线视频 | 偷偷鲁手机在线播放AV | 男人被绑着强行摸j | 最近免费中文字幕完整版HD | 乌克兰肛交影视 | 亚洲 欧美 国产 综合 在线 | 国产人妖一区二区 | 欧美高清vivoesosexo10 | 97人人超碰国产精品最新蜜芽 | 亚洲区偷拍自拍29P 亚洲区视频在线观看 |