ホームページ >php教程 >php手册 >非再帰的な方法でフォーラムのツリー構造とページングを実装します。 ! (思いつきです、笑)

非再帰的な方法でフォーラムのツリー構造とページングを実装します。 ! (思いつきです、笑)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 09:12:131018ブラウズ

递归|分页|树型结构

现将本人的实践结果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


  
    
      
      
    
    
      
      
    
    
      
    
    
      
    
  

        
你的想法:
        

      

        
      

        
你的内容:
        

      

        
      

      

        

          
          
        

      

  

//said.php End


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

$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");
?>

  
   
  
  
     
     
              
   
     
     
   
发表人:
主 题:》  

Readed:】  
内 容:




  论坛发表跟帖
  

    
      
        
        
      
      
        
        
      
      
        
      
      
        


          
题目:

        

          
        

          
内容:

        

          
        

        

          

          
          
          
          
          
          


//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="over_post に挿入

values(null,'$title','$content',$user_id,'$date',0,$length,$img,'','',' ')";
$result=mysql_query($query) または die(mysql_error());
$r=mysql_query("over_post から max(id) を選択");
$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 setorders=orders+1 where rootid=$rootid andorders>$orders") または

die(mysql_error());

$layer=$layer+1;
$orders=$orders+1;
$ query="over_post に挿入

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

$result=mysql_query($query) または die(mysql_error());

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

//重头戏、显示全帖子、并实现分页
//list。 php
//Begin

//最新论题のrootid
$query = "over_postからmax(rootid)をmaxid1として、min(rootid)をminid1として選択します";
$result = mysql_query($query );
$maxid1 = mysql_result($result, 0, "maxid1");
$startid1 = mysql_result($result, 0, "minid1");
if(!($maxid1>0)) $maxid1=0;
if(!($st​​artid1>0)) $startid1=0;
$totalid1 = $maxid1; // これは真の最大の rootid 値です, $maxid1 は $nextmaxid1 に基づく
if($nextmaxid1>0) $maxid1=$nextmaxid1; //翻訳

//最小rootid:注意下のdesc,与limit結合,保護選択取记录の范围.
//結果としてascを使用,mysql_result中検索第0个,将大错误!
$itemsperpage= 30;
$query="over_post から個別の rootid を選択します (rootid<=$maxid1 rootid の記述制限で並べ替えます

$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 "

< ;center>これ以上の公開コンテンツはありません

";
}

$query="rootid>$maxid1 の over_post から別の rootid を選択してくださいrootid 制限による順序

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

$query="over_post から個別の rootid を選択します (rootid
$itemsperpage";
$r=mysql_query($query);
$n =mysql_num_rows($r);
if($n>0) $down=mysql_result($r,0);
else $down=$maxid1;
?>






      





href="javascript:window.location.reload()" class=a1>刷新

首页

上页

下页  
:$startid1-$totalid1 ";?>

echo"
    ";
    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.=" バイト";
    $rootid=$array["rootid"];
    $orders=$array["orders"];
    $layer=$array["layer"];

    $ul="";        //开始树型结构
    $_ul="";
    for($j=0;$j<$layer;$j++){
    $ul=$ul."
      ";
      $_ul=$ _ul."
    ";    

    echo $ul."
  • "."$title($size ) 【

    ".author."】 $postat <被读:$readed>

    ".$_ul;
    flush();
    //树型结构结束
    }
    ?>

href="javascript:window.location.reload()" class=a1>刷新

首页

上页

下页  
:$startid1-$totalid1 ";?>



//list.php 以上



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。