class page { /** * config ,public */ var $page_name="PB_page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page var $next_page='>';//下一页 var $pre_page='<';//上一页 var $first_page='First';//首页 var $last_page='Last';//尾页 var $pre_bar='<<';//上一分页条 var $next_bar='>>';//下一分页条 // var $format_left='['; // var $format_right=']'; var $format_left=' '; var $format_right=' '; var $is_ajax=false;//是否支持AJAX分页模式
/** * private * */ var $pagebarnum=15;//控制记录条的个数。 var $totalpage=0;//总页数 var $ajax_action_name='';//AJAX动作名 var $nowindex=1;//当前页 var $url="";//url地址头 var $offset=0;
/** * constructor构造函数 * * @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']... */ function page($array) { if(is_array($array)){ if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param of total'); $total=intval($array['total']); $perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10; $nowindex=(array_key_exists('nowindex',$array))?intval($array['nowindex']):''; $url=(array_key_exists('url',$array))?$array['url']:''; }else{ $total=$array; $perpage=10; $nowindex=''; $url=''; } if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total.' is not a positive integer!'); if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.' is not a positive integer!'); if(!empty($array['page_name']))$this->set('page_name',$array['page_name']);//设置pagename $this->_set_nowindex($nowindex);//设置当前页 $this->_set_url($url);//设置链接地址 $this->totalpage=ceil($total/$perpage); $this->offset=($this->nowindex-1)*$perpage; if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//打开AJAX模式 } /** * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception * * @param string $var * @param string $value */ function set($var,$value) { if(in_array($var,get_object_vars($this))) $this->$var=$value; else { $this->error(__FUNCTION__,$var." does not belong to PB_Page!"); }
//$conn=new DBConn(); //$db=$conn->openConnection(); //$str = "select * from news_info order by id desc"; //$prep = $db->prepare($str); //$prep->execute();
// 构造sql语句 $sql = "select * from news_info order by id desc";
//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:
if(!function_exists(pageft)){ //定义函数pageft(),三个参数的含义为:
//$totle:信息总数;
//$displaypg:每页显示信息数,这里设置为默认是20;
//$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。
// 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。
function pageft($totle,$displaypg=20,$url=''){//定义几个全局变量:
//$page:当前页码;
//$firstcount:(数据库)查询的起始项;
//$pagenav:页面导航条代码,函数内部并没有将它输出;
//$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
global $page,$firstcount,$pagenav,$_SERVER;//为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
$GLOBALS["displaypg"]=$displaypg;if(!$page) $page=1;//如果$url使用默认,即空值,则赋值为本页URL:
if(!$url){ $url=$_SERVER["REQUEST_URI"];}//URL分析:
$parse_url=parse_url($url);
$url_query=$parse_url["query"]; //单独取出URL的查询字串
if($url_query){
//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
//这里用到了正则表达式,请参考“PHP中的正规表达式”(http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html)
$url_query=ereg_replace("(^|&)page=$page","",$url_query);//将处理后的URL的查询字串替换原来的URL的查询字串:
$url=str_replace($parse_url["query"],$url_query,$url);//在URL后加page查询信息,但待赋值:
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 条记录<BR>";//如果只有一页则跳出函数:
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 页";
}
}
?>
分页对象设计帖子由 paanjoyfy_phpbb » 2009-04-08 11:33
一个简洁的分页类:
/**
* Class FreeY_Page_Model
*
* @category
* @package
* @subpackage
* @copyright
* @license
*/
class FreeY_Page_Model
{
/**
* var
*/
private $page_array = null;
/**
* var
*/
private $page = null;
/**
* var
*/
private $count = null;
/**
* var
*/
private $page_count = null;
/**
* var
*/
private $size = null;
/**
* var
*/
private $page_next = null;
/**
* var
*/
private $page_back = null;
/**
* var
*/
private $size_max = 10000;
/**
* _method
*
* @param $var
* @return viod
*/
public function __construct($count, $page, $size = 9)
{
$this->count = $count;
$this->page = $page;
$this->size = $size;
$this->_setSize();
$this->_setCount();
$this->_setPageCount();
$this->_setPage();
}/**
* _method
*
* @param $var
* @return viod
*/
public function getPageArray()
{
$this->_setPageArray();
return $this->page_array;
}protected function _setPageArray()
{
$this->_setPageNext();
$this->_setPageBack();$page['size'] = $this->size;
$page['count'] = $this->count;
$page['page_count'] = $this->page_count;
$page['page'] = $this->page;
$page['page_back'] = $this->page_back;
$page['page_next'] = $this->page_next;
$page['pages'] = $this->getPagePages();$this->page_array = $page;
}/**
* _setSize
*
* @param $var
* @return viod
*/
private function _setSize()
{
$this->size = intval($this->size);
if($this->size < 1)
$this->size = 1;
if($this->size > $this->size_max)
$this->page = $this->size_max;
}/**
* _setCount
*
* @param $var
* @return viod
*/
private function _setCount()
{
$this->count = intval($this->count);
}/**
* _setPageCount
*
* @param $var
* @return viod
*/
private function _setPageCount()
{
$this->page_count = ceil( $this->count / $this->size);
$this->page_count = intval($this->page_count);
if($this->page_count < 1)
$this->page_count = 1;
}/**
* _setPage
*
* @param $var
* @return viod
*/
private function _setPage()
{
$this->page = intval($this->page);
if($this->page < 1)
$this->page = 1;
if($this->page_count < $this->page)
$this->page = $this->page_count;
}/**
* _setPageNext
*
* @param $var
* @return viod
*/
private function _setPageNext()
{
if($this->page == $this->page_count)
return ;
$this->page_next = $this->page + 1;
}/**
* _setPageBack
*
* @param $var
* @return viod
*/
private function _setPageBack()
{
if($this->page == 1)
return ;
$this->page_back = $this->page - 1;
}}
//file end--------------------------------------------------------->
?>在这个的基础上可以增加分页helper.FreeY_Page_Helper_Db, FreeY_Page_Helper_View.
/**
* filename: pager.class.php
* @package:phpbean
* @author :feifengxlq<feifengxlq#gmail.com>
* @copyright :Copyright 2006 feifengxlq
* @license:version 2.0
* @create:2006-5-31
* @modify:2006-6-1
* @modify:feifengxlq 2006-11-4
* @staryjk 2008-09-22
* 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5,
* example:
* 模式四种分页模式:
require_once('../libs/classes/page.class.php');
$page=new page(array('total'=>1000,'perpage'=>20));
echo 'mode:1<br>'.$page->show();
echo '<hr>mode:2<br>'.$page->show(2);
echo '<hr>mode:3<br>'.$page->show(3);
echo '<hr>mode:4<br>'.$page->show(4);
开启AJAX:
$ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
echo 'mode:1<br>'.$ajaxpage->show();
采用继承自定义分页显示模式:
*/
//在下页
{
/**
* config ,public
*/
var $page_name="PB_page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page
var $next_page='>';//下一页
var $pre_page='<';//上一页
var $first_page='First';//首页
var $last_page='Last';//尾页
var $pre_bar='<<';//上一分页条
var $next_bar='>>';//下一分页条
// var $format_left='[';
// var $format_right=']';
var $format_left=' ';
var $format_right=' ';
var $is_ajax=false;//是否支持AJAX分页模式
/**
* private
*
*/
var $pagebarnum=15;//控制记录条的个数。
var $totalpage=0;//总页数
var $ajax_action_name='';//AJAX动作名
var $nowindex=1;//当前页
var $url="";//url地址头
var $offset=0;
/**
* constructor构造函数
*
* @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']...
*/
function page($array)
{
if(is_array($array)){
if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param of total');
$total=intval($array['total']);
$perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;
$nowindex=(array_key_exists('nowindex',$array))?intval($array['nowindex']):'';
$url=(array_key_exists('url',$array))?$array['url']:'';
}else{
$total=$array;
$perpage=10;
$nowindex='';
$url='';
}
if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total.' is not a positive integer!');
if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.' is not a positive integer!');
if(!empty($array['page_name']))$this->set('page_name',$array['page_name']);//设置pagename
$this->_set_nowindex($nowindex);//设置当前页
$this->_set_url($url);//设置链接地址
$this->totalpage=ceil($total/$perpage);
$this->offset=($this->nowindex-1)*$perpage;
if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//打开AJAX模式
}
/**
* 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
*
* @param string $var
* @param string $value
*/
function set($var,$value)
{
if(in_array($var,get_object_vars($this)))
$this->$var=$value;
else {
$this->error(__FUNCTION__,$var." does not belong to PB_Page!");
}
}
/**
* 打开倒AJAX模式
*
* @param string $action 默认ajax触发的动作。
*/
function open_ajax($action)
{
$this->is_ajax=true;
$this->ajax_action_name=$action;
}
/**
* 获取显示"下一页"的代码
*
* @param string $style
* @return string
*/
function next_page($style='')
{
if($this->nowindex<$this->totalpage){
return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);
}
return '<span class="'.$style.'">'.$this->next_page.'</span>';
}
/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
function pre_page($style='')
{
if($this->nowindex>1){
return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
}
return '<span class="'.$style.'">'.$this->pre_page.'</span>';
}
//在下页
?>
* 获取显示“首页”的代码
*
* @return string
*/
function first_page($style='')
{
if($this->nowindex==1){
return '<span class="'.$style.'">'.$this->first_page.'</span>';
}
return $this->_get_link($this->_get_url(1),$this->first_page,$style);
}
/**
* 获取显示“尾页”的代码
*
* @return string
*/
function last_page($style='')
{
if($this->nowindex==$this->totalpage){
return '<span class="'.$style.'">'.$this->last_page.'</span>';
}
return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
}
function nowbar($style='',$nowindex_style='')
{
$plus=ceil($this->pagebarnum/2);
if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);
$begin=$this->nowindex-$plus+1;
$begin=($begin>=1)?$begin:1;
$return='';
for($i=$begin;$i<$begin+$this->pagebarnum;$i++)
{
if($i<=$this->totalpage){
if($i!=$this->nowindex)
$return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));
else
$return.=$this->_get_text('<span class="'.$nowindex_style.'">'.$i.'</span>');
}else{
break;
}
$return.="\n";
}
unset($begin);
return $return;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select()
{
$return='<select name="PB_Page_Select">';
for($i=1;$i<=$this->totalpage;$i++)
{
if($i==$this->nowindex){
$return.='<option value="'.$i.'" selected>'.$i.'</option>';
}else{
$return.='<option value="'.$i.'">'.$i.'</option>';
}
}
unset($i);
$return.='</select>';
return $return;
}
/**
* 获取mysql 语句中limit需要的值
*
* @return string
*/
function offset()
{
return $this->offset;
}
/**
* 控制分页显示风格(你可以增加相应的风格)
*
* @param int $mode
* @return string
*/
function show($mode=1)
{
switch ($mode)
{
case '1':
$this->next_page='下一页';
$this->pre_page='上一页';
return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select().'页';
break;
case '2':
$this->next_page='下一页';
$this->pre_page='上一页';
$this->first_page='首页';
$this->last_page='尾页';
return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this->last_page().'第'.$this->select().'页';
break;
case '3':
$this->next_page='下一页';
$this->pre_page='上一页';
$this->first_page='首页';
$this->last_page='尾页';
return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
break;
case '4':
$this->next_page=' 下一页 ';
$this->pre_page=' 上一页 ';
$this->first_page=' 首页 ';
$this->last_page=' 尾页 ';
return $this->first_page().$this->pre_page()."<div class=\"pagenavi\" id=\"lopage\">".$this->nowbar()."</div>".$this->next_page().$this->last_page();
break;
case '5':
return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar();
break;
}
}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url)){
//手动设置
$this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";
}else{
//自动获取
if(empty($_SERVER['QUERY_STRING'])){
//不存在QUERY_STRING时
$this->url=$_SERVER['REQUEST_URI']."?".$this->page_name."=";
}else{
//
if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){
//地址存在页面参数
$this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_SERVER['REQUEST_URI']);
$last=$this->url[strlen($this->url)-1];
if($last=='?'||$last=='&'){
$this->url.=$this->page_name."=";
}else{
$this->url.='&'.$this->page_name."=";
}
}else{
//
$this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'=';
}//end if
}//end if
}//end if
}
/**
* 设置当前页面
*
*/
function _set_nowindex($nowindex)
{
if(empty($nowindex)){
//系统获取
if(isset($_GET[$this->page_name])){
$this->nowindex=intval($_GET[$this->page_name]);
}
}else{
//手动设置
$this->nowindex=intval($nowindex);
}
}
/**
* 为指定的页面返回地址值
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno=1) {
return $this->url.$pageno;
}
/**
* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
*
* @param String $str
* @return string $url
*/
function _get_text($str)
{
return $this->format_left.$str.$this->format_right;
}
/**
* 获取链接地址
*/
function _get_link($url,$text,$style=''){
$style=(empty($style))?'':'class="'.$style.'"';
if($this->is_ajax){
//如果是使用AJAX模式
return '<a '.$style.' href="javascript:'.$this->ajax_action_name.'(\''.$url.'\')">'.$text.'</a>';
}else{
return '<a '.$style.' href="'.$url.'">'.$text.'</a>';
}
}
/**
* 出错处理方式
*/
function error($function,$errormsg)
{
die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);
}
}
//自定义风格
class mypage extends page
{
function mypage($array)
{
parent::page($array);
$this->first_page=1;
$this->last_page=$this->totalpage; }
function show()
{
$pagestr='<div class="pagenavi" id="lopage">页:';
$pagestr.=$this->first_page().' ';
$pagestr.=$this->nowbar('','curr');
$pagestr.='<span class="break">...</span>';
$pagestr.=$this->last_page();
$pagestr.=' (总计<span class="num">'.$this->totalpage.'</span>页) </div>';
$pagestr.='</div>';
return $pagestr;
}
}
我写了两个方式,一个是php内嵌的分页,一个是smarty插件的分页,我就不贴了,浪费空间
1)两个函数
<?
//分页函数 function genpage(&$sql,$page_size=2)
{
global $prepage,$nextpage,$pages,$sums; //out param
$page = $_GET["page"];
$eachpage = $page_size;
$pagesql = strstr($sql," from ");
$pagesql = "select count(*) as ids ".$pagesql;
$conn = mysql_query($pagesql) or die(mysql_error());
if($rs = mysql_fetch_array($conn)) $sums = $rs[0];
$pages = ceil(($sums-0.5)/$eachpage)-1;
$pages = $pages>=0?$pages:0;
$prepage = ($page>0)?$page-1:0;
$nextpage = ($page<$pages)?$page+1:$pages;
$startpos = $page*$eachpage;
$sql .=" limit $startpos,$eachpage ";
}
//显示分页
function showpage()
{
global $page,$pages,$prepage,$nextpage,$queryString; //param from genpage function
$shownum =10/2;
$startpage = ($page>=$shownum)?$page-$shownum:0;
$endpage = ($page+$shownum<=$pages)?$page+$shownum:$pages;
echo "共".($pages+1)."页: ";
if($page>0)echo "<a href=$PHP_SELF?page=0$queryString>首页</a>";
if($startpage>0)
echo " ... <b><a href=$PHP_SELF?page=".($page-$shownum*2)."$queryString>«</a></b>";
for($i=$startpage;$i<=$endpage;$i++)
{
if($i==$page) echo " <b>[".($i+1)."]</b> ";
else echo " <a href=$PHP_SELF?page=$i$queryString>".($i+1)."</a> ";
}
if($endpage<$pages)
echo "<b><a href=$PHP_SELF?page=".($page+$shownum*2)."$queryString>»</a></b> ... ";
if($page<$pages)
echo "<a href=$PHP_SELF?page=$pages$queryString>尾页</a>";} //显示带分类的分页
function showpage1()
{
$fenlei=$_GET["fenleiid"];
global $page,$pages,$prepage,$nextpage,$queryString; //param from genpage function
$shownum =10/2;
$startpage = ($page>=$shownum)?$page-$shownum:0;
$endpage = ($page+$shownum<=$pages)?$page+$shownum:$pages;
echo "共".($pages+1)."页: ";
if($page>0)echo "<a href=$PHP_SELF?fenleiid=$fenlei&page=0$queryString>首页</a>";
if($startpage>0)
echo " ... <b><a href=$PHP_SELF?fenleiid=$fenlei&page=".($page-$shownum*2)."$queryString>«</a></b>";
for($i=$startpage;$i<=$endpage;$i++)
{
if($i==$page) echo " <b>[".($i+1)."]</b> ";
else echo " <a href=$PHP_SELF?fenleiid=$fenlei&page=$i$queryString>".($i+1)."</a> ";
}
if($endpage<$pages)
echo "<b><a href=$PHP_SELF?fenleiid=$fenlei&page=".($page+$shownum*2)."$queryString>»</a></b> ... ";
if($page<$pages)
echo "<a href=$PHP_SELF?fenleiid=$fenlei&page=$pages$queryString>尾页</a>";}
?>2)两个调用
第一个
<?php
$sql="select * from liuyan order by ly_id desc";
genpage($sql); //只需要正常代码加上这一行就ok。
$conn=mysql_query($sql,$connec);
while($rs=mysql_fetch_array($conn)){
?>
第二个
<?php
}
?>
<?php
showpage(); //显示页
?>
<?php
mysql_close();
?>
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="book.css" type="text/css">
</HEAD>
<body>
<center>
<?php include("top.php"); ?><table width="760" border=0 cellspacing=0 cellpadding=0 align=center bgcolor="#FFFFFF" class="grayline">
<tr><td align=center height=50>
<table border="0" width="100%" id="table1" height="165">
<tr>
<td>
<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" border="0" width="752" height="160">
<param name="movie" value="IMAGES/flash.swf">
<param name="quality" value="High">
<param name="scale" value="ExactFit">
<param name="wmode" value="transparent">
<embed src="IMAGES/flash.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="752" height="160" quality="High" scale="ExactFit" wmode="transparent"></object> </td>
</tr>
</table>
<table border="0" width="100%" id="table2">
<tr>
<td background="IMAGES/indextop.gif">
<p align="center"> <a href=write.php>我要写留言</a> <a href=index.php>浏览留言</a></td>
</tr>
</table>
<p></td></tr>
<tr><td><?
include 'dbhelper.php';
if($_REQUEST["textfield"]=="")
{
$rs=mssql_query("select username, email, url, content, face, portrait, ip,convert(varchar,dt,120) as dt from words");
}
else
{
$username=$_REQUEST["textfield"];
$rs=mssql_query("select username, email, url, content, face, portrait, ip,convert(varchar,dt,120) as dt from words where username='$username'");
}
if(mssql_num_rows($rs)==0)
{
?>
<script type="text/javascript">
alert("没有查询到你要找的内容!");
</script>
<?
$rs=mssql_query("select username, email, url, content, face, portrait, ip,convert(varchar,dt,120) as dt from words");
}
//每页几行
$pagesize=3;
//共分几页
$pagecount=ceil(mssql_num_rows($rs)/$pagesize);
//判断有没有值
//$page=1;
//if(isset($_GET["page"]))
//$page=$_GET["page"];
if($_GET["page"]<1)
{
$page=1;
}
if ($_GET["page"]>$pagecount)
{
$page=$pagecount;
}
if (0<$_GET["page"]&&$_GET["page"]<($pagecount+1))
{
$page=$_GET["page"];
}?><table cellSpacing="1" cellPadding="3" width="680" align="center" bgColor="#000000" border="0" style="word-break:break-all"><?
//游标指针的位置
mssql_data_seek($rs,($page-1)*$pagesize);
for($i=0;$i<$pagesize;$i++)
{
$as=mssql_fetch_array($rs);
if($as==false)
{
break;
}
?>
<tr>
<td vAlign="top" width="25%" bgColor="#f7f7f7" rowSpan="2" align=center>
<table border=0 width=85%><tr><td align=center></td>
</tr>
<tr>
<td><img border=0 src="images/face/pic<? echo $as["portrait"]; ?>.gif" width=60><br>
姓名:<?echo $as["username"]; ?><br>
来自:whitehouse<br>
邮件:<a href=mailto:<?echo $as["email"]; ?>><img src=images/mail.gif border=0 alt=""></a><?echo $as["email"]; ?><br>
主页:<a target='_blank' href=#><img src=images/home.gif border=0 alt=""></a><?echo $as["url"]; ?></td></tr>
</table> </td>
<td width="75%" height="20" bgColor="#ffffff">发表于:<? echo $as[dt]; ?></td>
</tr>
<tr>
<td vAlign="top" bgColor="#ebebeb" width='75%' height=120 onMouseOver="bgColor='#FFffff'" onMouseOut="bgColor='#ebebeb'"><img bord=0 src="images/face/face<? echo $as["face"]; ?>.gif"><?echo htmlspecialchars($as["content"]); ?>
</td>
</tr>
<?
}
?>
</table><div>
<form>
<div align="center">
<p>
<?
if($page!=1)
{
?>
<a href=index.php?page=1>首页</a>|<a href=index.php?page=<? echo $page-1; ?>>上页</a><? } ?>
<?
if ($page!=$pagecount){
?>
<a href=index.php?page=<? echo $page+1; ?>>下页</a>|<a href=index.php?page=<? echo $pagecount; ?>>尾页</a><? } ?> 跳到第
<label>
<input name="page" type="text" size="4">
</label>
页 当前<? echo $page."/".$pagecount;?></p>
<p> </p>
</div></form>
</div><!--关于显示留言内容代码-->
<form name="form1" method="post" action="index.php">
<div align="center">根据主题搜索:
<input type="text" name="textfield">
<input type="submit" name="Submit" value="搜索">
</div>
</form>
<table cellSpacing="0" cellPadding="0" width="680" align="center" bgColor="#FFFFFF" border="0">
<TR><TD height=8> </TD></TR></TABLE></td>
</tr></table>
<?php include("down.php"); ?></center>
</body></html>
<?phpclass DBConn {
private $db;
public function openConnection(){
$dsn = "mysql:host=localhost;dbname=user";
$this->db = new PDO($dsn,'root','',array(PDO::ATTR_PERSISTENT=>true));
return $this->db;
}
public function closeConnection(){
$this->db = null;
}
}?>执行数据库查询的文件(DoPage.php)
<?php
// 加载文件
require 'DBConn.php';
class DoPage {
//连接数据库的主机名
private $host="localhost";
//连接数据库的用户名
private $username="root";
//连接数据库的密码
private $password="";
//所要操作的数据库的名称
private $dbname="user";
// 获得数据库连接
public function getConnection(){
// 获取数据库连接
$conn=mysql_connect($this->host,$this->username,$this->password) or die("数据库连接失败");
// 选择所用的数据库
mysql_select_db($this->dbname,$conn);
// 返回数据库连接
return $conn;
}
// 获得记录的总记录数
public function getRCount_sql($sql){
// 获得连接
$conn=$this->getConnection();
// 执行sql语句
$result=mysql_query($sql,$conn);
// 初始化$rowsCount
$rowsCount=0;
// 判断结果集中是否有多条记录
while($row=mysql_fetch_array($result)){
// 将结果集放在一个数组中
$arr[]=$row;
// 获得总记录数
$rowsCount=count($arr);
}
// 释放$result
mysql_free_result($result);
// 返回结果集的总记录数目
return $rowsCount;
}
// 执行分页查询
public function queryPage($sql,$currentPage,$pageSize){
// 判断传入的每页显示的信息条数是不是一个合法的数字
if($pageSize<1)
// 如果每页显示的数字不合法,则将$pageSize的值设为12(合法的数字)
$pageSize=12;
// 判断传入的当前页的数字是不是一个合法的数字
if($currentPage<1)
// 如果当前页不是一个合法的数字,则将$currentPage的值设为1(合法的数字)
$currentPage=1;
// 设置分页显示的sql语句
$sql.=" limit ".$pageSize." offset ".($currentPage-1)*$pageSize;
// 创建一个数组
$data=array();
// 获得数据库连接
$conn=$this->getConnection();
// 执行sql语句
$result=mysql_query($sql,$conn);
// 判断结果集中是不是有多条记录
while($row=mysql_fetch_array($result)){
// 将结果集放在一个数组中
$data[]=$row;
}
// 释放结果集
mysql_free_result($result);
// 返回$data
return $data;
}
}?>
构造 “首页 上一页 下一页 末页”的文件(PageUtil.php)<?php
// 该类的作用是为了构造出“首页 上一页 下一页 末页”的字符串
class PageUtil {
// 初始化总记录数
private $rowsCount=0;
// 每页显示的信息数
private $perPage=12;
// 初始化当前页数
private $currentPage=1;
// 设置要进行分页的页面
private $pageName;
// 设置连接的参数
private $extParams;
// 构造“首页 上一页 下一页 末页”的字符串
public static function formatPage($rowsCount,$pageSize,$currentPage,$pageName,$extParams){
// 判断当前页数是不是一个合法的页数
if($currentPage<1)
// 如果不是一个合法的页数,则将当前页设置为1(合法的页数)
$currentPage=1;
// 判断每页显示的信息数目是不是一个合法的数
if($pageSize<1)
// 如果不是一个合法的数字,则将每页显示的信息数目设置为12(合法的数字)
$pageSize=12;
// 设置总页数。intval()的作用是取整
$pageCounts=intval($rowsCount/$pageSize);
// 判断总页数是不是一个合法的页数
if($pageCounts<1)
// 如果总页数小于1,则将总页数设置为1
$pageCounts=1;
// 如果总页数是一个合法的页数
// $pageCounts*$pageSiz是总记录数
// $rowsCount是总记录数
// ($pageCounts*$pageSize)<$rowsCount的值为真,则$pageCounts+1。要是不为真,则为$pageCounts
// (这个三木运算符是为了判断$rowsCount/$pageSize是不是能够整除,要是不整除,说明总页数比$pageCounts大1)
$pageCounts=($pageCounts*$pageSize)<$rowsCount?($pageCounts+1):$pageCounts;
// 构造一个空的字符串
$buffer="";
//isset($extParams)是为了判断是不是存在$extParams变量 并且判断该变量的长度是不是大于1
if(isset($extParams)&& strlen(trim($extParams))>1){
$extParams="&".$extParams;
}
// 当当前页数是1时,则构造“首页 上一页”,并且这他们不存在连接
if($currentPage==1){
$buffer.="首页 ";
$buffer.="上一页 ";
}
// 如果当前页数不是第一页,则构造“首页 上一页”,并且他们存在连接
else{
$buffer.="<a href=\"".$pageName."?page=1".$extParams."\">首页</a> ";
$buffer.="<a href=\"".$pageName."?page=".($currentPage-1).$extParams."\">上一页</a> ";
}
// 判断当前页数是不是大于或者等于总页数
if($currentPage>=$pageCounts){
// 如果当前页数大于或者等于总页数,则构造“下一页 末页”,并且他们不存在连接
$buffer.="下一页 ";
$buffer.="末页 ";
}
// 如果当前页小于总页数,构造“下一页 末页”,并且他们存在连接
else{
$buffer.="<a href=\"".$pageName."?page=".($currentPage+1).$extParams."\">下一页</a> ";
$buffer.="<a href=\"".$pageName."?page=".$pageCounts.$extParams."\">末页</a>";
}
// 返回该字符串
return "<span>共检索出<span>".$rowsCount."</span>条信息,每页<span>".$pageSize."</span>条,页次:<span>".$currentPage."</span>/<span>".$pageCounts."</span> </span>".$buffer;
}
}?>实现分页的文件(index.php)<?php
// 启动session
session_start();
$_SESSION['username']=$_GET['username'];
// 引入文件
include_once 'opPanelbar.php';
include_once 'conn/DoPage.php';
include_once 'conn/PageUtil.php';
// 创建对象
$service=new DoPage();
//$conn=new DBConn();
//$db=$conn->openConnection();
//$str = "select * from news_info order by id desc";
//$prep = $db->prepare($str);
//$prep->execute();
// 构造sql语句
$sql = "select * from news_info order by id desc";
$currentPage=$_REQUEST['page'];
if(!isset($currentPage))
$currentPage=1;
$pageSize=12;
$rowsCount=$_REQUEST['rowsCount'];
if(!isset($rowsCount))
$rowsCount=$service->getRCount_sql($sql);
$pageName="index.php";
$extParams="rowsCount=$rowsCount";
$pageLine=PageUtil::formatPage($rowsCount,$pageSize,$currentPage,$pageName,$extParams);
$pageData=$service->queryPage($sql,$currentPage,$pageSize);
?>
<html>
<head>
<title>新闻显示页面</title>
<link href="../style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="loadPageIconButton"><a href="edit_news.php?act=add"><img src="images/button_add_news.gif" /></a></div>
<div align="center">
<table border=1 align="center" width="100%" cellpadding="0" cellspacing="1" bgcolor="#FFFFFF">
<tr class="info_list_header">
<td>标题</td>
<td>类型 </td>
<td>新闻记者</td>
<td>发布时间</td>
<td>操作</td>
</tr>
<?php
$rowcounts=count($pageData);
$step=0;
for($i=0;$i<$rowcounts;$i++){
$row=$pageData[$i];
$step++;
?>
<tr class="info_list_body" onmouseover="this.className='info_list_body_hover'"
onmouseout="this.className='info_list_body'">
<td><?php echo $row['niTitle'] ?></td>
<td><?php echo $row['niType'] ?></td>
<td><?php echo $row['niAuthor'] ?></td>
<td><?php echo $row['niTime'] ?></td>
<td>
<a href="show.php?id=<?php echo $row['id']?>" target="_blank">查看</a>
<a href="edit_news.php?act=edit&id=<?php echo $row['id']?>">编辑</a>
<a href="edit_news.php?act=delete&id=<?php echo $row['id']?>" onclick="return confirm('确认删除?');">删除</a>
</td>
<?php }
for($i=$step;$i<$pageSize;$i++){
?>
<tr class="info_list_body">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<?php
}
?>
<tr class="info_list_page">
<td colspan="6"><?php echo $pageLine?></td>
</tr>
</table>
<?php
include_once("../footer.php");
?>
</body>
</html>