<code><?php<br />/*********************************************<br />TOracleViewPage v 2.0<br />日期:2000-9-23<br />分页显示Oracle数据库记录的类<br />更新日期:2000-10-19<br />增加显示TopRecord的功能,允许第一页显示的记录数与其它页不同。<br />作者:sharetop<br />email:ycshowtop@21cn.com<br />***********************************************/<br />class TOracleViewPage {<br />var $Table; //表名<br />var $MaxLine; //每页显示行数<br />var $LinkId; //数据库连接号<br />var $Id; //排序参考字段<br />var $Offset; //记录偏移量<br />var $Total; //记录总数<br />var $Number; //本页读取的记录数<br />var $TopNumber;//读新记录时实际取出的记录数<br />var $Result; //读出的结果<br />var $TopResult;//读新记录时的结果<br />var $TheFirstPage;//特殊指定第一页的链接<br />var $StartRec; //指定第二页的起始记录号<br />var $TPages; //总页数<br />var $CPages; //当前页数<br />var $TGroup;<br />var $PGroup; //每页显示的页号个数<br />var $CGroup;<br />var $Condition; //显示条件 如:where id='$id' order by id desc<br />var $PageQuery; //分页显示要传递的参数<br />//-------------------------------------<br />// 以下构造函数、析构函数及初始化函数<br />//-------------------------------------<br />//构造函数<br />//参数:表名、最大行数、分页参考的字段、每页显示的页号数<br />function TOracleViewPage($TB,$ML,$id){<br />global $offset;<br />$this->Table=$TB;<br />$this->MaxLine=$ML;<br />$this->Id=$id;<br />$this->StartRec=0;<br />if(isset($offset)) $this->Offset=$offset;<br />else $this->Offset=0;<br />$this->Condition="";<br />$this->TheFirstPage=NULL;<br />$this->PageQury=NULL;<br />}<br />//初始化<br />//参数:用户名、密码、数据库<br />function InitDB($user,$password,$db){<br />if (PHP_OS == "WINNT") $dllid=dl("php3_oci80.dll");<br />$this->LinkId = OCILogon($user,$password,$db);<br />}<br />//断开<br />function Destroy(){<br />OCILogoff($this->LinkId);<br />}<br />//-------------------------<br />// Set 函数<br />//-------------------------<br />//设置显示条件<br />//如:where id='$id' order by id desc<br />//要求是字串,符合SQL语法(本字串将加在SQL语句后)<br />function SetCondition($s){<br />$this->Condition=$s;<br />}<br />//设置每组的显示个数<br />function SetNumGroup($pg){<br />$this->PGroup=$pg;<br />}<br />//设置首页,如无则为NULL<br />function SetFirstPage($fn){<br />$this->TheFirstPage=$fn;<br />}<br />//设置起始记录,如无则取默认0<br />function SetStartRecord($org){<br />$this->StartRec=$org;<br />}<br />//设置传递参数<br />// key参数名 value参数值<br />// 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。<br />function SetPageQuery($key,$value){<br />$tmp[key]=$key; $tmp[value]=$value;<br />$this->PageQuery[]=$tmp;<br />}<br />//--------------------------------<br />// Get 函数<br />//--------------------------------<br />//取记录总数<br />function GetTotalRec(){<br />$SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition;<br />$stmt = OCIParse($this->LinkId,$SQL);<br />$bool = OCIExecute($stmt);<br />if (!$bool) {<br />echo "连接失败!";<br />OCILogoff($this->LinkId);<br />exit;<br />}<br />else {<br />OCIFetch($stmt);<br />$this->Total=OCIResult($stmt,1);<br />}<br />OCIFreeStatement($stmt);<br />}<br />//取总页数、当前页<br />function GetPage(){<br />$this->TPages=ceil($this->Total/$this->MaxLine);<br />$this->CPages=ceil($this->Offset/$this->MaxLine)+1;<br />}<br />//取总组数、当前组<br />function GetGroup() {<br />$this->TGroup=ceil($this->TPages/$this->PGroup);<br />$this->CGroup=ceil($this->CPages/$this->PGroup);<br />}<br />//--------------------------------<br />// 工作函数<br />//--------------------------------<br />//读取记录<br />// 主要工作函数,根据所给的条件从表中读取相应的记录<br />// 返回值是一个二维数组,Result[记录号][字段名]<br />function ReadList() {<br />$SQL="SELECT * FROM ".$this->Table." ".$this->Condition." ORDER BY ".$this->Id." DESC";<br />$stmt = OCIParse($this->LinkId,$SQL);<br />$bool = OCIExecute($stmt);<br />if (!$bool) {<br />echo "连接失败!";<br />OCILogoff($this->LinkId);<br />exit;<br />}<br />else {<br />$ncols = OCINumCols($stmt);<br />for ( $i = 1; $i <= $ncols; $i++ )<br />$column_name[$i] = OCIColumnName($stmt,$i);<br />$k=0;<br />for($j=0;$j<$this->StartRec+$this->Offset;$j++) OCIFetch($stmt);<br />for($j=0;$j<$this->MaxLine;$j++){<br />if(OCIFetch($stmt)){<br />$k++;<br />for($i=1;$i<=$ncols;$i++)<br />$temp[$column_name[$i]]=OCIResult($stmt,$i);<br />$this->Result[]=$temp;<br />}<br />else break;<br />}<br />$this->Number=$k;<br />}<br />OCIFreeStatement($stmt);<br />return $this->Result;<br />}<br />//读最新的记录<br />//topnum指定要读出的记录数<br />function ReadTopList($topnum){<br />$SQL="SELECT * FROM ".$this->Table." ".$this->Condition." ORDER BY ".$this->Id." DESC";<br />$stmt = OCIParse($this->LinkId,$SQL);<br />$bool = OCIExecute($stmt);<br />if (!$bool) {<br />echo "连接失败!";<br />OCILogoff($this->LinkId);<br />exit;<br />}<br />else {<br />$ncols = OCINumCols($stmt);<br />for ( $i = 1; $i <= $ncols; $i++ )<br />$column_name[$i] = OCIColumnName($stmt,$i);<br />$k=0;<br />for($j=0;$j<$topnum;$j++){<br />if(OCIFetch($stmt)){<br />$k++;<br />for($i=1;$i<=$ncols;$i++)<br />$temp[$column_name[$i]]=OCIResult($stmt,$i);<br />$this->TopResult[]=$temp;<br />}<br />else break;<br />}<br />$this->TopNumber=$k;<br />}<br />OCIFreeStatement($stmt);<br />return $this->TopResult;<br />}<br />//---------------------------<br />// 分页相关<br />//---------------------------<br />//显示当前页及总页数<br />//本函数在GetPage()后调用。<br />function ThePage() {<br />echo "第".$this->CPages."页/共".$this->TPages."页";<br />}<br />//显示翻页按钮<br />//此函数要在GetPage()函数之后调用<br />//显示下页、上页,并加上要传递的参数<br />function Page() {<br />$k=count($this->PageQuery);<br />$strQuery=""; //生成一个要传递参数字串<br />for($i=0;$i<$k;$i++){<br />$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];<br />}<br />return $strQuery;<br />}<br />function PrePage($strQuery){<br />$prev=$this->Offset-$this->MaxLine;<br />if($prev>=0)<br />echo "<A href=$PHP_SELF?offset=".$prev.$strQuery." class=newslink>上一页</A>";<br />else if($this->TheFirstPage!=NULL)<br />echo "<A href=".$this->TheFirstPage." class=newslink>上一页</A>";<br />else echo "上一页";<br />}<br />function NexPage($strQuery){<br />$next=$this->Offset+$this->MaxLine;<br />$k=$this->Total-$this->StartRec;<br />if($next<$k)<br />echo "<A href=$PHP_SELF?offset=".$next.$strQuery." class=newslink>下一页</A>";<br />else<br />echo "下一页";<br />}<br />//------------------------------------<br />// 记录分组<br />//----------------------------------<br />//显示分组<br />function NumPage() {<br />$first=($this->CGroup-1)*($this->PGroup)+1;<br />$last=($first+$this->PGroup > $this->TPages)? ($this->TPages+1):($first+$this->PGroup);<br />$pr=($this->CGroup-2>=0)?( ($this->CGroup-2)*($this->PGroup)+1 ):(-1);<br />$prev=($pr!=-1)?( ($pr-1)*$this->MaxLine):(0);<br />$ne=($this->CGroup*$this->PGroup+1<=$this->TPages)?($this->CGroup*$this->PGroup+1):(-1);<br />$next=($ne!=-1)?( ($ne-1)*$this->MaxLine):(0);<br />$k=count($this->PageQuery);<br />$strQuery=""; //生成一个要传递参数字串<br />for($i=0;$i<$k;$i++){<br />$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];<br />}<br />if($first!=1)<br />echo "<A href=$PHP_SELF?offset=".$prev.$strQuery." > << </a>";<br />for($i=$first;$i<$last;$i++) {<br />if($this->CPages!=$i){<br />$current=($i-1)*$this->MaxLine;<br />echo "<A href=$PHP_SELF?offset=".$current.$strQuery." >".$i."</a> ";<br />}<br />else echo "<font color=#e00729>".$i."</font> ";<br />}<br />if($ne!=-1)<br />echo "<A href=$PHP_SELF?offset=".$next.$strQuery." > >> </a>";<br />}<br />//******end class<br />}<br />?></code></p>