<?php //本例子摘自phpbuilder.com //稍加翻译 //< [email protected] > $limit=20; // 每页显示的行数 $numresults=mysql_query("select * from TABLE where YOUR CONDITIONAL HERE order by WHATEVER");//换成你所需要的sql语句 $numrows=mysql_num_rows($numresults); // next determine if offset has been passed to script, if not use 0 if (empty($offset)) { $offset=1; } // 得到查询结果 $result=mysql_query("select id,name,phone ". "from TABLE where YOUR CONDITIONAL HERE ". "order by WHATEVER limit $offset,$limit"); // 现在显示查询结果 while ($data=mysql_fetch_array($result)) { // 在这里插入您要显示的结果以及样式 } // 显示按钮 if ($offset!=1) { // bypass PREV link if offset is 1 $prevoffset=$offset-20; print "<a href=\"$PHP_SELF?offset=$prevoffset\">上一页</a> \n"; } // 计算页面数 $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } for ($i=1;$i<=$pages;$i++) { // 显示页数 $newoffset=$limit*($i-1); print "<a href=\"$PHP_SELF?offset=$newoffset\">$i</a> \n"; } // check to see if last page if (!(($offset/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $newoffset=$offset+$limit; print "<a href=\"$PHP_SELF?offset=$newoffset\">下一页</a><p>\n"; } ?>
楼上的不错,不过若使用session来传值,写成一个类,分页与数据处理独立,才算完成嘛。
class page //页面属性类,只需要提供offset,当前页,页面总数,就可以进行翻页 { var $sum; var $now_page; var $offset; var $pre_page; var $next_page; var $begin_record; var $page_cnt; var $page_botton; var $id;function page($offset,$topage,$sum) { global $sum,$topage,$offset,$id; $this->sum=$sum; $this->now_page=$topage; $this->next_page=$this->now_page+1; $this->pre_page=$this->now_page-1; $this->offset=$offset; $this->begin_record=$this->now_page*$this->offset-$this->offset; $this->page_cnt=ceil($this->sum/$this->offset);if(($this->begin_record+$this->offset)>$this->sum) { $this->page_botton=$this->sum; } else { $this->page_botton=$this->now_page*$this->offset; } }function showpage() { global $id; print "共".$this->page_cnt."页 "; print "第:".$this->now_page."页<br>";if ($this->now_page!=1) { @print("<a href=\"$PHP_SELF?id=$id&topage=$this->pre_page\">上一页 </a> \n"); }if ($this->page_cnt!=0 && $this->now_page!=$this->page_cnt) { @print("<a href=\"$PHP_SELF?id=$id&topage=$this->next_page\">下一页 </a> \n"); }for ($y=1;$y<=$this->page_cnt;$y++) { @print "<a href=\"$PHP_SELF?id=$id&topage=$y\">$y</a> "; } print "<br>"; }}
去 www.phpuser.com 看看吧,那里有你想要的!
$start=$PAGE_NUM * $PAGE_SIZE;$SQL="select * from TABLE where YOUR CONDITIONAL HERE order by WHATEVER limit $start, $PAGE_SIZE"; $result=mysql_query($SQL); 就可以了,正好返回第$PAGE_NUM中的数据。
//本例子摘自phpbuilder.com
//稍加翻译
//< [email protected] > $limit=20; // 每页显示的行数
$numresults=mysql_query("select * from TABLE where YOUR CONDITIONAL HERE order by WHATEVER");//换成你所需要的sql语句
$numrows=mysql_num_rows($numresults); // next determine if offset has been passed to script, if not use 0
if (empty($offset)) {
$offset=1;
} // 得到查询结果
$result=mysql_query("select id,name,phone ".
"from TABLE where YOUR CONDITIONAL HERE ".
"order by WHATEVER limit $offset,$limit"); // 现在显示查询结果
while ($data=mysql_fetch_array($result)) {
// 在这里插入您要显示的结果以及样式
} // 显示按钮 if ($offset!=1) { // bypass PREV link if offset is 1
$prevoffset=$offset-20;
print "<a href=\"$PHP_SELF?offset=$prevoffset\">上一页</a> \n";
} // 计算页面数
$pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division
if ($numrows%$limit) {
// has remainder so add one page
$pages++;
} for ($i=1;$i<=$pages;$i++) { // 显示页数
$newoffset=$limit*($i-1);
print "<a href=\"$PHP_SELF?offset=$newoffset\">$i</a> \n";
} // check to see if last page
if (!(($offset/$limit)==$pages) && $pages!=1) {
// not last page so give NEXT link
$newoffset=$offset+$limit;
print "<a href=\"$PHP_SELF?offset=$newoffset\">下一页</a><p>\n";
} ?>
{
var $sum;
var $now_page;
var $offset;
var $pre_page;
var $next_page;
var $begin_record;
var $page_cnt;
var $page_botton;
var $id;function page($offset,$topage,$sum)
{
global $sum,$topage,$offset,$id;
$this->sum=$sum;
$this->now_page=$topage;
$this->next_page=$this->now_page+1;
$this->pre_page=$this->now_page-1;
$this->offset=$offset;
$this->begin_record=$this->now_page*$this->offset-$this->offset;
$this->page_cnt=ceil($this->sum/$this->offset);if(($this->begin_record+$this->offset)>$this->sum)
{
$this->page_botton=$this->sum;
}
else
{
$this->page_botton=$this->now_page*$this->offset;
}
}function showpage()
{
global $id;
print "共".$this->page_cnt."页 ";
print "第:".$this->now_page."页<br>";if ($this->now_page!=1)
{
@print("<a href=\"$PHP_SELF?id=$id&topage=$this->pre_page\">上一页 </a> \n");
}if ($this->page_cnt!=0 && $this->now_page!=$this->page_cnt)
{
@print("<a href=\"$PHP_SELF?id=$id&topage=$this->next_page\">下一页 </a> \n");
}for ($y=1;$y<=$this->page_cnt;$y++)
{
@print "<a href=\"$PHP_SELF?id=$id&topage=$y\">$y</a> ";
}
print "<br>";
}}
$start=$PAGE_NUM * $PAGE_SIZE;$SQL="select * from TABLE where YOUR CONDITIONAL HERE order by WHATEVER limit $start, $PAGE_SIZE";
$result=mysql_query($SQL);
就可以了,正好返回第$PAGE_NUM中的数据。
用例:
require("inc/conn.inc"); //调用数据库连接
if !($offset) $offset = 0;
if !($pageline) $pageline = 15; //不要改变这两个变量的名称;
$classtest = new TViewPage("tablename",$pageline,$offset);
$recordSet = $classtest->getRecords();
$classtest->showFullFunc();
$k=count($recordSet);
for($i=0;$i<$k;$i++)
echo $recordSet[$i]["Field_Name"];
......
***********************************************/ class TViewPage { var $Table; //表名
var $MaxLine=15; //每页显示行数 var $Offset; //记录偏移量
var $Total; //记录总数
var $Number; //本页读取的记录数
var $Result; //读出的结果 var $TPages; //总页数
var $CPages; //当前页数 var $Condition; //数据库搜索条件
var $PageQuery; //分页显示要传递的参数 var $strPageFrist = '首页'; //设置导航条翻页提示符
var $strPagePrev = '上页';
var $strPageNext = '下页';
var $strPageLast = '末页'; var $strDispPageFrist; //设置导航条翻页(未激活状态)提示符
var $strDispPagePrev; //如果不设置,导航条将不区别显示激活与否
var $strDispPageNext; //本项配合图形可获得最佳效果
var $strDispPageLast; //******构造函数*************
//参数:表名、最大行数、偏移量 function TViewPage($TB,$ML,$OF){
$this->Table = $TB;
$this->MaxLine = $ML;
$this->Offset = (floor($OF/$ML)) * $ML;
} //********设置显示条件*********
//如:where id="$id" order by id desc
//要求是字串,符合SQL语法(本字串将加在SQL语句后) function setCondition($s){
$this->Condition=$s;
} //******设置传递参数************
// key参数名 value参数值
// 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数 function setPageQuery($key,$value){
$tmp[key]=$key;$tmp[value]=$value;
$this->PageQuery[]=$tmp;
} //********设置导航条分页显示的字符或图形*********
//如:首页 或 <IMG SRC=frist.gif align=absmiddle> 等。
//要求是字串,符合HTML语法显示的要求
//如果不设置,导航条使用默认字符 function setPageFrist($s,$sd=""){
$this->strPageFrist=$s;
$this->strDispPageFrist=$sd;
} function setPagePrev($s,$sd=""){
$this->strPagePrev=$s;
$this->strDispPagePrev=$sd;
} function setPageNext($s,$sd=""){
$this->strPageNext=$s;
$this->strDispPageNext=$sd;
} function setPageLast($s,$sd=""){
$this->strPageLast=$s;
$this->strDispPageNext=$sd;
} //********读取记录***************
// 主要工作函数,根据所给的条件从表中读取相应的记录
// 返回值是一个二维数组,Result[记录号][字段名] function getRecords() {
$SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition;
$result=mysql_query($SQL) or die(mysql_error());
$row=mysql_fetch_Array($result); $this->Total=$row[total];
$this->TPages=ceil($this->Total/$this->MaxLine);
$this->CPages=$this->Offset/$this->MaxLine+1; if($this->Total>0) {
$SQL="SELECT * FROM ".$this->Table." ".$this->Condition.
" LIMIT ".$this->Offset." , ".$this->MaxLine; $result=mysql_query($SQL) or die(mysql_error());
$this->Number=mysql_num_rows($result); while($row=mysql_fetch_Array($result)) $this->Result[]=$row;
}
return $this->Result;
} //**********显示页码、页数*************
//显示当前页及总页数,参数s指定不同的显示风格,可以不指定 function getPages($s=0) {
switch($s){
case 90:
return $this->CPages;
break;
case 91:
return $this->TPages;
break;
default:
return "第".$this->CPages."页/共".$this->TPages."页";
}
} //**********显示总记录数量************
//显示当前页及总页数
function getTotal() {
return $this->Total;
} //**********接受用户输入每页最多显示记录数************
//$Type=1为下拉单输入,可让用户在iMin~iMax之间选择。
//如果单独使用此类方法(函数),请在调用此类方法时配套加入
//<form>元素及提交按钮,Action可以用$PHP_SELF值。
function inputPageLines($Type=0,$iMin=1,$iMax=30) {
if ($Type == 1){
echo '<select name=pageline>';
for($i=$iMin ; $i <= $iMax ; $i++)
if ($i == $this->MaxLine) echo '<option value='.$i.' selected>'.$i.'</option>';
else echo '<option value='.$i.'>'.$i.'</option>';
echo '</select>';
}else echo '<input type=text size=2 maxlength=3 name=pageline value='.$this->MaxLine.'>';
} //**********接受用户选择页码************
//如果单独使用此类方法(函数),请在调用此类方法时配套加入
//<form>元素及提交按钮,Action可以用$PHP_SELF值。
function selectPage() {
if ($this->TPages > 1) {
echo '<select size=1 name=offset>';
for($i=0 ; $i < $this->TPages ; $i++)
if ($this->Offset == ($i) * $this->MaxLine)
echo '<option value='.($i * $this->MaxLine).' selected>第'.($i+1).'页</option>';
else
echo '<option value='.($i * $this->MaxLine).'>第'.($i+1).'页</option>';
echo '</select>';
$k=count($this->PageQuery);
for($i=0;$i<$k;$i++){
echo '<input type=hidden name='.$this->PageQuery[$i][key].' Value='.$this->PageQuery[$i][value].'>';
}
}
} //**********显示导航按钮或文字*************
//显示首页、下页、上页、未页,并加上要传递的参数 function showNavigator() {
$outstr='';
$first=0;
$next=$this->Offset+$this->MaxLine;
$prev=$this->Offset-$this->MaxLine;
$last=($this->TPages-1)*$this->MaxLine; $k=count($this->PageQuery);
$strQuery="";//生成一个要传递参数字串
for($i=0;$i<$k;$i++){
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
} if($this->Offset>=$this->MaxLine)
$outstr.="<A href=$PHP_SELF?offset=".$first."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageFrist."</A>|";
else
$outstr.=$this->strPageFrist."|";
if($prev>=0)
$outstr.="<A href=$PHP_SELF?offset=".$prev."&pageline=".$this->MaxLine.$strQuery.">".$this->strPagePrev."</A>|";
else
$outstr.=$this->strPagePrev."|";
if($next<$this->Total)
$outstr.="<A href=$PHP_SELF?offset=".$next."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageNext."</A>|";
else
$outstr.=$this->strPageNext."|";
if($this->TPages!=0 && $this->CPages<$this->TPages)
$outstr.="<A href=$PHP_SELF?offset=".$last."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageLast."</A>";
else
$outstr.=$this->strPageLast;
return $outstr;
} //**********分页显示的全部功能*************
//提供一个整合的解决方案,没有特殊要求的话直接用它就行了。
function showFullFunc($barBgColor="") {
echo '<table width=100% cellspacing=0 cellpadding=0 border=0>';
echo '<form Action="'.$PHP_SELF.'" method="POST">';
echo '<tr bgcolor="'.$barBgColor.'">';
echo '<td align=left> ';
echo $this->getPages().' ';
echo $this->showNavigator().' ';
echo '共 '.$this->getTotal().' 行';
echo '</td>';
echo '<td width=45% align=right>';
echo '每页';
$this->inputPageLines(1);
echo '行';
if ($this->TPages > 1) echo ' / 直接跳转到';
$this->selectPage();
echo ' <input type=Submit value="Reset">';
echo ' </td>';
echo '</tr></form></table>';
}
//******end class
}
?>