学习了一段时间php 帮忙看看书写习惯,什么的

Awriter 2010-07-28 12:43:32
学习php快两个星期了,请各位高手帮忙看看下面的分页代码



看看有什么改进的,各方各面,包括书写习惯什么的都算上,呵呵





/*=====================================================
* 方法:getresult
* 功能:获取要显示的记录集
* 参数:$id,$column,$table,$where,$order,$ifcookie,$pagesize,&$page,$conn
* 说明:$ifcookie true使用cookie把总条数存入cookies
* 返回值:$result 结果集
====================================================*/
function getresult($id,$column,$table,$where,$order,$ifcookie,$pagesize,$page,$conn){
global $sum;
global $sumpage;
global $page;
if($ifcookie && isset($_COOKIE["p_c"])){
$sum=intval($_COOKIE["p_c"]);
}else{
$result=($conn->query("select count($id) from $table $where")) or printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
$row=$result->fetch_row();
$sum=$row[0];
if(empty($sum)){
closedatabase();
printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
exit();
}
if($ifcookie){setcookie("p_c",$sum);}
}
$sumpage=ceil($sum/$pagesize);
if($page<1){$page=1;}
if($page>$sumpage){$page=$sumpage;}
$offset=($page-1)*$pagesize;
$result=$conn->query("select $column from $table $where $order limit $offset,$pagesize");
if ($mysqli->errno <> 0 ) {
closedatabase();
printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
}
return $result;
}
...全文
140 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
caizhuguanguan 2010-07-29
  • 打赏
  • 举报
回复
不错。。逼我正规点
lifuning_911 2010-07-29
  • 打赏
  • 举报
回复
路过,学习了!
helloyou0 2010-07-29
  • 打赏
  • 举报
回复
1) 3句global都可以不用. page是参数,另2个后面都直接赋值了.
2) if(empty($sum)){
closedatabase();
printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
exit();
}
这里empty($sum) 不一定就是出错, 也可能就是返回空集

另这里和下面的
if ($mysqli->errno <> 0 ) {
closedatabase();
printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
}
两处不一致,同样出错,一个是返回,一个直接exit了.

3) 嗯,如果要保存sum, 似乎也是先考虑session较好

4) 参数顺序可以调整一下, 有些可以加上缺省值, 这样可以简化调用的code
$conn这样必须有的参数放在前面

5) $pagesize 最好检查一下, 如果为负或0, 会导致错误, 当然你可以放在外面检查, 但里面放一个更安全点.

6) 学了2个星期,写得非常好
hardworkyy 2010-07-28
  • 打赏
  • 举报
回复
新手 学习学习
Awriter 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xuzuning 的回复:]
既然 $page 作为参数传入,那么又何必 global $page;

说明中有 &$page
那么声明中应为
function getresult($id,$column,$table,$where,$order,$ifcookie,$pagesize,&$page,$conn){

如果我是在函数里调用getresult呢?

$mysqli 没有赋值,也没有……
[/Quote]

明白了

$page以前是引用传入的,后来改成全局了,没有改说明

cookie if($ifcookie && isset($_COOKIE["p_c"])){ 这句判断了

$mysqli 这个书写错误,应该是$conn,以调整



如果我是在函数里调用getresult呢? 这句不太懂,您有时间,能讲讲吗?谢谢了
xuzuning 2010-07-28
  • 打赏
  • 举报
回复
既然 $page 作为参数传入,那么又何必 global $page;

说明中有 &$page
那么声明中应为
function getresult($id,$column,$table,$where,$order,$ifcookie,$pagesize,&$page,$conn){

如果我是在函数里调用getresult呢?

$mysqli 没有赋值,也没有声明为全局变量

把总条数存入cookies 是败笔,你如何确定我的浏览器支持cookie呢?

ping200388 2010-07-28
  • 打赏
  • 举报
回复
新手,学习
amani11 2010-07-28
  • 打赏
  • 举报
回复
$mysqli应该是局部的吧

没看到你哪里有申明

如果你的代码是完整给出的

测试时候,加上exit吧,不要关闭警告、提示
amani11 2010-07-28
  • 打赏
  • 举报
回复

//return之前的代码
//if ($mysqli->errno <> 0 ) {
closedatabase();
printf("Statement failed %d: (%s) %s\n" ,$mysqli->errno,$mysqli->sqlstate,$mysqli->error);
// }

//把if条件取消,再执行一次代码试试
//不是无缘无故问的,自己看看吧




Awriter 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 amani11 的回复:]
请问运行过么?


$mysqli这个没问题?
[/Quote]

测试了,没问题, 高手明示,哪里有可能出错
Awriter 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dingsongtao 的回复:]
你这种方式没什么好改的。
你这里面有一个问题,就是使用cookie把总条数存入cookies。
比如,新闻页有100条,产品页有50条,用户既浏览了新闻页,又浏览了产品页,你说会出现什么情况????
[/Quote]

其实这个cookie 的名称应该是作为参数穿进去的,用的asp 叶子的思路
Awriter 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kyzy_yy_pm 的回复:]
还有不知道你为什么一出错就关数据库呢?这个没必要吧
[/Quote]


这个不知道,反正关了,应该不会出什么大问题, 等高手明示一下
kyzy_yy_pm 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dingsongtao 的回复:]
比如,新闻页有100条,产品页有50条,用户既浏览了新闻页,又浏览了产品页,你说会出现什么情况????
[/Quote]+
的确,那样的话都用以个cookie会混的,最好不要用cookie,而是随时取得的,这样更新方面比较好,不会出现cookie混乱的错,如果非要用cookie的话推荐你将cookie存的记录数的key是有外部传参进来的,这样就不会出现cookie混乱的情况了
kyzy_yy_pm 2010-07-28
  • 打赏
  • 举报
回复
楼主的方法是否是通过域名地址的方式传啊(HTTP的包装不支持可写的连接)
amani11 2010-07-28
  • 打赏
  • 举报
回复
请问运行过么?


$mysqli这个没问题?
Dleno 2010-07-28
  • 打赏
  • 举报
回复
你这种方式没什么好改的。
你这里面有一个问题,就是使用cookie把总条数存入cookies。
比如,新闻页有100条,产品页有50条,用户既浏览了新闻页,又浏览了产品页,你说会出现什么情况????
kyzy_yy_pm 2010-07-28
  • 打赏
  • 举报
回复
还有不知道你为什么一出错就关数据库呢?这个没必要吧
kyzy_yy_pm 2010-07-28
  • 打赏
  • 举报
回复
不错,挺好的,将总条数存到cookie中提高性能,不过也许有时候会出错(不错出错的几率很小),也就是突然总记录数变了

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