文本数据库留言本分页求教

文本数据库留言本分页求教

本人是个PHP菜鸟,最近自己动手写了个文本数据库的留言本,感觉让所有留言通过一个for全部显示在一个页面上有点不好看,想弄个分页功能,研究了许久,也借鉴了一些代码,但是一直没成功,希望高手指点下。同时我写的代码的结构感觉也不是很清晰,希望高手给些建议。
我写的分页代码(fenye.php)如下(一直没成功的代码);

[复制到剪切板]
CODE:
<?php
$array
=file("gb.dat");
$num=count($array);
$pagesize=10;
$pages=ceil($num/$pagesize);
echo 
"<center>分页测试<br>";
if(isset(
$_GET['$page']))
{
    
$page=$_GET['$page'];
    if(
$page<=0){$page=1;}
    else
    if(
$page>=$pages){$page=$pages;}
    
$start=$num-($page-1)*$pagesize;
    
$end=$start-$pagesize;
}
else
{
    
$page=1;
    
$start=$num;
    
$end=$start-$pagesize;
}
for(
$i=$start;$i>$end;$i--)
{
$i=$i-1;
$row=explode("|",$array[$i]);
list(
$title,$author,$content,$ip,$date)=$row;
$title=htmlspecialchars($title); 
$author=htmlspecialchars($author); 
$content=htmlspecialchars($content); 
$i=$i+1;
echo 
"<font color=green>第".$i."条留言:<font>"."
<table width='600' border='0' align='center' >
  <tr>
    <td>作者:</td>
    <td>
$author</td>
  </tr>
  <tr>
    <td width='60'>标题:</td>
    <td>
$title</td>
  </tr>
  <tr>
    <th valign='top'>内容:</th>
    <td>
$content</td>
  </tr>
  <tr>
    <td>时间:</td>
    <td>
$date</td>
  </tr>
  <tr>
    <td>IP:</td>
    <td>
$ip</td>
  </tr>
</table>
<hr width='600'>
<br>
"
;
}
$pageup=$page-1;
$pagedown=$page+1;
echo 
"第".$page."页";
echo 
"<br><center>
    <a href=fenye.php?page=
$pageup>上一页</a>  
    <a href=fenye.php?page=
$pagedown>下一页</a></center>
"
;
?> ;


[ 本帖最后由 zhouyao3381 于 2009-1-2 13:33 编辑 ]

附件

gb.rar (591 Bytes)

2009-1-2 13:33, 下载次数: 2

你这个代码没有成功吗?看上去可以喔。
有一些小错误
$pages=$num/$pagesize;
$pages=(int)$pages+1;
当$num = 20;时,$pages应该是2.但加1就变成3了
可以这样
$pages = ceil($num/$pagesize);
如履薄冰

引用:
原帖由 我不是鱼 于 2009-1-1 17:31 发表
你这个代码没有成功吗?看上去可以喔。
有一些小错误
$pages=$num/$pagesize;
$pages=(int)$pages+1;
当$num = 20;时,$pages应该是2.但加1就变成3了
可以这样
$pages = ceil($num/$pagesize);
谢谢老大指点,你说的那个我修改了一下,一会儿再调试调试,希望可以成功。
这个分页我想了很长时间,甚至上课都在拿纸画,感觉思路是对的,就是一直显示不出我要的结果,感觉挺折腾人的,不过PHP还算比较照顾新手,希望可以早日写出一个功能强大的留言本。

我说的那个只是一个小错误。如果不成功,应该不是这个原因。
如果实在不行,或者你发gb.dat文件上来,我可以调试下。
如履薄冰

非常感谢老大的热情帮助,我把那个文本数据库文件打包传上去了,你帮我看看,我试了一下还是不行。

的确是有点问题。我修改了一下。你试下咯

[复制到剪切板]
CODE:
<?php
$array 
file("gb.dat");
$array array_reverse($array);

$pagesize=10;
$numcount($array);
(!isset(
$_GET['page']) || !$page intval($_GET['page'])) && ($page 1);
$start = ($page-1)*$pagesize;
$end $start $pagesize;
if(
$end $num){
    
$end $num;
}
$pages=ceil($num/$pagesize);

echo 
"<center>分页测试<br>";
/*if(isset($_GET['$page']))
{
    $page=$_GET['$page'];
    if($page<=0){$page=1;}
    else
    if($page>=$pages){$page=$pages;}
    $start=$num-($page-1)*$pagesize;
    $end=$start-$pagesize;
}
else
{
    $page=1;
    $start=$num;
    $end=$start-$pagesize;
}*/

$page_start $num $start;
for(
$i=$start;$i<$end;$i++)
{
    
//$i=$i-1;
    
$row=explode("|",$array[$i]);
    list(
$title,$author,$content,$ip,$date)=$row;
    
$title=htmlspecialchars($title);
    
$author=htmlspecialchars($author);
    
$content=htmlspecialchars($content);
    
//$i=$i+1;
    
echo
    
"<font color=green>第".$page_start."条留言:<font>"."
<table width='600' border='0' align='center' >
  <tr>
    <td>作者:</td>
    <td>
$author</td>
  </tr>
  <tr>
    <td width='60'>标题:</td>
    <td>
$title</td>
  </tr>
  <tr>
    <th valign='top'>内容:</th>
    <td>
$content</td>
  </tr>
  <tr>
    <td>时间:</td>
    <td>
$date</td>
  </tr>
  <tr>
    <td>IP:</td>
    <td>
$ip</td>
  </tr>
</table>
<hr width='600'>
<br>
"
;
    
$page_start--;
}
$pageup=$page-1;
$pagedown=$page+1;
echo 
"第".$page."页";
echo 
"<br><center>
    <a href=fenye.php?page=
$pageup>上一页</a>  
    <a href=fenye.php?page=
$pagedown>下一页</a></center>
"
;
?> ;


如履薄冰

非常感谢老大,这个脚本可以了,终于可以达到预想的目的了。
这行代码太棒了

[复制到剪切板]
CODE:
(!isset($_GET['page']) || !$page intval($_GET['page'])) && ($page 1); ;

呵呵,这个比if else强!又学到了个强大的判断语句^_^

[ 本帖最后由 zhouyao3381 于 2009-1-4 12:37 编辑 ]

怎么用?