[php] 我的微型论坛的简单教程[已完成]第7/8页

 更新时间:2007年05月31日 00:00:00   作者:  

我们在第一章里已经讲了首页如何显示论坛版块,当然,在第二章节里我们论坛添加了排序功能,那么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){
$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.">&lt;&lt;</a></div></td>";
if($intpage>1)
echo "\n    <td><div class=pagefirst><a href=?intpage=".($intpage-1)."&F=".$F.$IsT.">&lt;</a></div></td>";

if($pageno>10){
    $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.">&gt;</a></div></td>";
if($pageno>1)
echo "\n    <td><div class=pagefirst><a href=?intpage=".$pageno."&F=".$F.">&gt;&gt;</a></div></td>";
echo "</td>\n  </tr>";
echo "\n</table></td></tr></table>";
}

 

我上面的代码自己也认为比较烂,有经验的大鸟不要笑我……^@^,帖个好些的分页代码。
分页这里主要利用的就是LIMIT,熟悉了它的用法,简单的分页程序就可以搞定了……

相关文章

  • PHP实现WebService的简单示例和实现步骤

    PHP实现WebService的简单示例和实现步骤

    这篇文章主要介绍了PHP实现WebService的简单示例和实现步骤,本文直接给出示例代码并分步骤讲解,需要的朋友可以参考下
    2015-03-03
  • PHP将字符串首字母大小写转换的实例

    PHP将字符串首字母大小写转换的实例

    下面小编就为大家带来一篇PHP将字符串首字母大小写转换的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • CodeIgniter CLI模式简介

    CodeIgniter CLI模式简介

    这篇文章主要介绍了CodeIgniter CLI模式,需要的朋友可以参考下
    2014-06-06
  • Codeigniter控制器controller继承问题实例分析

    Codeigniter控制器controller继承问题实例分析

    这篇文章主要介绍了Codeigniter控制器controller继承问题,以简单实例形式分析了CodeIgniter中针对控制器controller继承的实现与使用方法,需要的朋友可以参考下
    2016-01-01
  • PHP网站开发中常用的8个小技巧

    PHP网站开发中常用的8个小技巧

    这篇文章主要介绍了PHP网站开发中常用的8个小技巧,本文讲解了命名、使用、PHP判断Form表单是否提交、PHP 获取字符串长度、PHP超全局对象等内容,需要的朋友可以参考下
    2015-02-02
  • PHP开发中常用的十个代码样例

    PHP开发中常用的十个代码样例

    本文是小编日常收集整理的有关php开发中常用的十个代码样例,非常不错,特此分享供大家参考
    2016-02-02
  • Laravel5.1 框架路由基础详解

    Laravel5.1 框架路由基础详解

    这篇文章主要介绍了Laravel5.1 框架路由基础,结合实例形式分析了laravel5.1框架路由的基本原理、路由参数、正则约束等相关使用技巧,需要的朋友可以参考下
    2020-01-01
  • 从零开始学YII2框架(三)扩展插件yii2-gird

    从零开始学YII2框架(三)扩展插件yii2-gird

    yii2-gird 插件是Yii2.0的一个扩展。它在官方的girdview基础上扩展了一些实用的功能。非常好用,推荐使用哦。
    2014-08-08
  • PHP 修改SESSION的生存时间案例详解

    PHP 修改SESSION的生存时间案例详解

    这篇文章主要介绍了PHP 修改SESSION的生存时间案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Zend Framework框架路由机制代码分析

    Zend Framework框架路由机制代码分析

    这篇文章主要介绍了Zend Framework框架路由机制,结合代码分析了Zend Framework路由机制所涉及的控制器,路由器原理与相关代码实现技巧,需要的朋友可以参考下
    2016-03-03

最新评论