『壹』 php怎麼實現無刷新分頁效果
php+ajax實現無刷新分頁實現方法具體如下:
limit 偏移量,長度;
limit 0,7; 第一頁
limit 7,7; 第二頁
limit 14,7; 第三頁
每頁信息條數:7
信息總條數:select count(*) from table
信息總頁數:ceil向上取整(總條數/每頁條數)
1、分頁類具體使用
<?php
class Pagination {
private $total; //數據表中總記錄數
private $listRows; //每頁顯示行數
private $limit; //mysql 資料庫的limit
private $uri; //分頁信息前面的uri地址
private $pageNum; //頁數
private $config = array('header' => "個記錄", "prev" => "【上一頁】", "next" => "【下一頁】", "first" => "【首 頁】", "last" => "【尾 頁】");
private $listNum = 8;
/*
* $total 當前信息總條數
* $listRows 每頁顯示的條數
* $pa 下面的page
http://網址/index.php?page=5
*/
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;//不傳入page,則默認顯示首頁
$this->pageNum = ceil($this->total / $this->listRows);
$this->limit = $this->setLimit();
}
//設置每頁顯示的條數
private function setLimit() {
return "Limit " . ($this->page - 1) * $this->listRows . ", {$this->listRows}";
}
//獲得URL地址
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;
}
//魔術方法,
public 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() {
$html = "";
if ($this->page == 1)
$html.=' '.$this->config["first"].' ';
else
$html.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page=1\")'>{$this->config["first"]}</a> ";
//$html.=" <a href='{$this->uri}&page=1'>{$this->config["first"]}</a> ";
return $html;
}
/*設置上一頁*/
private function prev() {
$html = "";
if ($this->page == 1)
$html.=' '.$this->config["prev"].' ';
else
$html.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page=" . ($this->page - 1) . "\")'>{$this->config["prev"]}</a> ";
//$html.=" <a href='{$this->uri}&page=".($this->page-1)."'>{$this->config["prev"]}</a> ";
return $html;
}
//頁碼列表【首頁】【2】【3】…………【尾頁】
private function pageList() {
$linkPage = "";
$inum = floor($this->listNum / 2);
for ($i = $inum; $i >= 1; $i--) {
$page = $this->page - $i;
if ($page < 1)
continue;
$linkPage.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page={$page}\")'>{$page}</a> ";
}
$linkPage.=" {$this->page} ";
for ($i = 1; $i <= $inum; $i++) {
$page = $this->page + $i;
if ($page <= $this->pageNum)
$linkPage.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page={$page}\")'>{$page}</a> ";
else
break;
}
return $linkPage;
}
/*設置下一頁*/
private function next() {
$html = "";
if ($this->page == $this->pageNum)
$html.=' '.$this->config["next"].' ';
else
$html.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page=" . ($this->page + 1) . "\")'>{$this->config["next"]}</a> ";
//$html.=" <a href='{$this->uri}&page=".($this->page + 1)."'>{$this->config["next"]}</a> ";
return $html;
}
/*設置尾頁*/
private function last() {
$html = "";
if ($this->page == $this->pageNum)
$html.=' '.$this->config["last"].' ';
else
$html.=" <a href='javascript:void(0)' onclick='showPage(\"{$this->uri}&page=" . ($this->pageNum) . "\")'>{$this->config["last"]}</a> ";
//$html.=" <a href='{$this->uri}&page=.(this->pageNum).'>{$this->config["last"]}</a> ";
return $html;
}
/*設置頁面跳轉*/
private function goPage() {
return
' <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;showPage(\'' . $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;showPage(\'' . $this->uri . '&page=\'+page+\'\')"> ';
}
//頁面列表配置選項
function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8)) {
$html[0] = " 共有<b>{$this->total}</b>{$this->config["header"]} ";
$html[1] = " 每頁顯示<b>" . ($this->end() - $this->start() + 1) . "</b>條,本頁<b>{$this->start()}-{$this->end()}</b>條 ";
$html[2] = " <b>{$this->page}/{$this->pageNum}</b>頁 ";
$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;
}
}
2 數據顯示
<?php
//鏈接資料庫
//獲得具體信息
//分頁顯示
header("content-type:text/html;charset=utf-8");
$link = mysql_connect('localhost','root','111111');
mysql_select_db('shop', $link);
mysql_query("set names utf8");
$css = <<<eof
<style type="text/css">
table {border:1px solid black; width:700px; margin:auto; border-collapse:collapse;}
td {border:1px solid black; }
</style>
eof;
echo $css;
echo "
<table>
<tr><td>序號</td><td>名稱</td><td>數量</td><td>價格</td><td>時間</td></tr>
";
//1 引入分頁類
include "./Pagination.php";
//2. 獲得信息總條數
$sql = "select * from sw_goods";
$qry = mysql_query($sql);
$total = mysql_num_rows($qry);
$per = 7;
//3. 實例化分頁類對象
$page_obj = new Pagination($total,$per);
//4. 拼裝sql語句,獲得每頁信息
//利用page_obj實現limit的靈活設置
//$page_obj -> limit;
$sqla = "select * from sw_goods ".$page_obj->limit;
$qrya = mysql_query($sqla);
//5. 獲得頁面列表
$pagelist = $page_obj -> fpage(array(3,4,5,6,7,8));
$i=1;
while($rsta = mysql_fetch_assoc($qrya)){
echo "<tr>";
echo "<td>".$i++."</td>";
echo "<td>".$rsta['goods_name']."</td>";
echo "<td>".$rsta['goods_number']."</td>";
echo "<td>".$rsta['goods_price']."</td>";
echo "<td>".date("Y-m-d H:i:s",$rsta['goods_create_time'])."</td>";
echo "</tr>";
}
echo "<tr><td colspan=5>".$pagelist."</td></tr>";
echo "</table>";
3 ajax無刷新分頁實現
open(『get','http://網址/index.php?page=2')
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<html>
<head>
<title>新建網頁</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
//獲得分頁信息ajax函數
function showPage(myurl){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState==4){
var rst = document.getElementById("result");
rst.innerHTML = xhr.responseText;
}
}
xhr.open("get",myurl);
xhr.send(null);
}
window.onload = function(){
showPage("./data1.php"); //獲得分頁信息
//showPage("./data.php?page=2");
}
</script>
<style type="text/css">
</style>
</head>
<body>
<h2>ajax無刷新分頁效果</h2>
<div id="result"></div>
</body>
</html>
<script type="text/javascript">
document.write(new Date()+"<br />");
document.write(new Date()+"<br />");
document.write(new Date()+"<br />");
document.write(new Date()+"<br />");
</script>
『貳』 PHP怎麼製作分頁
方法/步驟
首先要了解下分頁的原理即
SELECT * FROM table …… limit 開始位置 , 操作條數
開始位置從0開始
SELECT * FROM table …… limit 0 , 20
取最前面20條
SELECT * FROM table …… limit 10 , 20
11條到20條
其次分頁要用的公式
得到公式
(當前頁數 - 1 )X 每頁條數 , 每頁條數
Select * from table limit ($Page- 1) * $PageSize, $PageSize
還要了解parse_url()解析URL函數
parse_url() 是講URL解析成有固定鍵值的數組的函數
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
結果:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
創建資料庫bbs和表test有
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) character set gb2312 NOT NULL,
`sex` varchar(2) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
然後插入十幾條測試數據即可
寫mysql資料庫連接代碼保存conn.php文件里
代碼如下
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("資料庫鏈接錯誤");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文編碼;
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content));
return $content;
}
//$content=str_replace("'","'",$content);
//htmlspecialchars();
?>
寫分頁函數page.php
代碼如下
<?php
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 頁";
}
include("conn.php");
$result=mysql_query("SELECT * FROM `test`");
$total=mysql_num_rows($result);
//調用pageft(),每頁顯示10條信息(使用默認的20時,可以省略此參數),使用本頁URL(默認,所以省略掉).
_PAGEFT($total,5);
echo $pagenav;
$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");
while($row=mysql_fetch_array($result)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
調用數據和分頁list.php
<?php
/**
* 愛微網 www.iiwnet.com/php/
*/
include("conn.php");
$pagesize=5;
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `test`");
$num = mysql_num_rows($numq);
if($_GET[page]){
$pageval=$_GET[page];
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize){
if($pageval<=1)$pageval=1;
echo "共 $num 條".
" <a href=$url?page=".($pageval-1).">上一頁</a> <a href=$url?page=".($pageval+1).">下一頁</a>";
}
echo $SQL="SELECT * FROM `test` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
注意事項
注意分頁公式寫法你只要記住即可;
(當前頁數 - 1 )X 每頁條數 , 每頁條數;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三個代碼文件在同一個目錄下;
主要是最後的list.php調用代碼要細看很有用。
『叄』 php 新聞內容顯示頁面分頁怎麼寫
<?
$sql="select * from table ";//查表
$res=mysql_query($sql);//取得結果
$nums=mysql_num_rows($res);//取得總記錄數
$pagesize=15;//設定每頁的記錄數
$pages=ceil($nums/$pagesize);//取得總頁數
if($pages<1){$pages=1;}//設定總頁數至少1頁
$page=$_GET[page];//取得傳遞過來的頁數
if($page>$pages){$page=$pages;}//如果傳遞過來的頁數比總頁數還大,就讓它等於總頁數
if($page<1){$page=1;}//如果傳遞過來的頁數小於1,就讓他等於1
$kaishi=($page-1)*$pagesize;//為下一步做准備,limit的初始記錄
$sql="select * from table order by id desc limit $kaishi,$pagesize";//取得記錄從計算出的初始值開始,一共$pagesize條
$res=mysql_query($sql);//取得結果
while($arr=mysql_fetch_array($res))
{
echo $arr[id]."---".$arr[biaoti].'<br>';//輸出記錄的ID和標題
}
?>
下面是分頁
<a href="?page=1">首頁</a> <a href="?page=<? echo $page-1;?>">上頁</a> 當前第<? echo $page;?>頁 <a href="?page=<? echo $page+1;?>">下頁</a> <a href="?page=<? echo $pages;?>">尾頁</a>
『肆』 PHP如何實現分頁顯示
【文件名】: c_mysql_page.inc // 【作 用】: MySQL分頁函數類 // 【作 者】: 天灰 // // 【最後修改日期】: 2001/07/16[cxx] // 【變數定義規則】:『C_』=字元型,『I_』=整型,『N_』=數字型,『L_』=布爾型,『A_』=數組型 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // ※c_mysql_page() 構造函數,設置分頁初始參數 // ※page_standard() 分頁顯示函數(標准型) // ※GetRecordStartEnd() 獲得取記錄的開始結束位置 // ※getmaxpage() 獲得記錄集的最大頁數 // ※checkpage() 檢查當前頁數是否在0和最大頁數之間 //------------------------------------------------------------------------------------------ class c_mysql_page { //------------------------------------------------------------------------------------------ // 變數定義 //------------------------------------------------------------------------------------------ var $I_pagesize = 10; //每頁記錄數 var $C_width = '80%'; //表格寬度 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函數名:c_mysql_page ($I_pagesize, $c_width) // 作 用:構造函數,設置分頁初始參數 // 參 數:$I_pagesize, $c_width // 返回值:變數 // 備 註:構造函數隨著類的建立而自動執行 //------------------------------------------------------------------------------------------ function c_mysql_page ($I_pagesize=10, $C_width='80%') { if (isset($I_pagesize)){$this -> I_pagesize = $I_pagesize;} if (isset($C_width)){$this -> C_width = $C_width;} } //------------------------------------------------------------------------------------------ // 函數名:page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="") // 作 用:分頁顯示函數(標准型) // 參 數:$I_sumrecord 記錄總數 // $C_url URL // $C_page URL後的參數 // $C_otherpara URL後的參數2 // $bgcolor 表格的背景顏色 // 返回值: // 備 註:無 //------------------------------------------------------------------------------------------ function page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="",$bgcolor="") { //檢查參數 if ((!$I_sumrecord) || (!$C_page)){AlertExit("參數不全!");} global $PHP_SELF,$$C_page; //全局變數$C_page //檢測$I_pagesize是否合法 if($this -> I_pagesize < 1){AlertExit("請設定每頁的記錄數!");} if($I_sumrecord < 1){return false;} //檢測總記錄數 if($C_url == "self"){$C_url = $PHP_SELF;} //設置URL $I_page = $$C_page; //重新賦當前頁值 $I_maxpage = $this -> getmaxpage($I_sumrecord); //取出總頁數 $I_page = $this -> checkPage($I_maxpage,$I_page); //檢查當前頁號 //顯示表 echo ""; echo ""; echo "共" . $I_sumrecord. "條主題 當前第" . $I_page . "/". $I_maxpage. "頁"; if ($I_maxpage > 1) { echo ""; if($I_page > 1 && $I_page < $I_maxpage) { echo "首頁"; $pre=$I_page-1; echo "上頁"; $next=$I_page+1; echo "下頁"; echo "末頁"; } elseif($I_page == 1) { $next = $I_page+1; echo "下頁"; echo "末頁"; } elseif($I_page == $I_maxpage) { echo "首頁"; $pre=$I_page-1; echo "上頁"; } //顯示select echo "轉到"; echo "";//OnChange=".WindowLocation($C_url,$C_otherpara,$C_page)." for($i=1;$i I_pagesize; $I_pagesize = $this -> I_pagesize; } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函數名:getmaxpage($intRecordNum) // 作 用:獲得記錄集的最大頁數 // 參 數:$I_sumrecord 記錄總數 // 返回值:最大頁數$I_maxpage(整型) // 備 註:無 //------------------------------------------------------------------------------------------ function getmaxpage($I_sumrecord) { if (!$I_sumrecord){AlertExit("參數不全!>
『伍』 ThinkPHP 怎麼結合Bootstrap進行分頁
這個問題最好去thinkPHP官網問一下,
我是這樣做的。
首先下載 ThinkPHP 的分頁類,然後修改 分頁類代碼,使之返回的字元串符合Bootstrap分頁布局格式,然後通過控制器將分頁數據扔給模板就好了。當然不用改分頁類,通過js前端修改dom也是沒問題的。
額,不知道你有沒有懂我的意思。算了,貼一段代碼好了。我找找看
下面是一個tp的分頁類(tp3.2版的。我已經修改過了,把這個放到ORG下,創建個Page類,然後在控制器類中創建分頁實例,返回數據。)
額,算了。你先看吧,有問題再說
<?php
/**
*分頁Page.class.php
**/
classPage{
//分頁欄每頁顯示的頁數
public$rollPage=6;
//頁數跳轉時要帶的參數
public$parameter;
//分頁URL地址
public$url='';
//需要分頁的數據總數
public$totalRows;
//每頁的數據顯示數
public$everyPageRow;
//分頁數
protected$pageNum;
//當前頁數
protected$p;
//分頁使用的字元串
public$pageStr;
//----------------------------------------
//分頁總頁面數
/**
*構造函數
*@accesspublic
*@paramarray$totalRows總的記錄數
*@paramarray$listRows每頁顯示記錄數
*@paramarray$parameter分頁跳轉的參數
*/
function__construct($count,$unit,$url='',$parameter='p')
{
$this->totalRows=$count;
$this->everyPageRow=$unit;
$this->url=$url;
$this->parameter=$parameter;
$this->pageNum=ceil($this->totalRows/$this->everyPageRow);
$p=$_GET[$this->parameter];
if(empty($p)||$p<=0){
$p=1;
}elseif($p>$this->pageNum){
$p=$this->pageNum;
}
$this->p=$p;
}
publicfunctionshow(){
$pgStr='';
$pp=intval($this->pageNum/$this->rollPage);
$activePP=intval(($this->p-1)/$this->rollPage);
if($this->p!=1){
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($this->p-1)."'>".上一頁."</a></li>";
}
if($activePP>0){
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($this->p-$this->rollPage)."'>".上.$this->rollPage.頁."</a></li>";
}
//具體分頁編碼
if($activePP<$pp&&$activePP>=0){
for($i=$activePP*$this->rollPage;$i<($activePP+1)*$this->rollPage;$i++){
if($i==($this->p-1)){
$pgStr.="<liclass='active'><ahref='javascript:;'>".($i+1)."</a></li>";
}else{
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($i+1)."'>".($i+1)."</a></li>";
}
}
}else{
for($i=$activePP*$this->rollPage;$i<$this->pageNum;$i++){
if($i==($this->p-1)){
$pgStr.="<liclass='active'><ahref='javascript:;'>".($i+1)."</a></li>";
}else{
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($i+1)."'>".($i+1)."</a></li>";
}
}
}
if($this->p!=$this->pageNum){
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($this->p+1)."'>".下一頁."</a></li>";
}
if($activePP<$pp){
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($this->p+$this->rollPage)."'>".下.$this->rollPage.頁."</a></li>";
}
if($activePP<$pp){
$pgStr.="<li><ahref='".$this->url.'/'.$this->parameter.'/'.($this->pageNum)."'>".最後一頁."</a></li>";
}
return$pgStr;
}
}
?>
『陸』 phpcms怎麼給自定義的頁面添加分頁
首先,打開 phpcms\libs\functions\global.func.php 這個文件,找到文件第622行的分頁函數,復制一下,粘貼到默認分頁函數的下面,重新命名後保存。(筆者在此命名為:pages_new)
接著,注意這里根據自己的需求,修改分頁類的調用。
1.自定義 PC 標簽進行 SQL 查詢的分頁類修改
打開 phpcms/libs/classes/template_cache.class.php 這個文件,找到文件第178行的$str .= '$r = $get_db->sql_query("'.$sql.'");$s = $get_db->fetch_next();$pages=pages($s[\'count\'], $page, $pagesize, $urlrule);';
將其復制在這行的下面,並修改變數名
$str .= '$r = $get_db->sql_query("'.$sql.'");$s = $get_db->fetch_next();$pages_new=pages_new($s[\'count\'], $page, $pagesize, $urlrule);';
保存。
2.常用分頁類修改:
打開 phpcms/libs/classes/template_cache.class.php 這個文件,找到文件第207行(如果修改了 自定義 PC 標簽的,請找第208行)的$str .= '$pages = pages($'.$op.'_total, $page, $pagesize, $urlrule);';
將其復制在這行的下面,並修改變數名$str .= '$pages_new = pages_new($'.$op.'_total, $page, $pagesize, $urlrule);';
保存。
3.會員中心的收藏列表分頁類修改:
打開 phpcms\libs\classes\model.class.php 這個文件,找到文件第 61 行的$this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages);
將其復制在這行的下面,並修改變數名$this->pages = pages_new($this->number, $page, $pagesize, $urlrule, $array, $setpages);
保存。
5
最後,在前台模板中的{$pages}要修改為{$pages_new},就完成了。
『柒』 Thinkphp數組分頁如何操作
第一種:利用Page類和limit方法
$User = M('User'); // 實例化User對象
import('ORG.Util.Page');// 導入分頁類
$count = $User->where('status=1')->count();// 查詢滿足要求的總記錄數
$Page = new Page($count,25);// 實例化分頁類 傳入總記錄數和每頁顯示的記錄數
$show = $Page->show();// 分頁顯示輸出
// 進行分頁數據查詢 注意limit方法的參數要使用Page類的屬性
$list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 賦值數據集
$this->assign('page',$show);// 賦值分頁輸出
$this->display(); // 輸出模板
第二種:分頁類和page方法的實現
$User = M('User'); // 實例化User對象
// 進行分頁數據查詢 注意page方法的參數的前面部分是當前的頁數使用 $_GET[p]獲取
$list = $User->where('status=1')->order('create_time')->page($_GET['p'].',25')->select();
$this->assign('list',$list);// 賦值數據集
import(「ORG.Util.Page」);// 導入分頁類
$count = $User->where('status=1')->count();// 查詢滿足要求的總記錄數
$Page = new Page($count,25);// 實例化分頁類 傳入總記錄數和每頁顯示的記錄數
$show = $Page->show();// 分頁顯示輸出
$this->assign('page',$show);// 賦值分頁輸出
$this->display(); // 輸出模板
帶入查詢條件
如果是POST方式查詢,如何確保分頁之後能夠保持原先的查詢條件呢,我們可以給分頁類傳入參數,方法是給分頁類的parameter屬性賦值:
import('ORG.Util.Page');// 導入分頁類
$mapcount = $User->where($map)->count();// 查詢滿足要求的總記錄數
$Page = new Page($count,25);// 實例化分頁類 傳入總記錄數和每頁顯示的記錄數
//分頁跳轉的時候保證查詢條件
foreach($map as $key=>$val) {
$Page->parameter .= "$key=".urlencode($val).'&';
}
$show = $Page->show();// 分頁顯示輸出
『捌』 在php中如何對多條記錄進行分頁
方法一:講sql查詢進行分頁進行,需要調用幾個函數,具體見腳本:
1.pager.class.php
<?php
class pager {
public $sql; //SQL查詢語句
public $datanum; //查詢所有的數據總記錄數
public $page_size; //每頁顯示記錄的條數
protected $_errstr;
protected $_conn;
protected $_query_id;
public function query($query)///這個函數有問題,暫時可以不用
{
$ret = false;
if (!empty($query)) {
if ($this->_conn === false || !is_resource($this->_conn)) {
warningLog(__METHOD__ . ': query sql with no connection', true);
return false;
}
$this->_query_id = @mysql_query($query, $this->_conn);
if ($this->_query_id === false) {
$this->_errstr = @mysql_error();
$ret = false;
} else {
$this->_errstr = 'SUCCESS';
$ret = $this->_query_id;
}
}
$msg = ($ret === false) ? 'false' : strval($ret);
debugLog(__METHOD__.": [$msg] returned for sql query [$query]");
return $ret;
}
function __construct($sql,$page_size) {
$result = mysql_query($sql);
$datanum = mysql_num_rows($result);
$this->sql=$sql;
$this->datanum=$datanum;
$this->page_size=$page_size;
}
//當前頁數
public function page_id() {
if($_SERVER['QUERY_STRING'] == ""){
return 1;
}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
return 1;
}else{
return intval(substr($_SERVER['QUERY_STRING'],8));
}
}
//剩餘url值
public function url() {
if($_SERVER['QUERY_STRING'] == ""){
return "";
}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
return "&".$_SERVER['QUERY_STRING'];
}else{
return str_replace("page_id=".$this->page_id(),"",$_SERVER['QUERY_STRING']);
}
}
//總頁數
public function page_num() {
if($this->datanum == 0){
return 1;
}else{
return ceil($this->datanum/$this->page_size);
}
}
//資料庫查詢的偏移量
public function start() {
return ($this->page_id()-1)*$this->page_size;
}
//數據輸出
public function sqlquery() {
return $this->sql." limit ".$this->start().",".$this->page_size;
}
//獲取當前文件名
private function php_self() {
return $_SERVER['PHP_SELF'];
}
//上一頁
private function pre_page() {
if ($this->page_id() == 1) { //頁數等於1
return "<a href=".$this->php_self()."?page_id=1".$this->url().">上一頁</a> ";
}elseif ($this->page_id() != 1) { //頁數不等於1
return "<a href=".$this->php_self()."?page_id=".($this->page_id()-1).$this->url().">上一頁</a> ";
}
}
//顯示分頁
private function display_page() {
$display_page = "";
if($this->page_num() <= 10){ //小於10頁
for ($i=1;$i<=$this->page_num();$i++) //循環顯示出頁面
$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
return $display_page;
}elseif($this->page_num() > 10){ //大於10頁
if($this->page_id() <= 6){
for ($i=1;$i<=10;$i++) //循環顯示出頁面
$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
return $display_page;
}elseif(($this->page_id() > 6) && ($this->page_num()-$this->page_id() >= 4)){
for ($i=$this->page_id()-5;$i<=$this->page_id()+4;$i++) //循環顯示出頁面
$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
return $display_page;
}elseif(($this->page_id() > 6) && ($this->page_num()-$this->page_id() < 4)){
for ($i=$this->page_num()-9;$i<=$this->page_num();$i++) //循環顯示出頁面
$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
return $display_page;
}
}
}
//下一頁
private function next_page() {
if ($this->page_id() < $this->page_num()) { //頁數小於總頁數
return "<a href=".$this->php_self()."?page_id=".($this->page_id()+1).$this->url().">下一頁</a> ";
}elseif ($this->page_id() == $this->page_num()) { //頁數等於總頁數
return "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">下一頁</a> ";
}
}
// 設置分頁信息
public function set_page_info() {
$page_info = "共".$this->datanum."條 ";
$page_info .= "<a href=".$this->php_self()."?page_id=1".$this->url().">首頁</a> ";
$page_info .= $this->pre_page();
$page_info .= $this->display_page();
$page_info .= $this->next_page();
$page_info .= "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">尾頁</a> ";
$page_info .= "第".$this->page_id()."/".$this->page_num()."頁";
return $page_info;
}
}
?>
2.腳本2:
<?php
//類的用法
// 讀取分頁類
include("pager.class.php");
// 資料庫連接初始化
// $db = new mysql();
$impeach_host = '10.81.43.139';
$impeach_usr = 'vmtest15';
$impeach_passwd = 'vmtest15';
$impeach_name = 'ufeature';
$impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) or
die("Can't connect ".mysql_error());
mysql_select_db($impeach_name, $impeach_con);
// 這是一個sql查詢語句,並得到查詢結果
$sql = "select word from ufeature.spam_accuse_word_list where flag='0'";
// 分頁初始化
$page = new pager($sql,20);
// 20是每頁顯示的數量
// $res_1 = mysql_query($sql) or
// die("Can't get result ".mysql_error());
$result=mysql_query($page->sqlquery());
while($info = mysql_fetch_array($result,MYSQL_ASSOC)){
// while($info = mysql_fetch_array($res_1, MYSQL_ASSOC)){
echo $info["word"]."<br/>";
}
// 頁碼索引條
echo $page->set_page_info();
?>
方法二:使用ajax的方法
1、首先了解SQL語句中的limit用法
SELECT * FROM table …… limit 開始位置 , 操作條數 (其中開始位置是從0開始的)
例子
取前20條記錄:SELECT * FROM table …… limit 0 , 20
從第11條開始取20條記錄:SELECT * FROM table …… limit 10 , 20
LIMIT n 等價於 LIMIT 0,n。
如select * from table LIMIT 5; //返回前5行,和select * from table LIMIT 0,5一樣
2、分頁原理
所謂分頁顯示,也就是講資料庫中的結果集,一段一段顯示出來
怎麼分段,當前在第幾段 (每頁有幾條,當前再第幾頁)
前10條記錄:select * from table limit 0,10
第11至20條記錄:select * from table limit 10,10
第21至30條記錄:select * from table limit 20,10
分頁公式:
(當前頁數 - 1 )X 每頁條數 , 每頁條數
Select * from table limit ($Page- 1) * $PageSize, $PageSize
3、$_SERVER["REQUEST_URI"]函數
預定義伺服器變數的一種,所有$_SERVER開頭的都叫做預定於伺服器變數。
REQUEST_URI的作用是取得當前URI,也就除域名外後面的完整的地址路徑。
例子:
當前頁為:http://www.test.com/home.php?id=23&cid=22
echo $_SERVER["REQUEST_URI"]
結果為:/home.php?id=23&cid=22
4、parse_url()解析URL函數
parse_url() 是講URL解析成有固定鍵值的數組的函數
例子
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
結果:
Array
(
[scheme] => http ;協議
[host] => hostname ;主機域名
[user] => username ;用戶
[pass] => password ;密碼
[path] => /path ;路徑
[query] => arg=value ;取參數
[fragment] => anchor ;
)
5、代碼實例
這個一個留言的分頁,分為3個部分,一個是資料庫設計,一個是連接頁面,一個是顯示頁面。
(1)設計資料庫
設計資料庫名為bbs,有一個數據表為message,裡麵包含title,lastdate,user,content等欄位,分別表示留言標題,留言日前,留言人,留言的內容
(2)連接頁面
<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("資料庫鏈接錯誤");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文編碼;
//將空格,換行轉換為HTML可解析
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); //兩個str_replace嵌套
return $content;
}
//$content=str_replace("'","『",$content);
//htmlspecialchars();
?>
(3)顯示頁面
<?php
include("conn.php");
$pagesize=2; //設置每頁顯示2個記錄
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `message`");
$num = mysql_num_rows($numq);
if($_GET){
$pageval=$_GET;
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize){
if($pageval<=1)$pageval=1;
echo "共 $num 條".
" <a href=$url?page=".($pageval-1).">上一頁</a> <a href=$url?page=".($pageval+1).">下一頁</a>";
}
$SQL="SELECT * FROM `message` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
?>
<table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
<tr bgcolor="#eff3ff">
<td>標題:<?php echo $row[title]?></td> <td>時間:<?php echo $row[lastdate]?></td>
</tr>
<tr bgcolor="#eff3ff">
<td> 用戶:<?php echo $row[user]?></td><td></td>
</tr>
<tr>
<td>內容:<?php echo htmtocode($row[content]);?></td>
</tr>
<br>
</table>
<?php
}
?>
方法3:
<script>
function viewpage(p){
if(window.XMLHttpRequest){
var xmlReq = new XMLHttpRequest();
} else if(window.ActiveXObject) {
var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');
}
var formData = "page="+p;
xmlReq.onreadystatechange = function(){
if(xmlReq.readyState == 4){
document.getElementByIdx_x('content2').innerHTML = xmlReq.responseText;
}
}
xmlReq.open("post", "hotel_list.php", true);
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlReq.send(formData);
return false;
}
</script>
腳本2:
header("Content-Type:text/html;charset=GB2312");
$pagesize=10;
//echo $_POST['page'];
$result = mysql_query("Select count(DISTINCT hotelname) FROM ".TBL_HOTELS);
$myrow = mysql_fetch_array($result);
$numrows=$myrow[0];
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
if (isset($_POST['page'])){
$page=intval($_POST['page']);
}
else{
//設置為第一頁
$page=1;
}
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
//計算記錄偏移量
$offset=$pagesize*($page - 1);
//讀取指定記錄數
$result=mysql_query("select `hotelname` , count( * ) from ".TBL_HOTELS." GROUP BY `hotelname` order by id desc limit $offset,$pagesize");
$num = mysql_num_rows($result);
while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
$hotelname[] = $row[0];
$countpeople[] = $row[1];
}
for($a=0;$a<$num;$a++)
{
//$result=mysql_query("select count(title) from " . TBL_Comments ." where `title`=\"".$title[$a]."\"");
//$row = mysql_fetch_row($result);
echo "<TABLE style=\"MARGIN-BOTTOM: 20px\" cellSpacing=0 cellPadding=0 width=100% border=0>\n";
echo "<TBODY>\n";
echo "<TR>\n";
echo "<TD style=\"PADDING-TOP: 5px\" vAlign=top align=left width=80>\n";
//rating_bar($title[$a],5);
echo "</TD>\n";
echo "<TD style=\"PADDING-TOP: 5px\" align=left width=100%><A title=$hotelname[$a] style=\"FONT-SIZE: 14px\" href=#>$hotelname[$a]</A>\n";
echo "</TD></TR>\n";
echo " <TR>\n";
echo "<TD></TD>\n";
echo "<TD style=\"PADDING-LEFT: 0px\">\n";
echo "<IMG src=\"images/comment.gif\" border=0> 推薦人數:($countpeople[$a]) |\n";
echo "<SPAN>平均分:<STRONG></STRONG> (".$count."票) | 評論數:()</SPAN>\n";
echo "</TD></TR></TBODY></TABLE>\n";
}
echo "<TABLE style=\"MARGIN-TOP: 30px\" cellSpacing=0 cellPadding=0 width=\"100%\"";
echo "border=0>";
echo "<TBODY><TR><TD colSpan=3 height=20>";
echo "<DIV align=center>";
echo "<P align=left><FONT color=red>第".$page."頁/總".$pages."頁 | 總".$numrows."條</FONT> | ";
if ($page>1) echo "<a onclick=\"viewpage(".$first.")\" href='#'>首頁</a> | ";
if ($page>1) echo "<a onclick=\"viewpage(".$prev.")\" href='#'>上頁</a> | ";
if ($page<$pages) echo "<a onclick=\"viewpage(".$next.")\" href='#'>下頁</a> | ";
if ($page<$pages) echo "<a onclick=\"viewpage(".$last.")\" href='#'>尾頁</a>";
echo "轉到第 <INPUT maxLength=3 size=3 value=1 name=goto_page> 頁 <INPUT hideFocus onclick=\"viewpage(document.all.goto_page.value)\" type=button value=Go name=cmd_goto>";
echo "</P></DIV></TD></TR></TBODY></TABLE>";
『玖』 php如何根據內容的大小分頁
分頁顯示是一種非常常見的瀏覽和顯示大量數據的方法,屬於web編程中最常處理的事件之一。對於web編程的老手來說,編寫這種代碼實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原理和實現方法有所了解。本文適合初學者閱讀,所有示例代碼均使用php編寫。
我以前在達內上課的時候,做過很多案例,這是基本的教材 ,很多問題在網上運氣好能得到接到,我覺得你有個系統的培訓會比較好,規范自己的學習進程和代碼。
原理
所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這里需要兩個初始的參數:
每頁多少條記錄($PageSize)?
當前是第幾頁($CurrentPageID)?
現在只要再給我一個結果集,我就可以顯示某段特定的結果出來。
至於其他的參數,比如:上一頁($PreviousPageID)、下一頁($NextPageID)、總頁數($numPages)等等,都可以根據前邊這幾個東西得到。
以mysql資料庫為例,如果要從表內截取某段內容,sql語句可以用:select * from table limit offset, rows。看看下面一組sql語句,嘗試一下發現其中的規率。
前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的時候取表內每一頁數據的sql語句,我們可以總結出這樣一個模板:
select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那麼回事。搞定了最重要的如何獲取數據的問題以後,剩下的就僅僅是傳遞參數,構造合適的sql語句然後使用php從資料庫內獲取數據並顯示了。以下我將用具體代碼加以說明。
3、簡單代碼
請詳細閱讀以下代碼,自己調試運行一次,最好把它修改一次,加上自己的功能,比如搜索等等。
<?php
// 建立資料庫連接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 獲取當前頁數
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每頁數量
$PageSize = 10;
// 獲取總數據量
$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 ){ $page_count = 1; } //如果總數據量小於$PageSize,那麼只有一頁
if( $amount % $page_size ){ //取總數據量除以每頁數的余數
$page_count = (int)($amount / $page_size) + 1; //如果有餘數,則頁數等於總數據量除以每頁數的結果取整再加一
}else{
$page_count = $amount / $page_size; //如果沒有餘數,則頁數等於總數據量除以每頁數的結果
}
}
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>';
}
// 獲取數據,以二維數組格式返回結果
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就可以很簡單的用得到的二維數組來顯示結果
?>
4、OO風格代碼
以下代碼中的資料庫連接是使用的pear db類進行處理
<?php
// FileName: Pager.class.php
// 分頁類,這個類僅僅用於處理數據結構,不負責處理顯示的工作
Class Pager
{
var $PageSize; //每頁的數量
var $CurrentPageID; //當前的頁數
var $NextPageID; //下一頁
var $PreviousPageID; //上一頁
var $numPages; //總頁數
var $numItems; //總記錄數
var $isFirstPage; //是否第一頁
var $isLastPage; //是否最後一頁
var $sql; //sql查詢語句
function Pager($option)
{
global $db;
$this->_setOptions($option);
// 總條數
if ( !isset($this->numItems) )
{
$res = $db->query($this->sql);
$this->numItems = $res->numRows();
}
// 總頁數
if ( $this->numItems > 0 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
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 ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
}
return true;
}
/***
*
* 返回結果集的資料庫連接
* 在結果集比較大的時候可以直接使用這個方法獲得資料庫連接,然後在類之外遍歷,這樣開銷較小
* 如果結果集不是很大,可以直接使用getPageData的方式獲取二維數組格式的結果
* 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方法保證資料庫兼容性
return $link;
}
else
{
return false;
}
}
/***
*
* 以二維數組的格式返回結果集
*
***/
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類建立資料庫連接的代碼
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=1&numItems=".$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>";
}
?>
需要說明的地方就是不同資料庫的兼容性,在不同的資料庫里截獲一段結果的寫法是不一樣的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在類里邊獲取結果的時候需要使用pear db類的limitQuery方法。
ok,寫完收功,希望花時間看完這些文字的你不覺得是浪費了時間。
回答者
『拾』 ★ 請問怎麼使用PHP在Oracle里做分頁
oracle 實現分頁要用到rownum 代碼如下
select * from (select t.* rownum row_id form (select * from 表名) t ) where row_id>=1 and row_id<=10
這條SQL語句就可以實現分頁查詢,當然光有SQL還是不行,用以下的PHP 函數就可實現分頁了。
/*分頁函數*/
function page($page,$total,$phpfile,$pagesize=10,$pagelen=10,$str='')
{
$pagecode = '';//定義變數,存放分頁生成的HTML
$page = intval($page);//避免非數字頁碼
$total = intval($total);//保證總記錄數值類型正確
if(!$total) return array();//總記錄數為零返回空數組
$pages = ceil($total/$pagesize);//計算總分頁
//處理頁碼合法性
if($page<1) $page = 1;
if($page>$pages) $page = $pages;
//計算查詢偏移量
$offset = $pagesize*($page-1)+1;
//頁碼范圍計算
$init = 1;//起始頁碼數
$max = $pages;//結束頁碼數
$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//頁碼個數
$pageoffset = ($pagelen-1)/2;//頁碼個數左右偏移量
//生成html
$pagecode='<div class="page">';
$pagecode.="<span>共".$total."條信息 第".$page."頁/共".$pages."頁</span>\n";//第幾頁,共幾頁
//如果是第一頁,則不顯示第一頁和上一頁的連接
if($page!=1){
$pagecode.="<a href=\"{$phpfile}?page=1&$str\"> 首頁 </a> ";//第一頁
$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."&$str\"> 上頁 </a> ";//上一頁
}
//分頁數大於頁碼個數時可以偏移
if($pages>$pagelen)
{
//如果當前頁小於等於左偏移
if($page<=$pageoffset)
{
$init=1;
$max = $pagelen;
}else
{
//如果當前頁大於左偏移
//如果當前頁碼右偏移超出最大分頁數
if($page+$pageoffset>=$pages+1)
{
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在時的計算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++)
{
if($i==$page)
{
$pagecode.='<span><font color = red><b>'.$i.'</b></font></span>';
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}&$str\"> $i </a>";
}
}
if($page!=$pages)
{
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."&$str\"> 下頁 </a>";//下一頁
$pagecode.="<a href=\"{$phpfile}?page={$pages}&$str\"> 末頁</a>";//最後一頁
}
$pagecode.='</div>';
$onset = $offset + $pagesize -1;
return array('pagecode'=>$pagecode,'sqllimit'=>' and row_id between '.$offset.' and '.$onset);
}
使用方法如下:
1,首先查詢最大數據條數
$sql="select count(*) co_unt from 表名";
$st = OCIParse($conn, $sql);//分析指令
OCIExecute($st); //執行指令
$row=oci_fetch_array($st);
$counts=$row['CO_UNT'];
if($counts>0){
$page=isset($_GET['page'])?$_GET['page']:1;
$getpageinfo = page($page,$counts,$phpfile,$chahaoString,10,15);
$pagesql=$getpageinfo['sqllimit'];//組合完整的SQL語句
$pagenav=$getpageinfo['pagecode'];//分頁顯示的樣式代碼
$sql="select * from (select t.* rownum row_id form (select * from 表名) t ) where 1=1 ".$pagesql
}
這樣就行了