复杂的实现分页功能
function _PAGEFT($totle, $displaypg = 20, $url = '')
{
global $page, $firstcount, $pagenav, $_SERVER;
$GLOBALS["displaypg"] = $displaypg;
if(!$page)
$page = 1;
if (!$url)
{
$url = $_SERVER["REQUEST_URI"];
}
//URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; //单独取出URL的查询字串
if($url_query) {
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
$url = str_replace($parse_url["query"], $url_query, $url);
if ($url_query)
$url .= "&page";
else
$url .= "page";
}
else
{
$url .= "?page";
}
$lastpg = ceil($totle / $displaypg); //最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page -1; //上一页
$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
$firstcount = ($page -1) * $displaypg;
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a> ";
else
$pagenav .= " 前页 ";
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a> ";
else
$pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for ($i = 1; $i <= $lastpg; $i++)
{
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n";
else
$pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
$result=mysql_query("SELECT * FROM `gbook`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
_PAGEFT($total,10);
echo $pagenav;
$result=mysql_query("SELECT *FROM `gbook` ORDER BY `id` DESC limit $firstcount,$displaypg ");
function _PAGEFT($totle, $displaypg = 20, $url = '')
{
global $page, $firstcount, $pagenav, $_SERVER;
$GLOBALS["displaypg"] = $displaypg;
if(!$page)
$page = 1;
if (!$url)
{
$url = $_SERVER["REQUEST_URI"];
}
//URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; //单独取出URL的查询字串
if($url_query)
{
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
$url = str_replace($parse_url["query"], $url_query, $url);
if ($url_query)
$url .= "&page";
else
$url .= "page";
}
else
{
$url .= "?page";
}
$lastpg = ceil($totle / $displaypg); //最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page -1; //上一页
$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
$firstcount = ($page -1) * $displaypg;
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a> ";
else
$pagenav .= " 前页 ";
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a> ";
else
$pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for ($i = 1; $i <= $lastpg; $i++)
{
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n";
else
$pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
$result=mysql_query("SELECT * FROM `gbook`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
_PAGEFT($total,10);
echo $pagenav; ps: 显示第 11-19 条记录,共 19 条记录 首页 前页 后页 尾页 到第页,共 2 页 >
$result=mysql_query("SELECT *FROM `gbook` ORDER BY `id` DESC limit $firstcount,$displaypg ");
注:以后就是用来循环实现输出的
功 能:实现分页显示数据,自动传递查询参数;
<?
class pageClass
{
var $recordcount; //总记录数
var $curpage; //当前页
var $pagesize; //每页显示记录数
var $pagecount; //总页数
var $myurl; //链接地址
var $urlstr; //链接地址附带参数
function pageClass($d_count,$my_page=1,$my_pagesize)
{
$this->recordcount = $d_count;
$this->curpage = $my_page;
$this->pagesize = $my_pagesize;
$this->pagecount = ceil( $this->recordcount / $this->pagesize );
$this->myurl = $_SERVER['PHP_SELF'];
$this->urlstr = $_SERVER['QUERY_STRING'];
}
// 检测page合法性
function chk_page($page)
{
if( !(eregi("[0-9]",$page))){
$page = 1;
}
if( $page<0 ) {
$page = 1;
}
if( $page > $this->pagecount ){
$page = $this->pagecount;
}
return ($page);
}
// 重组url之后的参数
function get_urlstr()
{
$newurlstr = "";
$array = explode("&",$this->urlstr);
for($i=0 ;$i<count($array) ;$i++ )
{
if( ($array[$i]!="") && (substr($array[$i],0,4)!="page"))
{
$newurlstr .= $array[$i] . "&";
}
}
$this->urlstr = $newurlstr;
}
function get_count()
{
if( $this->pagecount < 1 )
{
$this->pagecount = 1;
}
}
// 初始化数据
function init()
{
$this->get_urlstr();
$this->pagecount = ceil( $this->recordcount / $this->pagesize );
$this->get_count();
$this->curpage = $this->chk_page( $this->curpage );
}
// 显示按钮: 总计29条记录 当前 1/3 页 首页 上一页 下一页 尾页 跳转到 页
function pageMenu()
{
$this->init();
$myurl = $this->myurl . "?" . $this->urlstr;
$pagestring = "";
$pagestring .= "<table border='0' cellspacing='0' cellpadding='0' width='100%'>\n <tr height='25'>\n";
$pagestring .= " <td></td>\n";
$pagestring .= " <td bgcolor='#80BDCB' align='right'>";
$pagestring .= "总计 ".$this->recordcount." 条记录当前 ".$this->curpage."/".$this->pagecount." 页";
if( $this->curpage == 1){
$pagestring .= "首页 上一页";
}
else{
$pagestring .= "<a href='".$myurl."page=1' class='chkpage'>首页</a> <a href='".$myurl."page=".($this->curpage-1)."' class='chkpage'>上一页</a>";
}
if( ( $this->curpage == $this->pagecount ) || ( $this->pagecount == 1 ) ){
$pagestring .= " 下一页 尾页";
}
else{
$pagestring .= " <a href='".$myurl."page=".($this->curpage+1)."' class='chkpage'>下一页</a> <a href='".$myurl."page=".$this->pagecount."' class='chkpage'>尾页</a>";
}
$pagestring .= "跳转到\n <select name=\"chg_go\" onchange=\"window.location.href='".$myurl."page='+this.value;\">\n";
for($a=1;$a<=$this->pagecount;$a++){
if( $a == $this->curpage ){
$pagestring .= " <option value=\"".$a."\" selected>".$a."</option>\n";
}
else{
$pagestring .= " <option value=\"".$a."\">".$a."</option>\n";
}
}
$pagestring .= " </select>\n 页</td>\n</tr>\n</table>";
print ($pagestring);
}
}
?>