zoukankan      html  css  js  c++  java
  • PHP论坛技术核心 分级保存和显示和回

    简介:这是PHP论坛技术核心 -- 分级保存和显示和回的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324401' scrolling='no'> 1 以文件名来保存发言和回复

    // max.txt保存着最大的发言标题总数(不包括回复)

    论坛分级文件...
    第一个发言的文件名叫 1.txt
    第一个发言的回复1 叫 1_1.txt
    第一个发言的回复2 叫 1_2.txt
    第一个发言的回复2的回复1叫 1_2_1.txt
    第二个发言的文件名叫 2.txt

    2 显示方法
    <?
    //得到标题文章总数(不包括回复的文章)
    $max = file("max.txt");

    //分页显示
    if($page == "")
    {
    $page = 1;
    }

    //每页显示的标题数目
    $numperpage = 20;

    //总标题数
    $total = $max[0];

    //总页数
    $totalpage = round( ($total+$numperpage/2)/$numperpage );

    //分级显示的函数
    function show($filename)
    {

    //$id为论坛的分类名称
    global $id;

    //读入要显示的发言
    $filenamemsg = file($filename);

    //分割
    $msg = split("\|\|bbs\|\|",$filenamemsg[0],99);

    //显示当前的发言标题
    print("<li type=square><a href=# onClick=\"window.open('detail.php?f

    ilename=$filename&&id=$id','detail','menubar=0,toolbar=0,location=no,s

    tatus=no,directories=0,scrollbars=yes,resizable=no,left=10,top=10,widt

    h=550,height=400')\">".$msg[2]." ".$msg[0]." ".

    $msg[4]."\r\n");

    /查找是否有回复
    for($i=1;$i<999999;$i++)
    {

    //查找是否有 文件名_数字 的回复文件
    $tmp = $filename."_".$i;
    if( file_exists($tmp) )
    {

    //如果有,则调用递归显示这个回复以及回复的回复
    print("
    \r\n");
    show($tmp);
    print("
    \r\n");
    }
    else
    {
    //否则中断循环
    break;
    }
    }

    //分级显示结束
    print("");
    }

    //分页显示开始
    $begin = $total-($page-1)*$numperpage;

    //分页显示结束
    $end = $begin - $numperpage;

    //分级显示开始
    print("
    ");

    //循环显示标题以及各级回复
    for($i=$begin;($i>0) && ($i>$end);$i--)
    {
    show("$i");
    }

    //分级显示结束
    print("
    ");

    3 发表新文章的方法

    //处理最大发言数
    $max = file("max.txt");
    $maxnumber = $max[0]+1;
    $handle = fopen("max.txt","w");
    fputs($handle,$maxnumber);
    fclose($handle);

    //新建发言标题文件
    $handle = fopen("$maxnumber","w");

    //对发言进行预处理
    $name = ereg_replace("<","<",$name);
    $name = ereg_replace(">","&gt;",$name);
    if( strlen($name) > 20 )
    {
    $name = substr($name,0,20);
    }

    $email = ereg_replace("<","<",$email);
    $email = ereg_replace(">","&gt;",$email);
    if( strlen($email) > 50 )
    {
    $email = substr($email,0,50);
    }

    $subject = ereg_replace("<","<",$subject);
    $subject = ereg_replace(">","&gt;",$subject);
    if( strlen($subject) > 100 )
    {
    $subject = substr($subject,0,100);
    }
    $body = ereg_replace("<","<",$body);
    $body = ereg_replace(">","&gt;",$body);
    $body = ereg_replace("\r\n","<br>",$body);
    if( strlen($body) > 5000 )
    {
    $body = substr($body,0,5000);
    }

    //保存发言
    fputs($handle,"$name||bbs||$email||bbs||$subject||bbs||$body||bbs||".
    date("Y年m月d日 H:i"));
    fclose($handle);

    4 回复的分级保存

    //方法和发言基本相同,只是增加了一些判断
    //请注意 $filename传递的是发言的文件名
    // 可是是标题文件名 1.txt
    // 也可能是回复文件名 13_3_2.txt 第13个发言标题的第3个回复的第3个回复


    //查找已经有的最大回复

    for($i=1;$i<999999;$i++)
    {
    if(!file_exists($filename."_".$i))
    {
    break;
    }
    }

    //找到,建立新的回复文件
    //后面的与发言相同

    fclose(fopen($filename."_".$i,"w"));
    unlink("reply.tmp");

    $handle = fopen($filename."_".$i,"w");
    $name = ereg_replace("<","<",$name);
    $name = ereg_replace(">","&gt;",$name);
    if( strlen($name) > 20 )
    {
    $name = substr($name,0,20);
    }

    $email = ereg_replace("<","<",$email);
    $email = ereg_replace(">","&gt;",$email);
    if( strlen($email) > 50 )
    {
    $email = substr($email,0,50);
    }

    $subject = ereg_replace("<","<",$subject);
    $subject = ereg_replace(">","&gt;",$subject);
    if( strlen($subject) > 50 )
    {
    $subject = substr($subject,0,50);
    }
    $body = ereg_replace("<","<",$body);
    $body = ereg_replace(">","&gt;",$body);
    $body = ereg_replace("\r\n","<br>",$body);
    if( strlen($body) > 500 )
    {
    $body = substr($body,0,500);
    }
    fputs($handle,"$name||bbs||$email||bbs||$subject||bbs||$body||bbs||".
    date("Y年m月d日 H:i"));
    fclose($handle);


    如果看不懂,到我的竹叶下载我的论坛源代码看看好了!!!

    “PHP论坛技术核心 -- 分级保存和显示和回”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/324401.html pageNo:15
  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/ooooo/p/2254955.html
Copyright © 2011-2022 走看看