发新话题
打印

[原创] php分页轻松搞定(PHP 分页函数+数据类)

本主题由 hzqbbc 于 2008-9-16 22:07 加入精华

php分页轻松搞定(PHP 分页函数+数据类)

最近用ajax+php 写了一个基于web 的小程序(如下图),发现php 真的比perl 方便不少。在写码代过程中,自己写了一个分页的函数
现在把代码贴出来跟大家一起分享  开源易有 http://www.yiyou.org (复制时请不要去掉开源易有的网址)
数据库类
复制内容到剪贴板
代码:
<?php
//this file name is :dbclass.php ,please include in your php file.
if (!defined(ACCESS)) {
        echo "can't access";
        exit;
}
class Db {
        function dbconn($host,$dbuser,$dbpass,$dbname) {
                mysql_pconnect($dbhost,$dbuser,$dbpass) or die ("can't connect to mysql server".mysql_error());
                mysql_select_db($dbname) or die ("can't select db:".mysql_error());
                $this->q('set names "utf8"');
        }
        function q($sql){
                $result=mysql_query($sql) or die ("can't query:".mysql_error());
                if (!$result){
                        die ("can't query server:".mysql_error());
                }
                return $result;
        }
        function fetch_all($sql) {
                $result=$this->q($sql);
                while($row=mysql_fetch_assoc($result)){
                        $rows[]=$row;
                }
                mysql_free_result($result);
                return $rows;
        }
        function sum($sql){
                $result=$this->q($sql);
                $rows=mysql_num_rows($result);
                mysql_free_result($result);
                return $rows;
        }
        function query($sql){
                mysql_db_query($sql);
        }
        //$array_hash=$db->paging($recordofpage,$sql);
        function paging($rop,$sql){
                //get page
                $page=isset($_REQUEST['page'])?intval($_REQUEST['page']):1;
                $total=$this->sum($sql);//all records.
                $pagenum=ceil($total/$rop); //get page total
                $page=min($pagenum,$page); // if request page > pagenum ,then fix it.
                $page=max(1,$page); //if request page < 1 then fix it.
                $rstart=($page-1)*$rop;
                //$rend=$page*$rop;
                //$sql.=" limit $rstart,$rend";
                                //上面行有错,下面是修正
                $sql.=" limit $rstart,$rop";
                $rows=$this->fetch_all($sql);
               
                $rr['total']=$total;
                $rr['pagenum']=$pagenum;
                $rr['crpage']=$page;
                $rr['rows']=$rows;
                $rr['rop']=$rop;
                return $rr;
        }
}
?>
函数:
复制内容到剪贴板
代码:
<?php
//this file name is :lib.php
function makepaging($rr,$href){
//link this: $herf='javascript:page('LIST','inquiry.php?page=%P%');
//or :$herf='inquiry.php?page=%P%';
$pre=$rr['crpage']-1;
$next=$rr['crpage']+1;
$prelink=str_replace("%P%",$pre,$href);
$nextlink=str_replace("%P%",$next,$href);
?>
        <div align="center">
        <?php echo $rr['total'] ?> 条记录,每页[<?php echo $rr['rop']?>]条,当前第[<?php echo $rr['crpage'] ?>]页
        <a href="<?php echo $prelink?>">上一页</a>        <a href="<?php echo $nextlink ?>">下一页</a>        </div>
<?php } //end function?>
调用方法:
复制内容到剪贴板
代码:
<?php
require_once("dbclass.php");
require_once("lib.php");
$db=new Db;
$db->dbconn('yourhost','username','passwd','mydb');
$SQL=" select * FROM yourtable";
$rr=$db->paging(20,$SQL); //  20条记录每页,注意SQL 里不能有limit 关键字
$rows=$rr['rows']; //取得每页的所有记录,
for($i=0;$i<count($rows);$i++){
//这里输出你的所有记录,假设数据库记录如下:
// name|age
//fy  | 100
// zs | 200
//  $rows[0]=array(name=>fy,age=>100);
//$rows[1]=array(name=zs,age=>200);
echo $rows[$i]['name'];
}
$href='query.php?page=%P%'
makepaging($rr,$href);  //输出分页
?>
paging 方法返回简介:
$rr['total']// 总共记录数
$rr['pagenum']// 总共的页数
$rr['crpage'] 当前页
$rr['rows']// 该页里的所有记录,数组
$rr['rop']// 每页多少条记录

[ 本帖最后由 fengyong 于 2008-9-18 09:30 编辑 ]
附件: 您所在的用户组无法下载或查看附件
开源易有
http://www.yiyou.org/

TOP

yong哥厉害啊。。。越来越厉害了。景仰中
请引用或摘抄本站文章信息的朋友,保留本站链接及作者信息,保护版权,谢谢。

构建高性能大容量开源邮件系统- ExtMail

Postfix在中国官方网站

TOP

  都是叼虫小技,那能与你相比
开源易有
http://www.yiyou.org/

TOP

不错,学习了。。。。。。。。。。支持下  

TOP

发新话题