php分页实现方法

本文介绍了一种基于服务器端的分页查询实现方法,通过设定每页显示20条记录,并详细解释了如何根据客户端请求的页码计算记录范围,以及如何在客户端生成页码导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现要求:将得到的检索结果,以每页20条记录输出到客户端。(每次输出的上限为20)

实现方法:

  • 服务器端

             例:实现检索方法,方便客户端调用。  返回$result(20条记录) 

            $pagingmin = ($page_id-1* 20;//根据客户端传回的page_id确定需要输出的记录id最小值
        
$pagingmax = $page_id * 20;//根据客户端传回的page_id确定需要输出的记录id最大值

function doOrderInfoSearch($page_id){
        
global $db;
        
$nowdate = getNowDateYYYYMMDD();

        
$SQL = "SELECT c.ORDER_ID, ".
            
"c.CREATE_DATE, ".
            
"c.ORDER_FIRST_NAME, ".
            
"c.ORDER_LAST_NAME, ".
            
"c.ORDER_ADDRESS, ".
            
"c.PAYMENT_METHOD_ID, ".
            
"SUM(a.PRODUCT_COUNT*b.PRODUCT_PRICE) AS amount, ".
            
"c.ACTUAL_SEND_DATE ".
            
"FROM order_product_tbl a, product_master b,order_master c ".
            
"WHERE TRUE ";
        
        
if($this->create_date <> "")$SQL .=  " and c.CREATE_DATE='$this->create_date'";
        
if($this->delivery_date <> "")$SQL .=  " and c.DELIVERY_DATE='$this->delivery_date'";
        
        
if($this->delivery_flag == DELIVERY_STATE_ALL)$SQL .= "";
        
if($this->delivery_flag == DELIVERY_STATE_UNDO)$SQL .= " and c.ACTUAL_SEND_DATE > $nowdate";
        
if($this->delivery_flag == DELIVERY_STATE_DOWN)$SQL .= " and c.ACTUAL_SEND_DATE < $nowdate";
        
        
if($this->order_status == ORDER_STATUS_ALL)$SQL .=  "";
        
if($this->order_status == ORDER_STATUS_COMMON)$SQL .=  " and c.ORDER_STATUS=".ORDER_STATUS_COMMON;
        
if($this->order_status == ORDER_STATUS_CANCEL)$SQL .=  " and c.ORDER_STATUS=".ORDER_STATUS_CANCEL;
        
        
if($this->payment_flag == PAYMENT_FLAG_ALL)$SQL .=  "";
        
if($this->payment_flag == PAYMENT_FLAG_COMMON)$SQL .=  " and c.PAYMENT_FLAG=".PAYMENT_FLAG_COMMON;
        
if($this->payment_flag == PAYMENT_FLAG_CANCEL)$SQL .=  " and c.PAYMENT_FLAG=".PAYMENT_FLAG_CANCEL;
        
        
$SQL.=" and a.PRODUCT_ID=b.PRODUCT_ID and a.ORDER_ID = c.ORDER_ID group by c.ORDER_ID";
        
$rs=$db->query($SQL);
        
$pagingmin = ($page_id-1* 20;
        
$pagingmax = $page_id * 20;
        
$result = array();
        
if ((! DB::isError($rs))) {
            
$cntIndex = 0;
            
$rowIndex = 0;
            
while ($row = $rs->fetchRow()){
                
if($rowIndex >= $pagingmin && $rowIndex < $pagingmax){
                    
$row = Common_record($row);
                    
$result[$cntIndex= $this->getRecord($row);
                    
$cntIndex++;
                }
                
$rowIndex++;
            }
            
$this->pagenum = ceil($rs->numRows()/20);//将总计页数输出到客户端为生成页码序列提供初始值
            
return $result;
            
        }
        
    }

 

  • 客户端

        1调用doOrderInfoSearch($page_id)将返回值显示到<table>中即可。

       2 生成页码序列方法:将<div id='setpage'></div>写入htm

<script type="text/javascript"> 
<!-- 
var totalpage,pagesize,cpage,count,curcount,outstr; 
//初期化pageNum 
cpage = <?=$page_id?>
totalpage 
= <?=$searchcase->pagenum?>
pagesize 
= 10
outstr 
= ""
function gotopage(target) 
{     
    cpage 
= target;    
    doSubmitWithModeAndPage(
'page.php?id=19','DO_SEARCH',cpage);

}
 
function setpage() 

    
if(totalpage<=10)
        
for (count=1;count<=totalpage;count++
        
{    if(count!=cpage) 
            

                outstr 
= outstr + "<a href='#' onclick='gotopage("+count+")'>"+count+"</a>"
            }
else
                outstr 
= outstr + "<span class='current' >"+count+"</span>"
            }
 
        }
 
    }
 
    
if(totalpage>10){
        
if(parseInt((cpage-1)/10== 0
        
{             
            
for (count=1;count<=10;count++
            
{    if(count!=cpage) 
                

                    outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+count+")'>"+count+"</a>"
                }
else
                    outstr 
= outstr + "<span class='current'>"+count+"</span>"
                }
 
            }
 
            outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+count+")'> next </a>"
        }
 
        
else if(parseInt((cpage-1)/10== parseInt(totalpage/10)) 
        
{     
            outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+(parseInt((cpage-1)/10)*10)+")'>previous</a>"
            
for (count=parseInt(totalpage/10)*10+1;count<=totalpage;count++
            
{    if(count!=cpage) 
                

                    outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+count+")'>"+count+"</a>"
                }
else
                    outstr 
= outstr + "<span class='current'>"+count+"</span>"
                }
 
            }
 
        }
 
        
else 
        
{     
            outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+(parseInt((cpage-1)/10)*10)+")'>previous</a>"
            
for (count=parseInt((cpage-1)/10)*10+1;count<=parseInt((cpage-1)/10)*10+10;count++
            
{         
                
if(count!=cpage) 
                

                    outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+count+")'>"+count+"</a>"
                }
else
                    outstr 
= outstr + "<span class='current'>"+count+"</span>"
                }
 
            }
 
            outstr 
= outstr + "<a href='javascript:void(0)' onclick='gotopage("+count+")'> next </a>"
        }
 
    }
     
    document.getElementById(
"setpage").innerHTML = "<div id='setpage'><span id='info'> Total "+totalpage+" Page | Page "+cpage+"</span>" + outstr + "</div>"
    outstr 
= ""
}
 
//--> 
</script> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值