免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1969 | 回复: 6
打印 上一主题 下一主题

[数据库 分页] 一个关于PHP分页的问题!!  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-28 19:08 |只看该作者 |倒序浏览
在网上找到一片关于分页的文章:
http://www.pconline.com.cn/pcedu/empolder/wz/php/10305/164933.html
于是照搬过来用,可是发现一个问题始终无法解决。
pageft.php基本上没有改动,一般在翻页的时候,语句都为类似
$result=mysql_query("select * from radacct limit $firstcount,$displaypg ";
可是我在搜索时必须加上where进行判断,例如:
$result = mysql_query("select radacctId,username from radacct where username='$_POST[username]' and AcctStopTime!='0000-00-00 00:00:00' limit $firstcount,$displaypg";
在照上面的第一条语句的时候,翻页是顺利的,但是只要加上WHERE的条件,就只能显示第一页搜索结果,不管是下一页,还是翻页以后再回去,都是空白。查了很多网站都是没有加WHERE的翻页,所以问题没有办法自己解决,也不知是不是参数无法传递的问题,恳请大家帮帮我的忙吧!

在网上还找到一个方法,说是把查询条件设为变量:
$search = "username='$_POST[username]' and AcctStopTime!='0000-00-00 00:00:00'";
$result = mysql_query("select radacctId,username from radacct where $search limit $firstcount,$displaypg";

可是我试了之后也不行,真是郁闷。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-08-28 20:12 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

你在查询前,把sql语句直接echo出来,然后用phpmyadmin看看,是否真的可以查询啊

论坛徽章:
0
3 [报告]
发表于 2005-08-28 23:14 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

多谢,我已经用echo看过查询了,现在问题是:
只能显示第一页搜索结果,不管是下一页,还是翻页以后再回去,都是空白。
第一页搜索,很正常显示10个结果,echo出的结果也是正确的:
select radacctId,username from radacct where username='njuf201'  and AcctStopTime!='0000-00-00 00:00:00' limit 0,10

但是点“后页”(page=2)等其他连接,结果是空的,而且echo出的结果是:
select radacctId,username from radacct where username='njuf201'  and AcctStopTime!='0000-00-00 00:00:00' limit -10,10

按道理应该是(limit 10,20)的,会不会是变量没有传递?请指教

论坛徽章:
0
4 [报告]
发表于 2005-08-28 23:21 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

查查程序。

肯定是程序有问题。

论坛徽章:
0
5 [报告]
发表于 2005-08-28 23:36 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

pageft.php代码如下:

<?php
//检查文件是否已加载
if(!function_exists(pageft)){
//定义函数$totle为数据总量,$displaypg为每页显示数
function pageft($totle,$displaypg,$url=''){

global $page,$firstcount,$pagenav,$_SERVER;

$GLOBALS["displaypg"]=$displaypg;
//用$_GET来接受页参数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}else{
$page=1;
}
//$_SERVER["REQUEST_URI"]访问此页面的URI(路径)
if(!$url){ $url=$_SERVER["REQUEST_URI"];}
//解析URI,获得数组形式传送给$parse_url
$parse_url=parse_url($url);
//$parse_url["query"],获得?后的变量
$url_query=$parse_url["query"];

if($url_query){
$url_query=ereg_replace("(^|&page=$page","",$url_query);


$url=str_replace($parse_url["query"],$url_query,$url);

//在URL后加page查询信息,但待赋值:
if($url_query) $url.="&page"; else $url.="page";
}else {
$url.="?page";
}

$lastpg=ceil($totle/$displaypg); //最后页,也是总页数
$page=min($lastpg,$page);
$prepg=$page-1; //上一页
$nextpg=($page==$lastpg ? 0 : $page+1); //下一页
$firstcount=($page-1)*$displaypg;

//开始分页导航条代码:
$pagenav="显示第 <B>;".($totle?($firstcount+1):0)."</B>;-<B>;".min($firstcount+$displaypg,$totle)."</B>; 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if($lastpg<=1) return false;

$pagenav.=" <a href='$url=1'>;首页</a>; ";
if($prepg) $pagenav.=" <a href='$url=$prepg'>;前页</a>; "; else $pagenav.=" 前页 ";
if($nextpg) $pagenav.=" <a href='$url=$nextpg'>;后页</a>; "; else $pagenav.=" 后页 ";
$pagenav.=" <a href='$url=$lastpg'>;尾页</a>; ";

//下拉跳转列表,循环列出所有页码:
$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>;\n";
for($i=1;$i<=$lastpg;$i++){
if($i==$page) $pagenav.="<option value='$i' selected>;$i</option>;\n";
else $pagenav.="<option value='$i'>;$i</option>;\n";
}
$pagenav.="</select>; 页,共 $lastpg 页";
}
}
?>;

论坛徽章:
0
6 [报告]
发表于 2005-08-29 21:50 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

看起来,应该是变量传递的问题。建议使用52linux的方法,在调试的时候将$_GET打印出来看看,page是否有值。

论坛徽章:
0
7 [报告]
发表于 2005-08-29 23:29 |只看该作者

[数据库 分页] 一个关于PHP分页的问题!!

楼主,我冒昧地猜测,是你的sql语句写错了,而写错的原因就是:你对select语句的limit的用法理解错误
原帖由 "syncon" 发表:

但是点“后页”(page=2)等其他连接,结果是空的,而且echo出的结果是:
select radacctId,username from radacct where username='njuf201'  and AcctStopTime!='0000-00-00 00:00:00' limit -10,10

按道理应该是(limit 10,20)的,会不会是变量没有传递?请指教
NO!第二页按道理应该是(limit 10,10),第三页为(limit 20,10),也就是说,limit后的第二个参数$displaypg,即每页显示多少条记录是固定不变的,随着页数倍增的是第一个参数,即每页的起始记录:$firstcount。

另外,看你写的sql语句,我个人感觉很头疼——太乱了!变量与字符串搅在一起,而且用单引号来括起变量名!
可能因为我学php是从使用DW开始的,个人感觉DW自动生成的代码虽然并不高明,但有些却还是值得学习的。比如在本例中,我现在的做法肯定是在sql语句中不直接写入变量名,而是将sql语句先用sprintf语句格式化以后,再代入mysql_query()函数中:

  1. $username=$_POST['username'];

  2. $query_str=sprintf("select radacctId,username from radacct where username='%s' and AcctStopTime!='0000-00-00 00:00:00' limit %d,%d",$username,$firstcount,$displaypg);

  3. $result=mysql_query($query_str);
复制代码

个人意见,仅供参考。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP