最近用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 编辑 ]