用php编的一个分页的程序,不好用,请教高手! 有必要用一个二维数组来读吗?你可以用数据库的limit来分页处理!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to nbufo(网络小生) 谢谢你能回答我的问题,我是刚发现这个论坛的,就抱着试试看的心态,发了这篇贴子。以前到过几个论坛发过贴子,可大部分都不回应,所以就到这看看有没有帮助新手的高手。主要问题是我刚学php,还有很多地方不太明白,像你说的limit,我就不会用,你能不能说的更详细一些。 例如你每页显示3条select *from shijian limit 0,3这个就是显示从第一条到第三条记录select *from shijian limit 3,3这个就是第二页从第四条到第六条,依次类推,就可以实现分页了关于limit后面的两个参数如何计算出来你可以用 从第几条开始 = 当前页数*每页显示数-每页显示数; to nbufo(网络小生)我按着你说的用limit,又做了一个程序,如下:<?连接数据库$page_size=3; //(每页显示3个)if($page<=0){$page=1;}$nums=mysql_num_rows($result);$page_count=ceil($nums/$page_size);$offset=($page-1)*$page_size;$a="select * from shijian order by date desc limit $offset,$page_size"; //(按时间排序)$result=mysql_query($a) or die("浏览失败");$prevpage=$page-1;$nextpage=$page+1;echo "目前留言板上共有".$nums."条留言,本页列出了第".$offset."至".$page_count."条\n"."<br>"; //($page_count这个变量怎么不变呀,老是显示3,怎么才能让它跟着变呀)if ($page<=1) echo "第一页"." | ";else echo "<a href='$PATH_self?page=1'>第一页</a>"." | ";if ($page<2) echo "上一页"." | ";else echo"<a href='$PATH_self?page=$prevpage'>上一页</a>"." | ";if ($page+1>$page_count) echo "下一页"."<br>";else echo"<a href='$PATH_self?page=$nextpage'>下一页</a>"."\n<br>";while ($array=mysql_fetch_array($result)) { echo $array['delid']."\n"; echo $array['yonghu']."\n"; echo $array['mima']."\n"; echo $array['email']."\n"; echo $array['info']."\n"."<br>"; }?>显示的结果如下:(第一页的结果)目前留言板上共有8条留言,本页列出了第0至3条 第一页 | 上一页 | 下一页 8 ffff [email protected] 第八个例子 7 dsa [email protected] 第七个例子 6 00000 [email protected] 第六个例子 第二页的结果:目前留言板上共有8条留言,本页列出了第3至3条 第一页 | 上一页 | 下一页 5 123 [email protected] 第五个例子 4 wangwu [email protected] 第四个例子 3 lisi [email protected] 第三个例子 第三页的结果:目前留言板上共有8条留言,本页列出了第6至3条 第一页 | 上一页 | 下一页2 maroulong [email protected] 第二个例子 1 zcy [email protected] 第一个例子 $page_count=ceil($nums/$page_size);按照这样算当然一样喽$page_count=$page*$page_size;if($page_count>$nums) $page_count = $nums; 下面是对一个数组的分页,:),数组就是$result,研究研究咯~function page($page_num,$max_rec,$result){ for ($i=($page_num-1)*$max_rec;$i<$page_num*$max_rec;$i++) { if ($i>=count($result)) break; $page_rec[$i-($page_num-1)*$max_rec] = $result[$i]; } return $page_rec;}function get_page_infor($page_num,$max_rec,$result){ $page_infor = "<center>共<font color=red> ".count($result)." </font>条记录,每页<font color=red> ".$max_rec." </font>条记录,当前是第 <font color=red>$page_num</font> 页</center>"; echo $page_infor; return true;}function get_jump_interface($page_num,$max_rec,$result,$url){ if (count($result)%$max_rec == 0) $maxnum = count($result)/$max_rec; else $maxnum = ((int)(count($result)/$max_rec))+1; echo "<br><form name='pag' method='get' action =$url>"; if ($page_num!=1) { echo "<a href=",$url,"page_num=1>第一页</a> "; echo "<a href=",$url,"page_num=",$page_num-1,">前一页</a> "; } else echo "第一页 前一页 ";?> <select name=page_num onchange="pag.submit()"><? for ($i=1;$i<=$maxnum;$i++) { echo "<option value='$i'"; if ($i==$page_num) echo "selected"; echo ">$i</option>"; }?> </select> <? if ($page_num!=$maxnum) { echo " <a href=",$url,"page_num=",$page_num+1,">后一页</a> "; echo "<a href=",$url,"page_num=".$maxnum.">最后一页</a>"; } else echo "后一页 最后一页 "; echo "</form>"; return true;} 唉,写程序的时候还不知道要用,limit,看来要改咯~ to nbufo(网络小生)照你这个说的做我试了一下,可不好使,显示的内容是:第一页的结果是:目前留言板上共有8条留言,本页列出了第0至3条 第二页的结果是:目前留言板上共有8条留言,本页列出了第3(我想让这个变成4)至6条 第三页的结果是:目前留言板上共有8条留言,本页列出了第6(我想让这个变成7)至8条 而且最后显示的那页的"下一页"链接,还能链接,本应该显示出最后一页就应没了,这个的显示结果是:目前留言板上共有8条留言,本页列出了第9至8条 (其时已经没有记录了)(这样就能一直链接下去,这个9会每显示一页自动加3,如:12、15、18这样的变,8是不变的)我都做好几天了一直没通过,急死我了…… 在用limit查询的时候是这样的limit 0,4是从第一条开始列出四条limit 3,4 就是从第四条开始列出四条所以你在显示的时候如果直接显示$offset 那肯定是少1的所以你要在显示从第几条到第几条的时候加1if ($page+1>$page_count) echo "下一页"."<br>";else echo"<a href='$PATH_self?page=$nextpage'>下一页</a>"."\n<br>";这样处理很显然是不对的你可以先用$num = mysql_query("select * from shijian");先返回一个总数然后计算出总页数$pages = ceil($num/$page_size);然后就简单了$page比$pages下小的允许点下一页不然就不允许喽!! 如何合并2个JSON数组 懂xdebug配置的进来看下 sql特殊字符问题新手求助各位大牛 怎么显示的是代码呀!· field表单中的路径怎么获取? 类似QQ农场的功能,主要用到哪些知识 smarty遍历数组?? 当用户访问一个动态页面时候,服务器就要解释一次程序,耽误时间 var $path="c:/1.xtx" 有没有直接用$path将1.txt打开的可能? 用php在win2000下怎么实现发送email? apache 提示You don't have permission to access /< on this server怎样解决 非常急的一个问题!老兄们快来解决啊!
主要问题是我刚学php,还有很多地方不太明白,像你说的limit,我就不会用,你能不能说的更详细一些。
select *from shijian limit 0,3
这个就是显示从第一条到第三条记录
select *from shijian limit 3,3
这个就是第二页从第四条到第六条,依次类推,就可以实现分页了关于limit后面的两个参数如何计算出来你可以用
从第几条开始 = 当前页数*每页显示数-每页显示数;
连接数据库
$page_size=3; //(每页显示3个)
if($page<=0)
{$page=1;}
$nums=mysql_num_rows($result);
$page_count=ceil($nums/$page_size);
$offset=($page-1)*$page_size;
$a="select * from shijian order by date desc limit $offset,$page_size"; //(按时间排序)
$result=mysql_query($a) or die("浏览失败");
$prevpage=$page-1;
$nextpage=$page+1;
echo "目前留言板上共有".$nums."条留言,本页列出了第".$offset."至".$page_count."条\n"."<br>"; //($page_count这个变量怎么不变呀,老是显示3,怎么才能让它跟着变呀)
if ($page<=1)
echo "第一页"." | ";
else
echo "<a href='$PATH_self?page=1'>第一页</a>"." | ";
if ($page<2)
echo "上一页"." | ";
else
echo"<a href='$PATH_self?page=$prevpage'>上一页</a>"." | ";
if ($page+1>$page_count)
echo "下一页"."<br>";
else
echo"<a href='$PATH_self?page=$nextpage'>下一页</a>"."\n<br>";
while ($array=mysql_fetch_array($result))
{
echo $array['delid']."\n";
echo $array['yonghu']."\n";
echo $array['mima']."\n";
echo $array['email']."\n";
echo $array['info']."\n"."<br>";
}
?>显示的结果如下:(第一页的结果)目前留言板上共有8条留言,本页列出了第0至3条
第一页 | 上一页 | 下一页
8 ffff [email protected] 第八个例子
7 dsa [email protected] 第七个例子
6 00000 [email protected] 第六个例子 第二页的结果:目前留言板上共有8条留言,本页列出了第3至3条
第一页 | 上一页 | 下一页
5 123 [email protected] 第五个例子
4 wangwu [email protected] 第四个例子
3 lisi [email protected] 第三个例子 第三页的结果:目前留言板上共有8条留言,本页列出了第6至3条
第一页 | 上一页 | 下一页
2 maroulong [email protected] 第二个例子
1 zcy [email protected] 第一个例子
if($page_count>$nums)
$page_count = $nums;
{
for ($i=($page_num-1)*$max_rec;$i<$page_num*$max_rec;$i++)
{
if ($i>=count($result)) break;
$page_rec[$i-($page_num-1)*$max_rec] = $result[$i];
}
return $page_rec;
}function get_page_infor($page_num,$max_rec,$result)
{
$page_infor = "<center>共<font color=red> ".count($result)." </font>条记录,每页<font color=red> ".$max_rec." </font>条记录,当前是第 <font color=red>$page_num</font> 页</center>";
echo $page_infor;
return true;
}function get_jump_interface($page_num,$max_rec,$result,$url)
{
if (count($result)%$max_rec == 0) $maxnum = count($result)/$max_rec;
else $maxnum = ((int)(count($result)/$max_rec))+1;
echo "<br><form name='pag' method='get' action =$url>";
if ($page_num!=1)
{
echo "<a href=",$url,"page_num=1>第一页</a> ";
echo "<a href=",$url,"page_num=",$page_num-1,">前一页</a> ";
}
else echo "第一页 前一页 ";
?>
<select name=page_num onchange="pag.submit()">
<?
for ($i=1;$i<=$maxnum;$i++)
{
echo "<option value='$i'";
if ($i==$page_num) echo "selected";
echo ">$i</option>";
}
?>
</select>
<?
if ($page_num!=$maxnum)
{
echo " <a href=",$url,"page_num=",$page_num+1,">后一页</a> ";
echo "<a href=",$url,"page_num=".$maxnum.">最后一页</a>";
}
else echo "后一页 最后一页 ";
echo "</form>";
return true;
}
第二页的结果是:目前留言板上共有8条留言,本页列出了第3(我想让这个变成4)至6条
第三页的结果是:目前留言板上共有8条留言,本页列出了第6(我想让这个变成7)至8条 而且最后显示的那页的"下一页"链接,还能链接,本应该显示出最后一页就应没了,这个的显示结果是:目前留言板上共有8条留言,本页列出了第9至8条 (其时已经没有记录了)
(这样就能一直链接下去,这个9会每显示一页自动加3,如:12、15、18这样的变,8是不变的)我都做好几天了一直没通过,急死我了……
是从第一条开始列出四条
limit 3,4 就是从第四条开始列出四条
所以你在显示的时候如果直接显示$offset 那肯定是少1的所以你要在显示从第几条到第几条的时候加1if ($page+1>$page_count)
echo "下一页"."<br>";
else
echo"<a href='$PATH_self?page=$nextpage'>下一页</a>"."\n<br>";这样处理很显然是不对的你可以先用$num = mysql_query("select * from shijian");
先返回一个总数然后计算出总页数$pages = ceil($num/$page_size);
然后就简单了$page比$pages下小的允许点下一页不然就不允许喽!!