动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   PHP → 阅读文章

 非递归法实现论坛树型结构及分页!!(心血结晶啊,呵呵)

作者来源: 
阅读 数 337 人次 , 2006-4-18 17:17:00 


   现将本人的实践结果show给大家,不足之处就是分页的方法不太好,不能显示具体的页数,可实在又没有其它更好的解决办法,只好先如此了,如果哪位有类似本论坛的分页方法,表赐教一二,二泉不胜感激!具体可访问我的个人小网站:http://web.nyist.net/~wbgwrq,不废话了, 开始吧......

//表的结构如下:
//creat.sql
//简单说明:RootId 论题序数;Layer:帖子层次,缩进的依据;Orders:帖子的顺序
CREATE TABLE over_post (
  id int(11) NOT NULL auto_increment,
  title varchar(80) NOT NULL default '',
  content text,
  postat datetime NOT NULL default '0000-00-00 00:00:00',
  readed int(11) NOT NULL default '0',
  size int(11) NOT NULL default '0',
  rootid int(11) NOT NULL default '0',
  orders int(4) NOT NULL default '0',
  layer int(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
//creat.sql End

//发表根帖,即RootId,Layer,Orders为0的帖子
//said.php
//begin
<form method="post" action="post.php">
  <table width="81%" border="0" cellspacing="1" cellpadding="0" align="center">
    <tr bgcolor="#66CCCC">
      <td height="35" width="23%">
        <div align="right">你的想法:
        </div>
      </td>
      <td height="35" width="77%">
        <input type="text" name="title" size="50" class="eq">
      </td>
    </tr>
    <tr bgcolor="#66CCCC">
      <td height="39" width="23%">
        <div align="right">你的内容:
        </div>
      </td>
      <td height="39" width="77%">
        <textarea name="content" cols="50" rows="10" class="eq"></textarea>
      </td>
    </tr>
    <tr bgcolor="#66CCCC">
      <td colspan="2" height="24">
      </td>
    </tr>
    <tr bgcolor="#66CCCC">
      <td colspan="2" height="28">
        <div align="center">
          <input type="submit" name="said" value="先说这些">
          <input type="reset" name="Submit2" value="从头再来">
        </div>
      </td>
    </tr>
  </table>
  </form>
//said.php End


//帖子内容,且在本页进行跟帖
//content.php
//Begin
<?php

$result=mysql_query("select

over_post.title,over_post.content,over_post.postat,over_post.readed,over_post.rootid,over_post.la

yer,over_post.orders from over_post where over_post.id=$id");
$readed=mysql_result($result,0,"readed");
$title=mysql_result($result,0,"title");
$content=mysql_result($result,0,"content");
$date=mysql_result($result,0,"postat");
$rootid=mysql_result($result,0,"rootid");
$orders=mysql_result($result,0,"orders");
$layer=mysql_result($result,0,"layer");
?>
<table width="90%" cellspacing="1" bgcolor="red" align="center">
  <tr bgcolor="#FFFFFF">
   <td width="12%">发表人:</td>
  </tr>
  <tr bgcolor="#FFFFFF">
     <td width="12%">主 题:</td>
     <td colspan="5">《<?php echo $title; ?>》  <font color="666666"><i>【

Readed:<?echo"$readed";?>】  <?echo"$date";?></i></font></td>
              </tr>
   <tr bgcolor="#FFFFFF">
     <td width="12%">内 容:</td>
     <td colspan="5"><?php echo $content; ?></td>
   </tr>
</table>
<br>
<center>
  论坛发表跟帖
  <form method="post" action="post.php">
    <table width="78%" cellspacing="0" align="center" cellpadding="0" border="0">
      <tr bgcolor="#FFFFFF">
        <td height="24" width="12%">
          <div align="right">题目:</div>
        </td>
        <td height="24" width="88%">
          <input type="text" name="title" class="eq" size="50">
        </td>
      </tr>
      <tr bgcolor="#FFFFFF">
        <td height="63" width="12%">
          <div align="right">内容:</div>
        </td>
        <td height="63" width="88%">
          <textarea name="content" class="eq" cols="50" rows="10"></textarea>
        </td>
      </tr>
      <tr bgcolor="#FFFFFF">
        <td height="57" colspan="2">
        </td>
      </tr>
      <tr bgcolor="#FFFFFF">
        <td height="20" colspan="2">
          <div align="center">
          <input type="submit" name="reply" value="跟帖" class=in>
          <input type="reset" value="重写" class=in name="reset">
          <input type="hidden" name="rootid" value="<?echo $rootid;?>">
          <input type="hidden" name="orders" value="<?echo$orders;?>">
          <input type="hidden" name="layer" value="<?echo$layer;?>">
          </div>
        </td>
      </tr>
    </table>
//content.php End

//更新数据库
//post.php
//Begin

<?
$content=nl2br(htmlspecialchars($content));
$title=htmlspecialchars($title);        //决不允许在标题上使用html
$date=date("Y-m-d H:i:s");
$length=strlen($content);

if(isset($said))    //发表新帖子
{
$query="insert into over_post

values(null,'$title','$content',$user_id,'$date',0,$length,$img,'','','')";
$result=mysql_query($query) or die(mysql_error());
$r=mysql_query("select max(id) from over_post");
$rootid = mysql_result($r,0)+0;
mysql_query("update over_post set rootid=$rootid where ID=$rootid")or die(mysql_error());
}

if(isset($reply)):    //发表跟帖

mysql_query("update over_post set orders=orders+1 where rootid=$rootid and orders>$orders")or

die(mysql_error());

$layer=$layer+1;
$orders=$orders+1;
$query="insert into over_post

values(null,'$title','$content',$user_id,'$date',0,$length,$img,$rootid,$orders,$layer)";

$result=mysql_query($query) or die(mysql_error());

endif;
     if($result) {
    include"list.php";
}
?>
//post.php End

//重头戏,显示所有帖子,并实现分页
//list.php
//Begin

<?php
//找到最新论题的rootid
$query = "select max(rootid) as maxid1, min(rootid) as minid1 from over_post";
$result = mysql_query($query);
$maxid1 = mysql_result($result, 0, "maxid1");
$startid1 = mysql_result($result, 0, "minid1");
if(!($maxid1>0)) $maxid1=0;
if(!($startid1>0)) $startid1=0;
$totalid1 = $maxid1; //这是真正的最大的rootid值, $maxid1要根据$nextmaxid1变的
if($nextmaxid1>0) $maxid1=$nextmaxid1; //翻页

//计算最小rootid:注意下面的desc,与limit结合,保证选取记录的范围.
//如果使用asc, 在mysql_result中检索第0个,将大大错误!
$itemsperpage=30;
$query="select distinct rootid from over_post where rootid<=$maxid1 order by rootid desc limit

$itemsperpage";
$r=mysql_query($query);
$n=mysql_num_rows($r);
if($n>0) {
  $minid1=mysql_result($r,$n-1);
$query="select * from over_post where rootid<=$maxid1 and rootid>=$minid1 order by rootid

desc,orders";
$result=mysql_query($query);
$num=mysql_num_rows($result);

}
else {
  $minid1=0;
  $maxid1=0;
  echo "<p><center><font color='#ff0000'>没有更多的发言内容</font></center>";
}

$query="select distinct rootid from over_post where rootid>$maxid1 order by rootid limit

$itemsperpage";
$r=mysql_query($query);
$n=mysql_num_rows($r);
if($n>0) $up=mysql_result($r,$n-1);
else $up=$totalid1;

$query="select distinct rootid from over_post where rootid<$minid1 order by rootid desc limit

$itemsperpage";
$r=mysql_query($query);
$n=mysql_num_rows($r);
if($n>0) $down=mysql_result($r,0);
else $down=$maxid1;
?>
<div align=center>
<br>
  <table width="90%" border="0" cellspacing="1" cellpadding="0" align="center">
    <tr bgcolor="2880AC">
      <td height="20" align="center"><font color="#FFFFFF"><a

href="javascript:window.location.reload()" class=a1>刷新</a>
        <a href="list.php" class=a1>首页</a> <a href="list.php?nextmaxid1=<?echo$up;?>" class=a1>

上页</a>
        <a href="list.php?nextmaxid1=<?echo$down;?>" class=a1>下页</a>  <?echo" 现存论题

:$startid1-$totalid1 ";?>
        </font></td>
    </tr>
    <tr>
      <td  height="40" bgcolor="#E0F0F8" cellspacing="1">
<?php
echo"<ul>";
while ($array=mysql_fetch_array($result)){
        $id=$array["id"];
        $title=$array["title"];
        $content=$array["content"];
        $postat=$array["postat"];
        $readed=$array["readed"];
        $size=$array["size"];
            if($size==0) $size="无内容";
                else $size.=" Bytes";
        $rootid=$array["rootid"];
        $orders=$array["orders"];
        $layer=$array["layer"];
            
        $ul="";        //开始树型结构
        $_ul="";
    for($j=0;$j<$layer;$j++){
            $ul=$ul."<ul>";
            $_ul=$_ul."</ul>";    
            }
echo $ul."<li>"."<a href=\"content.php?id=$id\" class=big>$title</a><font color=006699>($size) 【

".作者."】 $postat <被读:$readed> </font><br>".$_ul;
flush();
                //树型结构结束
}
?><br></td>
    </tr>
    <tr bgcolor="2880AC">
      <td height="20" align="center"><font color="#FFFFFF"><a

href="javascript:window.location.reload()" class=a1>刷新</a>
        <a href="list.php" class=a1>首页</a> <a href="list.php?nextmaxid1=<?echo$up;?>" class=a1>

上页</a>
        <a href="list.php?nextmaxid1=<?echo$down;?>" class=a1>下页</a>  <?echo" 现存论题

:$startid1-$totalid1 ";?>
        </font></td>
    </tr>
  </table>
</div>

//list.php End   
 本文Tags分页  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:看看文档吧...
· 下一篇:PHP中记录分页显示实例(转)
· 让显示内容栏的滚动条一直在下面
· PHP安全配置(4)
· PHP数据缓存技术之二
· PHPLIB和多个数据库
· php不用COM生成excel文件


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077