[php] 我的微型论坛的简单教程[已完成]第7/8页
我们在第一章里已经讲了首页如何显示论坛版块,当然,在第二章节里我们论坛添加了排序功能,那么SQL语句当然也应该改成$sql="select * from forums order by forum_list",默认为ASC,顺序排列数据。
现在我们来讨论显示分论坛显示主题的情况。我命名为forums.php.
利用F作为参数,具体来显示某个论坛的帖子。
现在我们进入“测试版块”来显示本论坛下的所有主题。显示结果如图:
具体显示主题列表要解决的主要问提就PHP的分页。PHP分页我们可以使用LIMIT来实现。具体用法:"select clumn field1,...,filedN from table_name limit start_num,end_num";
limit作用是限定结果行数。这里可以提取指定的条数,也可以从查询结果中取出中间值。举个例子来说明:
$sql="select * from [topic] limit 5";
作用是取出topic表中顺序前5条数据;
$sql="select * from [topic] limit 9,10";
提取10条信息,从第9条开始提取。
我们forums.php首先接收F的值:$F=$_GET["F"];注意这里是GET
首先取得当前论坛:
<?php
require_once("conn.php");
require_once("global.php");$F=$_GET["F"];
$sql="select forum_name from forums where ID='$F'";
$result=mysql_query($sql);
$rs=mysql_fetch_array($result);
$forum_name=$rs["forum_name"];echo "当前论坛为:<a href=\"index.php\">$gb_name</a>-->>$forum_name";
?>
我们这里的分页当然使用"select clumn field1,...,filedN from table_name limit start_num,end_num";这种方式。
end_num当然就是我们global.php我们定义的论坛常用的变量$list_rows,而start_num如何计算呢?依靠的是当前页面intpage,每页显示条数$list_rows和总条数来结算的。代码如下:
<?php
//接上面代码
$result=mysql_query("select count(ID) from topic where forum_id='$F'");
$num=mysql_result($result,0); //获得总条数$intpage=$_GET["intpage"];
if($intpage) $intpage=1;
$start_num=($intpage-1)*$list_rows; //获取limit开始位置$sql="select ID,title,author,last_post_author as la,last_post_time as lt,no_of_hit,no_of_reply,locked,face,topic,good from topic where forum_id='$F' order by topic desc,last_post_time desc limit $start_num,$list_rows";
$result=mysql_query($sql);//这里当然就是表格的HTML代码啦,自己写吧if($num>0){
while($rs=mysql_fetch_array($result)){
$FID=$row["ID"];
$author=$row["author"];
$title=$row["title"];
$no_of_reply=$row["no_of_reply"];
$no_of_hit=$row["no_of_hit"];
$lt=$row["lt"];
$la=$row["la"];
$topic=$row["topic"];
$good=$row["good"];
$locked=$row["locked"];
$face=$row["face"];
?>
<tr>
<td><?php echo "<img src=\"$face\">" ?></td>
<td><?php echo "<div class=\"bold\"><a class=\"forum\" href=\"thread.php?T=".$FID."&F=".$F."\">".$title."</a></div>" ?></td>
<td><?php echo $author ?></td>
<td><?php echo $no_of_reply." / ".$no_of_hit ?></td>
<td><div class="lastupdate"><?php echo $lt." By ".$la ?></div></td>
</tr>
<?php
}
Show_pages($num,$F,$intpage,$list_rows);
}else{
echo"本版块没有帖子";
}
?>
显示结果如下:
分页就是上面代码中体现出来的Show_pages($num,$F,$intpage,$list_rows)。效果就是从1到10,从11-20这样的分页。分页的思路就是这样:
我们得到了所需要的数据:总记录,当前显示页码,每页显示的条数,总记录和每页显示的条数可以得到总页码。如果总页码小于等于10,那么直接输出 1到总页码就可以了。如果大于10,那就根据当前页码显示具体的分页,比如,总页码13页,当前第11页,那么将按照11-13的显示方式输出。同时还会有上一页,下一页等辅助翻页按钮。图示如下:
代码如下:
Function Show_pages($number,$F,$intpage,$list_rows){ if($pageno>10){
$pageno=ceil($number/$list_rows);
echo "\n<table width=90% border=0 align=center cellpadding=0 cellspacing=0 class=mrg-top>";
echo " <tr>\n <td align=right>\n <table border=0 cellpadding=0 cellspacing=0>\n <tr>";
echo "<td id=pagetop>第".$intpage."页/共".$pageno."页</td>";
if($pageno>1)
echo "\n <td><div class=pagefirst><a href=?intpage=1&F=".$F.$IsT."><<</a></div></td>";
if($intpage>1)
echo "\n <td><div class=pagefirst><a href=?intpage=".($intpage-1)."&F=".$F.$IsT."><</a></div></td>";
$a=Floor($pageno/10);
$b=Floor($intpage/10);
$c=$b*10+1;
$d=$b*10+10;
$e=$intpage%10;
$g=($b-1)*10+1;
if($intpage>10){
if($b<$a){
for($i=$c;$i<=$d;$i++) echo "\n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";
}elseif($e==0){
for($i=$g;$i<=$intpage;$i++) echo "\n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";
}else{
for($i=$c;$i<=$pageno;$i++) echo "\n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";
}
}else{
for($i=1;$i<=10;$i++)
echo "\n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";
}
}else{
for($i=1;$i<=$pageno;$i++)
echo "\n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";
}if($pageno>$intpage)
echo "\n <td><div class=pagefirst><a href=?intpage=".($intpage+1)."&F=".$F.">></a></div></td>";
if($pageno>1)
echo "\n <td><div class=pagefirst><a href=?intpage=".$pageno."&F=".$F.">>></a></div></td>";
echo "</td>\n </tr>";
echo "\n</table></td></tr></table>";
}
我上面的代码自己也认为比较烂,有经验的大鸟不要笑我……^@^,帖个好些的分页代码。
分页这里主要利用的就是LIMIT,熟悉了它的用法,简单的分页程序就可以搞定了……
相关文章
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
本篇文章主要介绍了Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例,具有一定的参考价值,有兴趣的可以了解一下2017-09-09ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
这篇文章主要介绍了ThinkPHP框架实现导出excel数据的方法,结合实例形式分析了thinkPHP添加org扩展基于PHPExcel进行Excel数据的导出操作相关实现技巧,需要的朋友可以参考下2018-05-05浅谈Laravel POST,PUT,PATCH 路由的区别
今天小编就为大家分享一篇浅谈Laravel POST,PUT,PATCH 路由的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-10-10
最新评论