读书人

大家看看小弟我的分页为什么不好用

发布时间: 2012-04-11 17:42:33 作者: rapoo

大家看看我的分页为什么不好用?
$sql_AZSQD= "select * from s_QZJX_AZSQD where ejdwbm= '$coid ' and substr(sblbdm,1,2)= '$id ' order by sqdbh desc ";
<?
if ($page== " ") { $page = 0; }
$count=10; //我现在暂时把记录总数写成10
$i=$count-1;
$msgnum=2;
$start = $page * $msgnum;
$end = $start + $msgnum;
if ($end > $i) $end=$i;
$totalpage=$i/$msgnum;
if ($page> $totalpage) { $page = $totalpage; }
if ($totalpage> round($totalpage)){$totalpage=round($totalpage)+1;}
else{$totalpage=round($totalpage);}
if ($page> 0){$row=$page*$msgnum + 1;}
if ($row== " ") {$row=1;}
?>

for ($i=$start; $i <$end; $i++)
{
//这里是读取记录
}

<?
$pagestr= " ";
if ($page> 0) $pagestr=$pagestr. " <a href=$thispage?lb=$lb&xlb=$xlb&kk=$kk&usr=$usr&page= ".($page-1). "> 上页 </a> - ";
$pagestr=$pagestr. "[第 ";
for ($i=0; $i <$totalpage; $i++) {
if ($i!=$page) {
$pagestr = $pagestr. " <a href=$thispage?lb=$lb&xlb=$xlb&kk=$kk&usr=$usr&page=$i> ".($i+1). " </a> ";
} else{
$pagestr = $pagestr. " <font color=red> ".($i+1). " </font> ";
}
}
$pagestr=$pagestr. " 页] ";
if ($page <($totalpage-1)) $pagestr=$pagestr. "- <a href=$thispage?lb=$lb&xlb=$xlb&kk=$kk&usr=$usr&page= ".($page+1). "> 下页 </a> ";
echo "共 ".$totalpage. " 页 ".$pagestr;

现在我的分页别的都好用,只是在第一页就把所有数据全读了出来,怎么能把数据分段呢?我不能用limit,因为是对oracle操作,我只想用这个for ($i=$start; $i <$end; $i++)循环来分段数据,谢谢大家,谁帮帮吧

[解决办法]
用adodb把,十分方便
[解决办法]
select * from (select rownum rm,s_QZJX_AZSQD.* from s_QZJX_AZSQD) where s_QZJX_AZSQD.ejdwbm= '$coid ' and s_QZJX_AZSQD.substr(sblbdm,1,2)= '$id ' and rm> =1 and rm <=10 ----oracle中取1到10行
[解决办法]
不通用的东西,不要用!

如果你的是MySQL,请使用传说中最前的分页功能——limit!!

如果是MSSQL活着其他的数据库,请使用镶嵌select语句分页!保证你用的爽!

嘿嘿,具体方法就是不公布,就是不公布~等我写完函数之后,一块贴出来吧
[解决办法]
"第一页就把所有数据全读了出来 "你如果存的是数组计算开始结束的下标不就好了
[解决办法]
$totalpage=$i/$msgnum;
if ($page> $totalpage) { $page = $totalpage; }
if ($totalpage> round($totalpage)){$totalpage=round($totalpage)+1;}
else{$totalpage=round($totalpage);}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

这里也有问题$page 会出现小数,我会这么写:

$totalpage=ceil($i/$msgnum);
if ($page> $totalpage) { $page = $totalpage; }

==================================



第一页全都出现,还是看这里到底怎么输出的,$start $end 具体是多少

for ($i=$start; $i <$end; $i++)
{
//这里是读取记录
}

================================
[解决办法]
晕了,这个是php+MySQl啊!

不用limit干什么?

select * from 表 where 条件 limit maxcount*(page-1),maxcount*page

里面maxcount就是你你也最多显示的条数,page是第几页……

当然了,第一页不能用这个,要用下面的这个

select * from 表 where 条件 limit maxcount

不用limit,难道你自己写子查询?不是多此一举?
[解决办法]

select * from talbe where 字段=XX order by yyy limit(每页记录数)
[解决办法]
我来贴一个我写的分页类程序, 共享一下.

