本文目錄一覽:
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(“”);
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 “hrb”.$row[name].” | “.$row[sex];
}
?
調用數據和分頁list.php
?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 “hrb”.$row[name].” | “.$row[sex];
}
?
注意事項
注意分頁公式寫法你只要記住即可;
(當前頁數 – 1 )X 每頁條數 , 每頁條數;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三個代碼文件在同一個目錄下;
主要是最後的list.php調用代碼要細看很有用。
php分頁使用方法
class Page
{
// 起始行數
public $firstRow ;
// 列表每頁顯示行數
public $listRows ;
// 頁數跳轉時要帶的參數
public $parameter ;
// 分頁總頁面數
protected $totalPages ;
// 總行數
protected $totalRows ;
// 當前頁數
protected $nowPage ;
// 分頁的欄的總頁數
protected $coolPages ;
// 分頁欄每頁顯示的頁數
protected $rollPage ;
// 分頁參數
public $p;
// 分頁顯示定製
protected $config = array(
‘header’=’條記錄’,
‘prev’=’上一頁’,
‘next’=’下一頁’,
‘first’=’第一頁’,
‘last’=’最後一頁’,
‘theme’=’ %totalRow% %header% %nowPage%/%totalPage% 頁 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%’
);
/**
+———————————————————-
* 架構函數
+———————————————————-
* @access public
+———————————————————-
* @param array $totalRows 總的記錄數
* @param array $listRows 每頁顯示記錄數
* @param array $parameter 分頁跳轉的參數
+———————————————————-
*/
public function __construct($totalRows,$listRows,$p=’p’,$rollPage=5,$parameter=”) {
$this-p=$p;
$this-totalRows = $totalRows;
$this-parameter = $parameter;
$this-rollPage = $rollPage;
$this-listRows = !empty($listRows)?$listRows:15;
$this-totalPages = ceil($this-totalRows/$this-listRows); //總頁數
$this-coolPages = ceil($this-totalPages/$this-rollPage);
$this-nowPage = !empty($_GET[$this-p])?$_GET[$this-p]:1;
if(!empty($this-totalPages) $this-nowPage$this-totalPages) {
$this-nowPage = $this-totalPages;
}
$this-firstRow = $this-listRows*($this-nowPage-1);
}
public function setConfig($name,$value) {
if(isset($this-config[$name])) {
$this-config[$name] = $value;
}
}
/**
+———————————————————-
* 分頁顯示輸出
+———————————————————-
* @access public
+———————————————————-
*/
public function show() {
if(0 == $this-totalRows) return ”;
$nowCoolPage = ceil($this-nowPage/$this-rollPage);
$url = $_SERVER[‘REQUEST_URI’].(strpos($_SERVER[‘REQUEST_URI’],’?’)?”:”?”).$this-parameter;
$parse = parse_url($url);
if(isset($parse[‘query’])) {
parse_str($parse[‘query’],$params);
unset($params[$this-p]);
$url = $parse[‘path’].’?’.http_build_query($params);
}
//上下翻頁字符串
$upRow = $this-nowPage-1;
$downRow = $this-nowPage+1;
if ($upRow0){
$upPage=”a href='”.$url.””.$this-p.”=$upRow'”.$this-config[‘prev’].”/a”;
}else{
$upPage=””;
}
if ($downRow = $this-totalPages){
$downPage=”a href='”.$url.””.$this-p.”=$downRow'”.$this-config[‘next’].”/a”;
}else{
$downPage=””;
}
//
if($nowCoolPage == 1){
$theFirst = “”;
$prePage = “”;
}else{
$preRow = $this-nowPage-$this-rollPage;
$prePage = “a href='”.$url.””.$this-p.”=$preRow’ 上”.$this-rollPage.”頁/a”;
$theFirst = “a href='”.$url.””.$this-p.”=1′ “.$this-config[‘first’].”/a”;
}
if($nowCoolPage == $this-coolPages){
$nextPage = “”;
$theEnd=””;
}else{
$nextRow = $this-nowPage+$this-rollPage;
$theEndRow = $this-totalPages;
$nextPage = “a href='”.$url.””.$this-p.”=$nextRow’ 下”.$this-rollPage.”頁/a”;
$theEnd = “a href='”.$url.””.$this-p.”=$theEndRow’ “.$this-config[‘last’].”/a”;
}
// 1 2 3 4 5
$linkPage = “”;
for($i=1;$i=$this-rollPage;$i++){
$page=($nowCoolPage-1)*$this-rollPage+$i;
if($page!=$this-nowPage){
if($page=$this-totalPages){
$linkPage .= ” a href='”.$url.””.$this-p.”=$page’ “.$page.” /a”;
}else{
break;
}
}else{
if($this-totalPages != 1){
$linkPage .= ” span class=’current'”.$page.”/span”;
}
}
}
$pageStr = str_replace(
array(‘%header%’,’%nowPage%’,’%totalRow%’,’%totalPage%’,’%upPage%’,’%downPage%’,’%first%’,’%prePage%’,’%linkPage%’,’%nextPage%’,’%end%’),
array($this-config[‘header’],$this-nowPage,$this-totalRows,$this-totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this-config[‘theme’]);
return $pageStr;
}
}
具體調用方法
$count是總記錄數
15是當前顯示數
$p=new Page($count,15);
$p-setConfig(‘header’, ‘個項目’); //可以設置變量名稱,即輸出的名稱
$page=$p-show(); //生成html page分頁html
總的流程是
先讀取出總的記錄數
,然後調用上面的分頁類
在分頁類裡面輸出2個變量一個是當前分頁讀取數據的開始,和偏移量
limit($p-listRows,$p-firstRow)
然後執行分頁sql語句
$page=$p-show();
page就是標準分頁html
自定義PHP分頁函數
以下為引用的內容:
?
//為了避免重複包含文件而造成錯誤,加了判斷函數是否存在的條件:
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;
$page=$_GET[‘page’];
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中的正規表達式”()
$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 條記錄”;
//如果只有一頁則跳出函數:
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 頁”;
}
}
?
php=mysql調用方法:
?
//(前面程序略)
include(“pageft.php”); //包含“pageft.php”文件
//取得總信息數
$result=mysql_query(“select * from mytable”);
$total=mysql_num_rows($result);
//調用pageft(),每頁顯示10條信息(使用默認的20時,可以省略此參數),使用本頁URL(默認,所以省略掉)。
pageft($total,10);
//現在產生的全局變量就派上用場了:
$result=mysql_query(“select * from mytable limit $firstcount,$displaypg “);
while($row=mysql_fetch_array($result)){
//(列表內容略)
}
?
//———–用法
連接sqlserver
?php
$query=”select * from zhufu”;
$result=mssqlresult($query);
$numrows = mssql_num_rows($result);
$pagesize=20;
$Url=”index.php”;
pageft($numrows,$pagesize,$Url);
$sql = “select top $pagesize * from zhufu where (id not in (select top $firstcount id from zhufu order by id desc)) order by id desc”;
//echo $sql;
$result1= mssqlresult($sql);
while( $row=mssql_fetch_assoc($result1))
{
$row1=trim($row[“city”]).trim($row[“xuexiao”]);
echo
“tr
td class=’bline fontblack’ align = ‘center'”.$row[“id”].”/td
td class=’bline’ align=’left’span class=’fontgreen’font color=’green'”.trim(iconv(“gb2312″,”utf-8”,$row[“sendname”])).”/font /span給”.trim(iconv(“gb2312″,”utf-8″,$row1)).”的font color=’blue'”.trim(iconv(“gb2312″,”utf-8”,$row[“name”])).”/font 的祝福:a href=’info.php?id=”.$row[“id”].”‘ target=’_blank’font color=’#E60638′”.trim((cut_str(iconv(“gb2312″,”utf-8”,$row[“neirong”]),20))).”…./font/a/td
td class=’bline’ align = ‘center'”.$row[“riqi”].”/td
/tr
“;
}
?
php 分頁
?php
include(“connection.php”);
$perNumber=10; //每頁顯示的記錄數
$page=$_GET[‘page’]; //獲得當前的頁面值
$count=mysql_query(“select count(*) from user”); //獲得記錄總數
$rs=mysql_fetch_array($count);
$totalNumber=$rs[0];
$totalPage=ceil($totalNumber/$perNumber); //計算出總頁數
if (!isset($page)) {
$page=1;
} //如果沒有值,則賦值1
$startCount=($page-1)*$perNumber; //分頁開始,根據此方法計算出開始的記錄
$result=mysql_query(“select * from user limit $startCount,$perNumber”); //根據前面的計算出開始的記錄和記錄數
while ($row=mysql_fetch_array($result)) {
echo “user_id:”.$row[0].”br”;
echo “username:”.$row[1].”br”; //顯示數據庫的內容
}
if ($page != 1) { //頁數不等於1
?
a href=”fenye.php?page=?php echo $page – 1;?”上一頁/a !–顯示上一頁–
?php
}
for ($i=1;$i=$totalPage;$i++) { //循環顯示出頁面
?
a href=”fenye.php?page=?php echo $i;?”?php echo $i ;?/a
?php
}
if ($page$totalPage) { //如果page小於總頁數,顯示下一頁鏈接
?
a href=”fenye.php?page=?php echo $page + 1;?”下一頁/a
?php
}
?
================================
這個是很簡單的..而且也寫了注釋..不知道合不合你的意..
ThinkPHP使用心得分享-分頁類Page的用法
ThinkPHP中的Page類在ThinkPHP/Extend/Library/ORG/Util/Page.class.php中,所以使用前要引入Page類:
複製代碼
代碼如下:
import(‘ORG.Util.Page’);
//Page類的引入
$db
=
M(‘abc’);//實例化數據表abc
$where
=
array(
‘id’=’2’;
);//條件語句$where,例表中字段id的值為2
$count
=
$db-where($where)-count();//獲取符合條件的數據總數count
$page
=
new
Page($count,
10);//實例化page類,傳入數據總數和每頁顯示10條內容
$limit
=
$page-firstRow
.
‘,’
.
$page-listRows;//每頁的數據數和內容$limit
$result
=$db-where($where))-limit($limit)-select();//分頁查詢結果
$this-result
=
$result;//賦值
$this-show
=
$page-show();//獲取分頁的底部信息
以上代碼是分頁類實現的基本語句,當然喜歡使用原生sql語句的朋友也可以配合原生sql語句實現查詢分頁:
複製代碼
代碼如下:
import(‘ORG.Util.Page’);
//Page類的引入
$db
=
M(‘abc’);//實例化數據表abc
$where
=
array(
‘id’=’2’;
);//條件語句$where,例表中字段id的值為2
$count
=
$db-where($where)-count();//獲取符合條件的數據總數count
$page
=
new
Page($count,
10);//實例化page類,傳入數據總數和每頁顯示10條內容
$Modle
=
new
Model();//實例化新數據模型
$sql
=
‘select
id,name
from
abc
where
‘.$where.’
limit
‘.$page-firstRow.’,’.$page-listRows;//sql語句
$result
=
$Modle-query($sql);//執行sql語句
$this-result
=
$result
$this-show=$page-show();
當然,分布查詢獲取的內容也可以先對查詢完的數據進行處理再賦值,比如
複製代碼
代碼如下:
…
$result
=$db-where($where))-limit($limit)-select();//分頁查詢結果
$res
=
abc($result);//abc方法(自定義方法或php函數)對結果$result進行數據排序或重組處理等
$this-result
=
$res;//賦值
誰來指點一下php通用分頁函數該怎麼寫
function page($sql,$pagesize){
$nowpage=$_GET[‘nowpage’];//獲取當前也
$result=mysql_query($sql);//執行sql查詢語句
$total = mysql_num_rows($result);//總記錄條數
$totalpage = ceil($total/$pagesize);//總頁數
$nowpage=$nowpage1?1:$nowpage;//保證頁數始終大於或等於1
if(!$total){//如果沒有記錄則返回0
return 0;
exit;
}
$nowpage=$nowpage=$totalpage?$totalpage:$nowpage;//判斷當前也是否大於總頁數 如果大於總頁數則當前頁為總頁數
$nowrow=($nowpage-1)*$pagesize;//當前記錄的位置
$result = mysql_query($sql.” limit $nowrow,$pagesize”);
$url=$_SERVER[‘PHP_SELF’];//當頁的url地址
if($nowpage==1)//如果頁數只有一頁 則首頁和上一頁無鏈接
$st= “div align=’center’首頁|上一頁”;
else
$st= “a href=$url?nowpage=1首頁/a | a href=$url?nowpage=”.($nowpage-1).”上一頁/a”;
if($nowpage==$totalpage) //如果頁數是最後一頁 則末頁和下一頁無鏈接
$st.=”| 下一頁 | 末頁 “;
else
$st.= “| a href=$url?nowpage=”.($nowpage+1).”下一頁/a | a href=$url?nowpage=$totalpage末頁/a”;
$st.= ” 到第 select name=’nowpage’ size=’1′ onchange=’window.location=\”$url?nowpage=\”+this.value’\n”;//指定跳轉至哪一頁
$st.=”option value=’$nowpage’ select$nowpage/option\n”;
for ($i = 1; $i = $totalpage; $i++) {
if ($i == $nowpage){}
else
$st.=”option value=’$i’$i/option\n”;
}
$st.=”/select 頁/br”;
$st.=”頁次:”.$nowpage.” /”. $totalpage.”頁 共”.$total.”條信息” ;
return array($result,$st);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/309375.html