看看那個limit,分頁程序主要是用sql的limit實現,網上php分頁類很多,就不粘了
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網頁空間、營銷軟件、網站建設、青浦網站維護、網站推廣。
原理是這樣:
用sql語句查詢后得到所有的記錄條數;
根據每頁顯示的條數得到總共有多少頁數;
通過url就是get得到當前第幾頁;
根據當前頁數和每頁顯示的條數得到當前頁顯示的數據的起始條數start_num和結束條數end_num;
最后 select * from talbel where 條件 limit start_num,end_num;
這時得到的結果就是當前頁需要顯示的內容,循環(huán)輸出就行了
不知道你下文如是怎么用的,不過看你的代碼,應該是以下的情況
比如說你拿到的頁是2,$pagesize是20, 那最后的結果是20,
最后一句的意思是自連接賦值,就是我=我+“,”
這個結果是給SQL語句使用的
SQL的使用的時候就是
SELECT title,date,.... FROM table_name WHERE 條件 LIMIT 你的page值(這里是20,) 20
具體類似可執(zhí)行的語句是
SELECT title,date,.... FROM table_name WHERE category=2 LIMIT 20, 20
希望能幫到你
用GET傳遞參數
如果有一個URL如:
那可以用$_GET['page']得到2這個值
?php
/*
$recordcount 總數據量
$pernumber 每頁顯示記錄數
$pagelong 顯示頁碼的長度
*/
function showpage($pagecount,$pagelong=5){
if(!isset($_GET['page'])){
$_GET['page']='';
}
if(!isset($p)){
$p='';
}
if($_GET['page']1||$_GET['page']==""){
$_GET['page']=1;
}
//總頁數小于等于頁碼長度
if($pagecount=$pagelong){
for($i=1;$i=$pagecount;$i++){
if($i==$_GET['page']){
$p=$p." span$i/span ";
}
else{
$p =$p." a href='".get_url($i)."' hidefocus$i/a ";
}
}
}
//總頁數大于頁碼長度
else{
//循環(huán)頁碼數
for($i=$_GET['page'];$i=$_GET['page']+$pagelong-1;$i++){
//判斷是否在當前頁
if($i==$_GET['page']$_GET['page']!=1){
//輸出 當前頁前面的
for($i=$_GET['page']-5;$i$_GET['page'];$i++){
if($i=1){
$p=$p." a href='".get_url($i)."' hidefocus$i/a ";
}
}
$p=$p." span$i/span ";
}
else{
if($i==$_GET['page']){
$p =$p." span$i/span ";
}
else{
$p =$p." a href='".get_url($i)."' hidefocus$i/a ";
}
}
//總頁數-當前頁碼 小于 頁碼長度
if(($pagecount-$_GET['page'])=$pagelong){
for($i=$_GET['page']+1;$i=$pagecount;$i++){
$p=$p." a href='".get_url($i)."' hidefocus$i/a ";
}
break;
}
//當前頁大于等于總頁數
if($_GET['page']=$pagecount){
break;
}
}
}
//當前頁不是首頁
if($_GET['page']!="1"){
$a=$_GET['page']-1;
//if($_GET['page']4){
$p = " a href='".get_url(1)."' hidefocus/a a href='".get_url($a)."' hidefocus/a ".$p;
//}
}
//當前頁不是尾頁
if($_GET['page']$pagecount){
$a=$_GET['page']+1;
if($_GET['page']$pagecount-2){
$p = $p." a href='".get_url($a)."' hidefocus/a a href='".get_url($pagecount)."' hidefocus/a ";
}
else{
$p = $p." a href='".get_url($a)."' hidefocus/a ";
}
}
return $p;
}
//獲取分頁的URL
function get_url($page){
//默認的
if(empty($_SERVER['QUERY_STRING'])){ //empty變量是否為空 $_SERVER['QUERY_STRING'] URL中第一個問號?之后的內容
return $_SERVER['PHP_SELF'].'?page='.$page; //$_SERVER['PHP_SELF'] 當前正在執(zhí)行腳本的文件名
}
//有分頁的
elseif(strpos($_SERVER['QUERY_STRING'],'page')!== false){ //strpos獲取字符串page首次出現位置(判斷是否有參數page)
//有參數
if(strpos($_SERVER['QUERY_STRING'], '') !== false){ //有多個參數
$u = explode('page', $_SERVER['QUERY_STRING']);
return $_SERVER['PHP_SELF'].'?'.$u[0].'page='.$page;
}
//無參數的
else{
return $_SERVER['PHP_SELF'] . '?page=' . $page;
}
}
//有參數,無分頁的
else{
return $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'page='.$page;
}
}
有種偷懶的做法。就是文章太長。就是顯示一段,隱藏另外段落。
文章在后臺發(fā)布肯定是通過WEB編輯器進行的,對吧!你可以在編輯器上增加文章分頁顯示功能。具體的原理是這樣的,你在想要分頁的地方插入你自己定義的標記符號比如#page#,插入到數據庫中的HTML代碼中就會有這樣的#page#的代碼。在前臺看的時候,通過程序處理。把文字HTML中有#page#這樣的東西。進行下翻譯成文章分頁即可!有幾個#page#就可以判斷在當初在后臺設置過分幾頁顯示。生成一段JS代碼、控制DIV的顯示隱藏就可以實現分頁效果。
分頁的原理在所有的WEB語言幾乎都是差不多的!下面我來說說吧
如果你能好好研究我寫的東西,分頁將不再是問題
分頁有兩種情況
一、文件數據的分頁
二、數據庫數據的分頁
其中數據庫數據的分頁用得最多,原理也是差不多,只不過獲得數據的方法不同。
下面主要說一下數據庫數據的分頁
首先我們要明白見個量
a、頁面上要顯示的鏈接數$links(我們這里討論的不是只有上一頁和下一頁的情形,我們討論百度圖片中的分頁效果)
b、每一頁要顯示的記錄數$page_messages即一頁中顯示的數據的多少
c、當前的頁碼$page
d、數據庫中總的記錄數(不是必要,但是為保證生成分頁條正確,我們也應該考慮)
有了上面的四個量我們就可以通過他們得出分頁條的開始頁碼和結束頁碼,以及
select * from tables where fields=value limit offset,numbers中的offset和numbers
其中offset=($page-1)*$page_messages
numbers=$page_messages
其次,我們要明白在點擊分頁條中的鏈接時我們應該將相應的頁碼傳遞到后臺去
即$page傳遞PHP文件,通過它來動態(tài)的生成offset,重新從數據中讀取數據
最后,在模板文件中或者直接在HTML中通過循環(huán)控制語句,將數據顯示出來
分頁條中頁碼的計算須要考慮多方面,這里不做詳述,我會在最后給你一個分頁的源碼,由于這個分頁的源碼是用面向對象寫的,所以有點難,不過你只需會用這個類的最后一個方法理解它的每一個參數就可以實現分頁.
這個分布類用到一個數據操作類所以一并給出
?php
header("content-type:text/html;charset=utf-8");
class DB{
static private $obj = null;
static private $db_link = null;
static private $dbhost;//數據庫服務器地址
static private $dbuser;//數據庫用戶名
static private $dbpass;//數據庫密碼
static private $dbname;//數據庫名
static private $dbcharset;//數據庫編碼
static public function ConstZhi($host,$user,$password,$dbname,$dbcharset){
self::$dbhost=$host;
self::$dbuser=$user;
self::$dbpass=$password;
self::$dbname=$dbname;
self::$dbcharset=$dbcharset;
}
static public function Instance(){
if ( null == self::$obj ){
$class = __CLASS__;
self::$obj = new $class;
}
return self::$obj;
}
function __construct(){
self::$db_link=mysql_connect(self::$dbhost,self::$dbuser,self::$dbpass);
@mysql_select_db(self::$dbname, self::$db_link ) or die("數據庫名錯誤,請查正!".mysql_error());
@mysql_query( 'SET NAMES '.self::$dbcharset,self::$db_link ) or die("編碼設置錯誤".mysql_error());
}
function __destruct(){
self::Close();
}
static public function Close(){
if ( is_resource( self::$db_link ) ){
@mysql_close( self::$db_link );
}
self::$db_link = null;
self::$obj = null;
}
static public function EscapeString( $string ){
self::Instance();
return @mysql_real_escape_string( $string, self::$db_link );
}
static public function GetInsertId(){
self::Instance();
return intval( @mysql_insert_id(self::$db_link) );
}
static public function Query( $sql ){
self::Instance();
$result = @mysql_query( $sql, self::$db_link );
if ( $result ){
return $result;
}
self::Close();
return false;
}
static public function doInsert( $table , $arr1 ){
$sql_fd = '';
$sql_v = '';
foreach ( $arr1 as $k = $v ) {
$sql_fd .= ", `$k` ";
$sql_v .= ", '".self::EscapeString( $v )."' ";
}
$sql_fd = '('.trim( $sql_fd , ',' ).')';
$sql_v = '('.trim($sql_v , ',').')';
$sql = "INSERT INTO `$table` ".$sql_fd.' VALUES '.$sql_v;
if ( mysql_query($sql) ) {
return mysql_insert_id();
}
return false;
}
static public function doDelete( $table , $val , $fd = 'id' ) {
self::Instance();
$sql = "DELETE FROM `$table` WHERE `$fd` = ".self::EscapeString($val) ;
return self::Query( $sql , self::$db_link );
}
/**
* doDeleteXu() made by xudianyang
* */
static public function doDeleteXu( $table , $val , $fd = 'id' ) {
self::Instance();
$sql = "DELETE FROM `$table` WHERE `$fd` = ".$val;
return self::Query( $sql , self::$db_link );
}
//UPDATE `sina`.`sohu_url` SET `state` = '1' WHERE `sohu_url`.`id` =1 LIMIT 1 ;
static public function doUpdate( $table , $arr1 , $arr2 ){
self::Instance();
$sql_set = '';
foreach ( $arr2 as $k = $v ) {
$sql_set .= ", `$k` = '".self::EscapeString($v)."' ";
}
$sql_set = trim( $sql_set , ',' );
$arr_w = array();
foreach ( $arr1 as $k = $v ){
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
$sql = "UPDATE `$table` SET $sql_set WHERE ".implode('and' , $arr_w);
if ( self::Query($sql) )
return true;
return false;
}
static public function getRows( $table , $arr=array() , $one = 0 ) {
self::Instance();
if ( empty($arr) ){
$sql = "SELECT * FROM `$table`";
}else{
$arr_w = array();
foreach ( $arr as $k = $v ){
if(is_numeric($v))
$arr_w[] = " `".self::EscapeString($k)."` = ".self::EscapeString($v);
else
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
$sql = "SELECT * FROM `$table` WHERE ".implode(' and' , $arr_w)." ORDER BY `id` ASC";
//echo $sql ;
}
if ( $ret = self::Query($sql) ){
if ( $one ){
return mysql_fetch_assoc( $ret );
}else{
$arr_out = array();
while( $row = mysql_fetch_assoc( $ret ) ){
$arr_out[] = $row;
}
return $arr_out;
}
}
return false;
}
static private function makeWhere( $arr ){
$arr_w = array();
foreach ( $arr as $k = $v ){
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
return implode('and' , $arr_w);
}
static public function getCount( $table , $arr ){
if ( is_array($arr) and count($arr) 0 ) {
$sql = "SELECT COUNT(*) n FROM `$table` WHERE ". self::makeWhere($arr);
if ( $ret = self::Query($sql) ){
$tmep = mysql_fetch_assoc( $ret );
return $tmep['n'];
}
}
return false;
}
/**
* getCountXu() made by xudianyang
* */
static public function getCountXu( $table , $arr ){
$sql = "SELECT COUNT(*) n FROM `$table`" ;
if ( $ret = self::Query($sql) ){
$tmep = mysql_fetch_assoc( $ret );
return $tmep['n'];
}
return false;
}
static public function getQueryResult( $sql, $one=false ){
$ret = array();
if ( $result = self::Query($sql) ){
while ( $row = mysql_fetch_assoc($result) ){
//$row = array_change_key_case($row, CASE_LOWER);
if ( $one ){
$ret = $row;
break;
}else{
array_push( $ret, $row );
}
}
@mysql_free_result( $result );
}
return $ret;
}
}
可以在類中配置你自己的數據庫服務器相應的賬號和密碼
?php
class Fenye{
private $mDB;
public function __construct(DB $obj){
$this-mDB=$obj;
}
/**
* 計算總共的頁數
*
* @param string $table 表名
* @param array $conditon 查詢的條件
* @param integer $message_number 每頁顯示的記錄數
* @return array */
public function getPageAll($table,$condition,$message_number){
if($condition == ""){
$recodernum=$this-mDB-getCountXu($table,$condition);
}else{
$recodernum=$this-mDB-getCount($table,$condition);
}
$arrnumber['all']=$recodernum;
$arrnumber['page_all']= ceil($recodernum/$message_number);
return $arrnumber;
}
/**
* 生成查詢的SQL語句
*
*@param string $table 需要查詢的表
*@param array $conditon 查詢的條件
*@param array $arr 查詢的字段所組成的一個數組
*@param mixed $order 表示排序方式
*@param array $limit 表示指定查詢記錄的數目
*@return string
**/
public function createSQL($table,$condition,$arr,$order,$limit){
if ($table == ""){
return false;
}else{
$str1="";
$str2="";
$str3="";
$str4="";
$n=0;
$m=0;
$p=0;
if ($arr == ""){
$str1="*";
}else{
foreach ($arr as $value){
$p++;
if ($p == 1){
$str1.=$value;
}else{
$str1.=",".$value;
}
}
}
if($condition == ""){
$str2="";
}else{
foreach ($condition as $key = $value){
$n++;
if ($n == 1){
$str2.="where ".$key."="."'".$value."'";
}else{
$str2.=" and ".$key."="."'".$value."'";
}
}
}
if($order == ""){
$str3="";
}else{
foreach ($order as $key = $value){
$m++;
if ($m == 1){
$str3.=" order by ".$key." ".$value;
}else{
$str3.=",".$key." ".$value;
}
}
}
if ($limit == ""){
$str4="";
}else{
$str4="limit ".$limit[0].",".$limit[1];
}
$sql="select ".$str1." from ".$table." ".$str2.$str3." ".$str4;
}
return $sql;
}
/**
*獲取當前頁面應有的信息
*
*@param integer $page 當前的頁碼
*@param integer $message_number 每頁顯示的記錄數
*@param integer $pageall 總共的頁數
*@param string $sql 待執(zhí)行的SQL語句
*@return array
*/
public function getPageInformation($page,$page_all,$message_number,$sql){
$start=0;//開始的頁碼
$end=0;//結束的頁碼
$arr=array();//返回的結果儲存在這個數組中
$left=intval($message_number/2);
$start=$page-$left;
$end=$page+$left;
if($message_number = $page_all){//判斷總的頁數是否大于每一頁的鏈接數
if($end = $message_number){
$end=$message_number;
}
}else{
$end=$page_all;
}
if($start = 0){
$start=1;
}
if($end = $page_all){
$start=$page_all-$message_number+1;
if($start = 0){
$start=1;
}
$end=$page_all;
}
if($page 1){
$page=1;
$start=1;
if($page_all = $message_number){
$end=$page_all;
}
$end=$message_number;
}
if($page = $page_all){
$page=$page_all;
$start=$page-$message_number+1;
if($start = 0){
$start=1;
}
$end=$page;
}
$result=$this-mDB-Query($sql);
if($result){
for(;;){
$zhi=mysql_fetch_assoc($result);
if($zhi){
$arr1[]=$zhi;
}else{
break;
}
}
}
$arr['start']=$start;
$arr['end']=$end;
$arr['page_all']=$page_all;
$arr['page']=$page;
$arr['content']=@ $arr1;
return $arr;
}
/**
* 修改傳遞的頁碼使其合法
*
* @param integer $page 傳遞過來的頁碼
* @param integer $page_all 總的頁碼
* @return integer*/
public function checkPage($page,$page_all){
if($page 1){
$page=1;
}
if($page = $page_all){
$page=$page_all;
}
return $page;
}
/**
* 生成分頁條
*
* @param integer $page 當前頁碼
* @param integer $start 分頁條開始頁碼
* @param integer $end 分頁條結束的頁碼
* @param integer $page_all 總共頁碼數
* @param string $otherquery 需要傳遞的其他參數 如string=Publisher
* @return string
* */
public function createFenYeTiao($page,$start,$end,$page_all,$otherquery=''){
$str="";
if($page == 1){
$str.='首頁'." ".'上一頁'." ";
}else{
$str.="a href='?page=1".$otherquery."' target='_self'".'首頁'."/a"." ";
$str.="a href='?page=".($page-1).$otherquery."' target='_self'".'上一頁'."/a"." ";
}
for($i=$start;$i=$end;$i++){
if($page == $i){
$str.="a href='?page=".$page.$otherquery."' target='_self'".$page."/a"." ";
}else{
$str.="a href='?page=".$i.$otherquery."' target='_self'[".$i."]/a"." ";
}
}
if($page == $page_all){
$str.='下一頁'." ".'尾頁';
}else{
$str.="a href='?page=".($page+1).$otherquery."' target='_self'".'下一頁'."/a"." ";
$str.="a href='?page=".$page_all.$otherquery."' target='_self'".'尾頁'."/a"." ";
}
return $str;
}
/**
* 完成分頁所有操作
*
*@param string $table 需要查詢的表
*@param array $conditon 查詢的條件
*@param array $arrField 查詢的字段所組成的一個數組
*@param mixed $order 表示排序方式
*@param integer $page 當前頁碼
*@param integer $mess_num 每頁顯示的記錄數
*@param integer $page_link 顯示的鏈接數目
*@param string $otherquery 點擊分頁頁碼時需要傳遞的其他參數,默認為空
*@return array 包括分頁條和從數據庫讀得的數據分別保存在索引為content和fenyetiao的兩個元素中,注意
*索引為content的元素為一個二維數組*/
public function FinishFenYe($table,$condition,$arrField,$order,$page,$mess_num,$page_link,$otherquery){
$allnumber=$this-getPageAll($table,"",$mess_num);
$page_all=$allnumber['page_all'];
$page=$this-checkPage($page,$page_all);
$limitoffet=($page-1)*$mess_num;
$limit=array($limitoffet,$mess_num);
$sql=$this-createSQL($table,$condition,$arrField,$order,$limit);
$resarr=$this-getPageInformation($page,$page_all,$page_link,$sql);
$resarr['page']=$this-checkPage($resarr['page'],$resarr['page_all']);
$fenyetiao=$this-createFenYeTiao($resarr['page'],$resarr['start'],$resarr['end'],$resarr['page_all'],$otherquery);
$resarr['fenyetiao']=$fenyetiao;
$resarr['all']=$allnumber['all'];
return $resarr;
}
}
?
祝你成功!