<?php
/**
* 我写的分页类, 支持 PHP+MySQL+ADODB环境, php version > 4, MySQL version > 4.1.14(支持子查询)
* 用法:
* $sql= "select * from myTable ";
* $page= new Page($myADODBConnection, $sql, $_GET[ "pageNum "], "utf-8 ", 20);
* $page-> curPage();
* for($i = 0; $i < count($page-> rs); $i++){
*// 打印结果
* }
* $page-> pageLink($_SERVER[ 'PHP_SELF '], "pageNum ", "class=myLinkCSS ");
*
* +--------------------------------------+
* | 声明: |
* | 本代码可以自由使用在任何商业和非商业, 开源与非开源程序中, |
* | 任何人可以自由使用, 修改, 分发和再次分发, |
* | 您获得以上权利的前提条件是: 您在您的代码以及您的修改版本代码中, |
* | 必须完整的包含本声明的完整内容. |
* | |
* | 本程序原始版本(v1.0) 由 Alex Lee 完成, |
* | Alex Lee 具有此版本(v1.0)的所有权利以及以后版本的修改以及再发布权限 |
* | Email: wolfoumu@yahoo.com.cn |
* +--------------------------------------+
*
*/
class Page{
var $firstPage;// 起始页码, int
var $curPage;// 当前页码, int
var $prevPage;// 上一页, int
var $nextPage;// 下一页, int
var $pageSize;// 页面大小, int
var $totalPage;// 总页数, int
var $toatlItem;// 总记录数, int
var $encode// 设置编码, string

var $db;// 数据库链接句柄,
// 此处使用 adodb 链接数据库,
// 如果使用其他链接方式, 需要稍做改动 resource
var $sql;// 查询sql语句 string
var $rs;// 存放结果的结果集, array;


/**
* 构造函数, 检查和初始化变量
* 参数:
* $db:ADODB 数据库连接句柄
*$sql:select 查询sql
*$curpage:当前页面编码
* $encode:结果集编码
*$pageSize:页面大小
*/
function Page($db, $sql, $curpage = 1, $encode = "gbk ", $pageSize = 20){
$this-> db= $db;
$this-> firstPage= 1;
$this-> curPage= $curpage;
$this-> pageSize= $pageSize;
$this-> sql= $sql;
$this-> encode= $encode;
$this-> rs= NULL;

if(!$this-> db){
exit( "ERROR: invalid database connection ");
}
if(FALSE === strpos(strtoupper($this-> sql), "SELECT ")){
exit( "ERROR: invalid SQL: ".$this-> sql);
}
if(!is_int($this-> pageSize) || $this-> pageSize == 0){
$this-> pageSize = 20;
}

$this-> TotalPage();

if(empty($this-> curPage))$this-> curPage = $this-> firstPage;
if($this-> curPage > = $this-> totalPage)$this-> curPage = $this-> totalPage;


if($this-> curPage <= $this-> firstPage)$this-> curPage = $this-> firstPage;

$this-> nextPage= $this-> curPage == $this-> totalPage ? $this-> totalPage : $this-> curPage + 1;
$this-> prevPage= $this-> curPage == $this-> firstPage ? $this-> firstPage : $this-> curPage - 1;
}


/**
* 设置结果集编码
*/
function setResultEncode(){
if(!empty(trim($this-> encode))){
$this-> db-> Execute( "SET NAMES ' ".($this-> encode). " ' ");
}
}


/**
* 构造分页sql
*/
function prepareQuerySQL(){
$sql = $this-> sql;
if(FALSE !==($pos = strpos(strtoupper($sql), "LIMIT "))){
$sql = substr($this-> sql, 0, $pos);
}
$sql .= " LIMIT ".(($this-> prevPage - 1) * $this-> pageSize). ", ".$this-> pageSize;

return $sql;
}

/**
* 获取下一页记录
*/
function nextPage(){

$sql = $this-> prepareQuerySQL();

$this-> setResultEncode();

$hdl = $this-> db-> Execute($sql);
for($i = 0; !$hdl-> EOF; $i++){
$this-> rs[] = $hdl-> fields;
$hdl-> MoveNext();
}
}

/**
* 获取上一页记录
*/
function prevPage(){
$sql = $this-> prepareQuerySQL();

$this-> setResultEncode();

$hdl = $this-> db-> Execute($sql);
for($i = 0; !$hdl-> EOF; $i++){
$this-> rs[] = $hdl-> fields;
$hdl-> MoveNext();
}
}


/**
* 获取当前页记录, 此函数较上边两个函数常用
*/
function curPage(){

$sql = $this-> prepareQuerySQL();

$this-> setResultEncode();

if($hdl = $this-> db-> Execute($sql)){
for($i = 0; !$hdl-> EOF && $hdl; $i++){
$this-> rs[] = $hdl-> fields;
$hdl-> MoveNext();
}
}
}

/**
* 设置 总页数和总记录数
*/
function TotalPage(){

if(FALSE === ( $pos = strpos(strtoupper($this-> sql), "FROM "))){
exit( "ERROR: invalid SQL: ".$sql);
}
//$sql = "SELECT COUNT(*) AS totalItem ".substr($this-> sql, $pos);
$sql = "SELECT COUNT(*) AS totalItem FROM ( ".$this-> sql. ") a ";
$hdl = $this-> db-> Execute($sql);
if($hdl && !$hdl-> EOF){
$this-> totalItem = $hdl-> fields[ 'totalItem '];
$this-> totalPage = ceil($this-> totalItem / $this-> pageSize);
$this-> totalPage = $this-> totalPage <= 0 ? 1 : $this-> totalPage;
}else{
$this-> totalItem = 0;
$this-> totalPage = 1;
}
}


/**
* 返回分页的链接
* 参数:
*$url:链接地址,
*$arg:页码的参数名, 比如 page=2 中的page
*$style:链接的CSS, eg: class=mylink 或者 style= "{FONT:12px} "
* 返回: 链接字符串
*/
function pageLink($url, $arg, $style= " "){

$arr = parse_url($url);
$url = " ";
if(!empty($arr[ 'scheme '])) $url .= $arr[ 'scheme ']. ":// ";
if(!empty($arr[ 'user '])){
if(empty($arr[ 'pass '])) $url .= $arr[ 'user ']. "@ ";
else $url .= $arr[ 'user ']. ": ".$arr[ 'pass ']. "@ ";
}
if(!empty($arr[ 'host '])) $url .= $arr[ 'host '];
if(!empty($arr[ 'port '])) $url .= ": ".$arr[ 'port '];
if(!empty($arr[ 'path '])) $url .= $arr[ 'path '];



$line .= "共 ".$this-> totalItem. "条记录     共 ".$this-> totalPage. "页     第 ".$this-> curPage. "页     ";
if($this-> totalPage == 1){
$line .= "首页     上一页     ";
$line .= "下一页     末页 ";
}
else{
if($this-> curPage <= $this-> firstPage){
$line .= "首页     上一页     ";
$line .= " <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> nextPage. "> 下一页 </a>     <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> totalPage. "> 末页 </a> ";
}
if($this-> curPage > = $this-> totalPage){
$line .= " <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> firstPage. "> 首页 </a>     <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> prevPage. "> 上一页 </a>     ";
$line .= "末页     下一页     ";
}
if($this-> curPage > $this-> firstPage && $this-> curPage < $this-> totalPage){
$line .= " <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> firstPage. "> 首页 </a>     <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> prevPage. "> 上一页 </a>     ";
$line .= " <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> nextPage. "> 下一页 </a>     <a ".$style. " href= ".(empty($arr[ 'query ']) ? $url. "? " : $url. "? ".$arr[ 'query ']. "& ").$arg. "= ".$this-> totalPage. "> 末页 </a> ";
}
}
return $line;
}

}
?>
[解决办法]
太复杂了
[解决办法]
mark一下
[解决办法]
ROWNUM函数对查询结果按照顺序分配自增行序号
$sql_AZSQD= "SELECT * FROM (SELECT ROWNUM ID,s_QZJX_AZSQD.* FROM s_QZJX_AZSQD) A WHERE A.ID BETWEEN 10 AND 30 ";
[解决办法]
分页类应该把数据和html分开,表现内容应该用js去做。这样比较清晰。sql语句最好也不要放到类里。
[解决办法]
for ($i=0;$i <74;$i++)


74是什么值?,应该是你字段的总数,你的数据库s_QZJX_AZSQD表有74个字段?
你这样是不是只显示了一条记录?

读书人网 >PHP

热点推荐