在看本文之前,請確保你已掌握了PHP的一些知識以及MYSQL的查詢操作基礎(chǔ)哦。
作為一個(gè)Web程序,經(jīng)常要和不計(jì)其數(shù)的數(shù)據(jù)打交道,比如會(huì)員的數(shù)據(jù),文章數(shù)據(jù),假如只有幾十個(gè)會(huì)員那很好辦,在一頁顯示就可以了,可是假如你的網(wǎng)站是幾千甚至幾十萬會(huì)員的話,如果都在一頁打開的話無論對瀏覽器還是觀看者都是一種折磨。相信每個(gè)學(xué)習(xí)PHP的新手都會(huì)對分頁這個(gè)東西感覺很頭疼,不過有了默默的這一水帖,你肯定會(huì)拍拍腦袋說,嘿,原來分頁竟然如此簡單?的確,現(xiàn)在請深呼吸一口新鮮的空氣,仔細(xì)的聽默默給你一點(diǎn)一點(diǎn)的分解。假設(shè)我們要處理1000條數(shù)據(jù),要在每頁中顯示10條,這樣的話就會(huì)分100頁來顯示,咱們先看一看在mysql里提取10條信息是如何操作的。Select * from table limit 0,10上面是一句很簡單的mysql查詢語句,它的作用是從一個(gè)名叫table的表里提取10條數(shù)據(jù),并且把所有字段的值都獲得。關(guān)鍵的地方就在這段“limit 0,10”,它其中的0是以0為起始點(diǎn),后面的10則是顯示10條數(shù)據(jù),那么我們要以10為起始點(diǎn),顯示到第20條數(shù)據(jù)該怎么寫呢?可能很多大大會(huì)心直口快的說“limit 10,20”嘛!啊哦,這樣可就錯(cuò)誤了哦,正確的寫法是“limit 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)的吧:
<?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." ";
}
/*顯示分頁信息,假如是當(dāng)頁則顯示粗體的數(shù)字,其余的頁數(shù)則為超連接,假如當(dāng)前為第三頁則顯示如下
1 2 3 4 5 6
*/
?>
假如你仔細(xì)的讀過上面的代碼,把數(shù)據(jù)庫連接和查詢的表替換成你的,那么就能看見它的執(zhí)行效果哦。