我們已經(jīng)了解了如何進行數(shù)據(jù)查詢,今天我們來學習下如何對數(shù)據(jù)進行分頁以及顯示。
南沙網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
獲取分頁類
ThinkPHP提供了數(shù)據(jù)分頁的擴展類庫Page,可以在下載,或者下載官方的完整擴展包()里面也已經(jīng)包含分頁擴展類了。把解壓后的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(如果沒有請手動創(chuàng)建)目錄下面。
當然,擴展類庫的位置其實比較隨意,你也可以放入項目的類庫目錄下面,區(qū)別只是在于你導入路徑的不同而已。
分頁查詢
分頁類需要和查詢相結合,我們可以使用ThinkPHP自帶的limit方法或者page方法,目的就是為了獲取當前分頁的數(shù)據(jù)(也有先獲取完整數(shù)據(jù)然后前端分頁顯示的方法,不在本文描述內容中,也不建議)。使用limit方法或者page方法是和數(shù)據(jù)庫類型無關的。
我們首先在數(shù)據(jù)庫里面創(chuàng)建一個think_data數(shù)據(jù)表用于測試:
CREATE TABLE IF NOT EXISTS `think_data` (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`create_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
復制代碼
要使用分頁查詢,一般來說需要進行兩次查詢,即第一次查詢得到滿足條件的總數(shù)據(jù)量,然后第二次查詢當前分頁的數(shù)據(jù),這樣做的作用是告訴分頁類當前的數(shù)據(jù)總數(shù),以便計算生成的總頁數(shù)(如果你的顯示只是需要上下翻頁的話,其實總數(shù)查詢可以省略或者進行緩存)。
一個標準的分頁使用示例如下:
$Data = M('Data'); // 實例化Data數(shù)據(jù)對象
import('ORG.Util.Page');// 導入分頁類
$count = $Data-where($map)-count();// 查詢滿足要求的總記錄數(shù) $map表示查詢條件
$Page = new Page($count);// 實例化分頁類 傳入總記錄數(shù)
$show = $Page-show();// 分頁顯示輸出
// 進行分頁數(shù)據(jù)查詢
$list = $Data-where($map)-order('create_time')-limit($Page-firstRow.','.$Page-listRows)-select();
$this-assign('list',$list);// 賦值數(shù)據(jù)集
$this-assign('page',$show);// 賦值分頁輸出
$this-display(); // 輸出模板
復制代碼
如果沒有任何數(shù)據(jù)的話,分頁顯示為空白。所以在進行測試之前,請確保你的數(shù)據(jù)表里面有一定的數(shù)據(jù),否則可能看不到分頁的效果。如果使用page方法查詢的話,則可以改成:
$Data = M('Data'); // 實例化Data數(shù)據(jù)對象
import('ORG.Util.Page');// 導入分頁類
$count = $Data-where($map)-count();// 查詢滿足要求的總記錄數(shù)
$Page = new Page($count);// 實例化分頁類 傳入總記錄數(shù)
// 進行分頁數(shù)據(jù)查詢 注意page方法的參數(shù)的前面部分是當前的頁數(shù)使用 $_GET[p]獲取
$nowPage = isset($_GET['p'])?$_GET['p']:1;
$list = $Data-where($map)-order('create_time')-page($nowPage.','.$Page-listRows)-select();
$show = $Page-show();// 分頁顯示輸出
$this-assign('page',$show);// 賦值分頁輸出
$this-assign('list',$list);// 賦值數(shù)據(jù)集
$this-display(); // 輸出模板
復制代碼
然后,我們在模板中添加分頁輸出變量即可:
table cellpadding=3 cellspacing=5
volist name="list" id="vo"
tr
td [ {$vo.create_time|date='Y-m-d H:i:s',###} ] {$vo.title} /td
/tr
/volist
tr
/tr
/table
div class="result page"{$page}/div
復制代碼
可以看到分頁輸出只需要采用{$page}變量在模板中輸出即可。
分頁設置
設置分頁變量
默認情況下,分頁傳值的變量是p,生成的分頁跳轉地址可能類似于:
復制代碼
我們可以配置VAR_PAGE配置參數(shù)來改變:
'VAR_PAGE'='page'
復制代碼
則分頁地址變成:
復制代碼
設置每頁記錄數(shù)
默認的情況下,分頁顯示每頁會顯示20條數(shù)據(jù),如果你希望改變每頁顯示的數(shù)據(jù)量的話,實例化分頁類的時候可以傳人第二個參數(shù)即可:
$Page = new Page($count,5);// 實例化分頁類 傳入總記錄數(shù)并且每頁顯示5條記錄
復制代碼
由于查詢方法中我們使用了$Page-listRows屬性,所以無需更改,但如果你是直接在查詢方法中使用數(shù)字請記得一起更改。
下面是官方的分頁示例的顯示效果:
傳入分頁條件
默認情況下,分頁類會自動獲取當前頁面的POST(優(yōu)先)或者GET變量作為分頁跳轉的傳值,如果需要指定傳入當前分頁跳轉的參數(shù),就可以通過設置parameter屬性,parameter屬性支持2種方式傳值:字符串和數(shù)組。字符串采用var1=val1var2=val2...的格式,例如:
foreach($map as $key=$val) {
$Page-parameter .= "$key=".urlencode($val).'';
}
復制代碼
或者直接傳入數(shù)組:
$Page-parameter = array_map('urlencode',$map);
復制代碼
由于內部調用了U函數(shù),分頁類最終生成的分頁跳轉鏈接會根據(jù)當前的URL設置自動生成和當前URL模式一致的地址,所以無需擔心分頁鏈接的參數(shù)影響URL地址。
分頁路由支持
如果你的分頁跳轉鏈接地址采用了路由,那么可以通過設置url參數(shù),例如,假設我們的分頁URL地址格式是:
復制代碼
這樣的URL路由地址,那么我們就可以設置
$Page-url = 'data/index';
復制代碼
設置后,分頁類的鏈接地址會自動生成上面的URL格式地址。
注意,url參數(shù)和parameter 同時使用的話,后者無效。
設置顯示的頁數(shù)
可以在實例化分頁類之后,進行相關屬性的設置。默認情況下,頁面顯示的頁數(shù)是5,我們可以修改:
$Page-rollPage = 3;
復制代碼
這樣,頁面上只能同時看到3個分頁
分頁顯示定制
上面講的是分頁的參數(shù)設置,下面講下如何對分頁顯示效果(包括樣式)進行設置。默認的分頁效果可能不能滿足所有的要求,分頁類提供了一個setConfig方法來修改默認的一些設置。例如:
$page-setConfig('header','個會員');
復制代碼
setConfig方法支持的屬性包括:
header 頭部描述信息,默認值 “條記錄”
prev 上一頁描述信息,默認值是“上一頁”
next 下一頁描述信息,默認值是“下一頁”
first 第一頁描述信息,默認值是“第一頁”
last 最后一頁描述信息,默認值是“最后一頁”
theme 分頁主題描述信息,包括了上面所有元素的組合 ,設置該屬性可以改變分頁的各個單元的顯示位置,默認值是
"%totalRow% %header% %nowPage%/%totalPage% 頁 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%"
通過setConfig設置以上屬性可以完美的定制出你的分頁顯示風格。
?php
class?Page?{
private?$total;?//數(shù)據(jù)表中總記錄數(shù)
private?$listRows;?//每頁顯示行數(shù)
private?$limit;
private?$uri;
private?$pageNum;?//頁數(shù)
private?$config=array('header'="個記錄",?"prev"="上一頁",?"next"="下一頁",?"first"="首?頁",?"last"="尾?頁");
private?$listNum=8;
/*
*?$total?
*?$listRows
*/
public?function?__construct($total,?$listRows=10,?$pa=""){
$this-total=$total;
$this-listRows=$listRows;
$this-uri=$this-getUri($pa);
$this-page=!empty($_GET["page"])???$_GET["page"]?:?1;
$this-pageNum=ceil($this-total/$this-listRows);
$this-limit=$this-setLimit();
}
private?function?setLimit(){
return?"Limit?".($this-page-1)*$this-listRows.",?{$this-listRows}";
}
private?function?getUri($pa){
$url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"],?'?')?'':"?").$pa;
$parse=parse_url($url);
if(isset($parse["query"])){
parse_str($parse['query'],$params);
unset($params["page"]);
$url=$parse['path'].'?'.http_build_query($params);
}
return?$url;
}
private?function?__get($args){
if($args=="limit")
return?$this-limit;
else
return?null;
}
private?function?start(){
if($this-total==0)
return?0;
else
return?($this-page-1)*$this-listRows+1;
}
private?function?end(){
return?min($this-page*$this-listRows,$this-total);
}
private?function?first(){
if($this-page==1)
$html.='';
else
$html.="nbsp;nbsp;a?href='javascript:setPage(\"{$this-uri}page=1\")'{$this-config["first"]}/anbsp;nbsp;";
return?$html;
}
private?function?prev(){
if($this-page==1)
$html.='';
else
$html.="nbsp;nbsp;a?href='javascript:setPage(\"{$this-uri}page=".($this-page-1)."\")'{$this-config["prev"]}/anbsp;nbsp;";
return?$html;
}
private?function?pageList(){
$linkPage="";
$inum=floor($this-listNum/2);
for($i=$inum;?$i=1;?$i--){
$page=$this-page-$i;
if($page1)
continue;
$linkPage.="nbsp;a?href='javascript:setPage(\"{$this-uri}page={$page}\")'{$page}/anbsp;";
}
$linkPage.="nbsp;{$this-page}nbsp;";
for($i=1;?$i=$inum;?$i++){
$page=$this-page+$i;
if($page=$this-pageNum)
$linkPage.="nbsp;a?href='javascript:setPage(\"{$this-uri}page={$page}\")'{$page}/anbsp;";
else
break;
}
return?$linkPage;
}
private?function?next(){
if($this-page==$this-pageNum)
$html.='';
else
$html.="nbsp;nbsp;a?href='javascript:setPage(\"{$this-uri}page=".($this-page+1)."\")'{$this-config["next"]}/anbsp;nbsp;";
return?$html;
}
private?function?last(){
if($this-page==$this-pageNum)
$html.='';
else
$html.="nbsp;nbsp;a?href='javascript:setPage(\"{$this-uri}page=".($this-pageNum)."\")'{$this-config["last"]}/anbsp;nbsp;";
return?$html;
}
private?function?goPage(){
return?'nbsp;nbsp;input?type="text"?onkeydown="javascript:if(event.keyCode==13){var?page=(this.value'.$this-pageNum.')?'.$this-pageNum.':this.value;setPage(\''.$this-uri.'page=\'+page+\'\')}"?value="'.$this-page.'"?style="width:25px"input?type="button"?value="GO"?onclick="javascript:var?page=(this.previousSibling.value'.$this-pageNum.')?'.$this-pageNum.':this.previousSibling.value;setPage(\''.$this-uri.'page=\'+page+\'\')"nbsp;nbsp;';
}
function?fpage($display=array(0,1,2,3,4,5,6,7,8)){
$html[0]="nbsp;nbsp;共有b{$this-total}/b{$this-config["header"]}nbsp;nbsp;";
$html[1]="nbsp;nbsp;每頁顯示b".($this-end()-$this-start()+1)."/b條,本頁b{$this-start()}-{$this-end()}/b條nbsp;nbsp;";
$html[2]="nbsp;nbsp;b{$this-page}/{$this-pageNum}/b頁nbsp;nbsp;";
$html[3]=$this-first();
$html[4]=$this-prev();
$html[5]=$this-pageList();
$html[6]=$this-next();
$html[7]=$this-last();
$html[8]=$this-goPage();
$fpage='';
foreach($display?as?$index){
$fpage.=$html[$index];
}
return?$fpage;
}
}
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ù),有余進一。
也就是說10/3=3.3333=4 有余數(shù)就要進一。
*/
$total=mysql_num_rows(mysql_query("select id from table")); //查詢數(shù)據(jù)的總數(shù),id是數(shù)據(jù)庫中的一個自動賦值的字段
$pagenum=ceil($total/$num); //獲得總頁數(shù)
//假如傳入的頁數(shù)參數(shù)大于總頁數(shù),則顯示錯誤信息
If($page$pagenum || $page == 0){
Echo "Error : Can Not Found The page .";
Exit;
}
$offset=($page-1)*$num; //獲取limit的第一個參數(shù)的值,假如第一頁則為(1-1)*10=0,第二頁為(2-1)*10=10。
$info=mysql_query("select name from table limit $offset,$num"); //獲取相應頁數(shù)所需要顯示的數(shù)據(jù),name是數(shù)據(jù)里的一個字段
While($it=mysql_fetch_array($info)){
Echo $it['name']."
";
} //顯示數(shù)據(jù)
For($i=1;$i=$pagenum;$i++){
$show=($i!=$page)?"$i":"$i";
Echo $show." ";
}
/*顯示分頁信息,假如是當頁則顯示粗體的數(shù)字,其余的頁數(shù)則為超連接,假如當前為第三頁則顯示如下
1 2 3 4 5 6
*/
?
1、前言
分頁顯示是一種非常常見的瀏覽和顯示大量數(shù)據(jù)的方法,屬于web編程中最常處理的事件之一。對于web編程的老手來說,編寫這種代碼實在是和呼吸一樣自然,但是對于初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以后對于分頁顯示的原理和實現(xiàn)方法有所了解。本文適合初學者閱讀,所有示例代碼均使用php編寫。
2、原理
所謂分頁顯示,也就是將數(shù)據(jù)庫中的結果集人為的分成一段一段的來顯示,這里需要兩個初始的參數(shù):
每頁多少條記錄($PageSize)?
當前是第幾頁($CurrentPageID)?
現(xiàn)在只要再給我一個結果集,我就可以顯示某段特定的結果出來。
至于其他的參數(shù),比如:上一頁($PreviousPageID)、下一頁($NextPageID)、總頁數(shù)($numPages)等等,都可以根據(jù)前邊這幾個東西得到。
以mysql數(shù)據(jù)庫為例,如果要從表內截取某段內容,sql語句可以用:select * from table limit offset, rows。看看下面一組sql語句,嘗試一下發(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語句其實就是當$PageSize=10的時候取表內每一頁數(shù)據(jù)的sql語句,我們可以總結出這樣一個模板:
select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那么回事。搞定了最重要的如何獲取數(shù)據(jù)的問題以后,剩下的就僅僅是傳遞參數(shù),構造合適的sql語句然后使用php從數(shù)據(jù)庫內獲取數(shù)據(jù)并顯示了。以下我將用具體代碼加以說明。
3、簡單代碼
請詳細閱讀以下代碼,自己調試運行一次,最好把它修改一次,加上自己的功能,比如搜索等等。
?php
// 建立數(shù)據(jù)庫連接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 獲取當前頁數(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 ) //如果總數(shù)據(jù)量小于$PageSize,那么只有一頁
if( $amount % $page_size ){ //取總數(shù)據(jù)量除以每頁數(shù)的余數(shù)
$page_count = (int)($amount / $page_size) + 1; //如果有余數(shù),則頁數(shù)等于總數(shù)據(jù)量除以每頁數(shù)的結果取整再加一
}else{
$page_count = $amount / $page_size; //如果沒有余數(shù),則頁數(shù)等于總數(shù)據(jù)量除以每頁數(shù)的結果
}
}
else{
$page_count = 0;
}
// 翻頁鏈接
$page_string = '';
if( $page == 1 ){
$page_string .= '第一頁|上一頁|';
}
else{
$page_string .= 'a href="/?page=1";第一頁/a|a href="/?page='."($page-1).'上一頁/a|';
}
if( ($page == $page_count) || ($page_count == 0) ){
$page_string .= '下一頁|尾頁';
}
else{
$page_string .= 'a href="/?page='."($page+1).'下一頁/a|a href="/?page='."$page_count.'尾頁/a';
}
// 獲取數(shù)據(jù),以二維數(shù)組格式返回結果
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();
}
// 沒有包含顯示結果的代碼,那不在討論范圍,只要用foreach就可以很簡單的用得到的二維數(shù)組來顯示結果
?
4、OO風格代碼
以下代碼中的數(shù)據(jù)庫連接是使用的pear db類進行處理
?php
// FileName: Pager.class.php
// 分頁類,這個類僅僅用于處理數(shù)據(jù)結構,不負責處理顯示的工作
Class Pager
{
var $PageSize; //每頁的數(shù)量
var $CurrentPageID; //當前的頁數(shù)
var $NextPageID; //下一頁
var $PreviousPageID; //上一頁
var $numPages; //總頁數(shù)
var $numItems; //總記錄數(shù)
var $isFirstPage; //是否第一頁
var $isLastPage; //是否最后一頁
var $sql; //sql查詢語句
function Pager($option)
{
global $db;
$this-_setOptions($option);
// 總條數(shù)
if ( !isset($this-numItems) )
{
$res = $db-query($this-sql);
$this-numItems = $res-numRows();
}
// 總頁數(shù)
if ( $this-numItems 0 )
{
if ( $this-numItems $this-PageSize )
if ( $this-numItems % $this-PageSize )
{
$this-numPages= (int)($this-numItems / $this-PageSize) + 1;
}
else
{
$this-numPages = $this-numItems / $this-PageSize;
}
}
else
{
$this-numPages = 0;
}
switch ( $this-CurrentPageID )
{
case $this-numPages == 1:
$this-isFirstPage = true;
$this-isLastPage = true;
break;
case 1:
$this-isFirstPage = true;
$this-isLastPage = false;
break;
case $this-numPages:
$this-isFirstPage = false;
$this-isLastPage = true;
break;
default:
$this-isFirstPage = false;
$this-isLastPage = false;
}
if ( $this-numPages 1 )
{
if ( !$this-isLastPage )
if ( !$this-isFirstPage )
}
return true;
}
/***
*
* 返回結果集的數(shù)據(jù)庫連接
* 在結果集比較大的時候可以直接使用這個方法獲得數(shù)據(jù)庫連接,然后在類之外遍歷,這樣開銷較小
* 如果結果集不是很大,可以直接使用getPageData的方式獲取二維數(shù)組格式的結果
* getPageData方法也是調用本方法來獲取結果的
*
***/
function getDataLink()
{
if ( $this-numItems )
{
global $db;
$PageID = $this-CurrentPageID;
$from = ($PageID - 1)*$this-PageSize;
$count = $this-PageSize;
$link = $db-limitQuery($this-sql, $from, $count); //使用Pear DB::limitQuery方法保證數(shù)據(jù)庫兼容性
return $link;
}
else
{
return false;
}
}
/***
*
* 以二維數(shù)組的格式返回結果集
*
***/
function getPageData()
{
if ( $this-numItems )
{
if ( $res = $this-getDataLink() )
{
if ( $res-numRows() )
{
while ( $row = $res-fetchRow() )
{
$result[] = $row;
}
}
else
{
$result = array();
}
return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}
function _setOptions($option)
{
$allow_options = array(
'PageSize',
'CurrentPageID',
'sql',
'numItems'
);
foreach ( $option as $key = $value )
{
if ( in_array($key, $allow_options) ($value != null) )
{
$this-$key = $value;
}
}
return true;
}
}
?
?php
// FileName: test_pager.php
// 這是一段簡單的示例代碼,前邊省略了使用pear db類建立數(shù)據(jù)庫連接的代碼
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(
"sql" = $sql,
"PageSize" = 10,
"CurrentPageID" = $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option);
$data = $pager-getPageData();
if ( $pager-isFirstPage )
{
$turnover = "首頁|上一頁|";
}
else
{
$turnover = "a href='?page=1numItems=".$pager-numItems."'首頁/a|a href="/?page=".$pager-PreviousPageID."numItems=".$pager-numItems."'上一頁/a|";
}
if ( $pager-isLastPage )
{
$turnover .= "下一頁|尾頁";
}
else
{
$turnover .= "a href="/?page=".$pager-NextPageID."numItems=".$pager-numItems."'下一頁/a|a href="/?page=".$pager-numPages."numItems=".$pager-numItems."'尾頁/a";
}
?
需要說明的地方有兩個:
這個類僅僅處理數(shù)據(jù),并不負責處理顯示,因為我覺得將數(shù)據(jù)的處理和結果的顯示都放到一個類里邊實在是有些勉強。顯示的時候情況和要求多變,不如自己根據(jù)類給出的結果處理,更好的方法是根據(jù)這個Pager類繼承一個自己的子類來顯示不同的分頁,比如顯示用戶分頁列表可以:
?php
Class MemberPager extends Pager
{
function showMemberList()
{
global $db;
$data = $this-getPageData();
// 顯示結果的代碼
// ......
}
}
/// 調用
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from members order by id";
$pager_option = array(
"sql" = $sql,
"PageSize" = 10,
"CurrentPageID" = $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager-showMemberList();
?
第二個需要說明的地方就是不同數(shù)據(jù)庫的兼容性,在不同的數(shù)據(jù)庫里截獲一段結果的寫法是不一樣的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在類里邊獲取結果的時候需要使用pear db類的limitQuery方法。
ok,寫完收功,希望花時間看完這些文字的你不覺得是浪費了時間。
回答者
另外,虛機團上產(chǎn)品團購,超級便宜
html
head
title分頁顯示/title
/head
script language="javascript"
function confirmDel()
{
var confirm=window.confirm("您確定要刪除嗎?");
if(confirm)
return true;
else
return false;
}
/script
body bgcolor="cce8cf"
center
table border="1" width="90%" cellspacing="1"
tr bgcolor="yellow"
td用戶ID/td
td用戶名/td
td密碼/td
td性別/td
td年齡/td
td電子郵件/td
td操作/td
/tr
?php
error_reporting(0);
//設置頁大小,即每頁顯示幾條數(shù)據(jù)
$pagesize=10;
//設置第一頁
$page=1;
//數(shù)據(jù)庫初始化操作
$link=mysql_connect("localhost","root","root");//連接數(shù)據(jù)庫
$db=mysql_select_db("HibernateDemo",$link);//選擇數(shù)據(jù)庫
$sql="select count(*) from userinfo";//構造sql語句
$res=mysql_query($sql);//執(zhí)行查詢操作,結果為總記錄數(shù)
$row=mysql_fetch_array($res);//取出一條記錄
$rows=$row[0];//取出總記錄數(shù)
//判斷一共多少頁
$pages=intval($rows/$pagesize);//取整數(shù)頁,總頁數(shù)
if($rows%$pagesize)
$pages=$pages+1;//如果還有余數(shù)的話,那么就再加一頁來顯示剩余的記錄
//獲取用戶請求,即用戶提交要去哪一頁
$page=$_GET["ToPage"];
//整理用戶輸入
if($page=0)
{
$page=1;//因為開始的時候沒$page有值,所以是0,所以就讓$page=1,這樣后面的
//$page也就是1,見第97行
}
if($page=$pages)
{
$page=$pages;
}
session_start();
echo "div align='right' top='0'a href='logout.php'注銷".$_SESSION['username']."/a/div";
echo "當前第".$page."頁,每頁10個記錄,總".$rows."條記錄,一共".$pages."頁";//顯示頁數(shù)信息
//計算偏移量
$offset=$pagesize*($page-1);
//構造sql語句
$sqlx="select * from userinfo limit 10 offset ".$offset;
$result=mysql_query($sqlx);//執(zhí)行查詢操作
$ok=mysql_fetch_array($result);
while($ok)
{
?
tr
td bgcolor="#DEB887"?php echo $ok[0] ?/td
td?php echo $ok[1] ?/td
td?php echo $ok[2] ?/td
td?php echo $ok[3]==male?"男":"女" ?/td
td?php echo $ok[4] ?/td
td?php echo $ok[5] ?/td
tda href="updateInfo.php?userid=?php echo $ok[0] ?"修改/a
a href="deleteInfo.php?userid=?php echo $ok[0] ?"
onclick="return confirmDel();"刪除/a
/td
/tr
?php
$ok=mysql_fetch_array($result);
}
?
/table
table
?php
//判斷當前是否是第一頁,不是,則顯示'第一頁'和'上一頁'
if($page!=1)
{
?
tr
td align="center"
a href="pageSelect.php?ToPage=1"第一頁/a
a href="pageSelect.php?ToPage=?php echo ($page-1) ?"上一頁/a
/td
?php
}
//如果不是最后一頁,則顯示‘最后一頁’和‘下一頁’
if($page!=$pages)
{
?
td align="center" colspan="6"
a href="pageSelect.php?ToPage=?php echo ($page+1) ?"下一頁/a
a href="pageSelect.php?ToPage=?php echo ($pages) ?"最后一頁/a
/td
?php
}
?
table
form action="pageSelect.php" method="get" name="form1"
tr
td colspan="6" align="center"
input type="text" value="?php echo ($page) ?" name="ToPage"
size="3" /
a href="javascript:window.document.form1.submit();"GO/a
/td
/tr
/form
/table
/center
/body
/html
原理:
1.設定每頁顯示數(shù)
$num = 15;
2.獲取數(shù)據(jù)總數(shù)計算總頁數(shù)
3.通過get方法獲取頁碼,無獲取值頁碼為1,超過最大頁數(shù)為最大頁面數(shù)
$page = $_GET['page'] ? $_GET['page'] : 1;
4.通過頁碼來計算當前顯示起始記錄
$start = $page*$num-1;
5.通過sql語句查詢
query("select * from tablename limit $start,$num");
然后輸出就行了
頁面上可以循環(huán)輸出1~總頁數(shù) 這些數(shù)字來實現(xiàn)翻頁,也可以用其他方法
比較方便的方法是,可以去找一個分頁類