php实现网站留言板功能

我要实现的就是下图的这种样式,可参考下面这两个网站的留言板,他们的实现原理都是一样的

畅言留言板样式:

网易跟帖样式:

原理
需要在评论表添加两个主要字段 id 和 pid  ,其他字段随意添加,比如文章id、回复时间、回复内容、回复人什么的。
其中pid就是当前已经回复过的评论的id。
从上图可以看出,里面每一层的pid就是就是他上一层评论的id。仔细观察下上面的布局。是不是很像PHP中的多维数组?如果你能想到,那么就简单了。
实现方法
1.前台:这个比较简单 就是div嵌div。然后设置div的border和margin  padding就行了

<div class="comment">
 <div class="comment">
  <div class="comment"> 

  </div>
 </div>
</div> 

<div class="comment"> 

</div>

2、后台 :用到了两次递归,首先用递归把数据库中的结果重组下,重组之后,然后用递归输出上面的那种前台代码即可
comment表结构和内容如下

然后直接读出这个表中的所有评论。可以得到如下数组

Array
(
 [0] => Array
  (
   [id] => 1
   [pid] =>
   [content] => 评论1
  ) 

 [1] => Array
  (
   [id] => 2
   [pid] =>
   [content] => 评论2
  ) 

 [2] => Array
  (
   [id] => 3
   [pid] =>
   [content] => 评论3
  ) 

 [3] => Array
  (
   [id] => 4
   [pid] => 1
   [content] => 评论4回复评论1
  ) 

 [4] => Array
  (
   [id] => 5
   [pid] => 1
   [content] => 评论5回复评论1
  ) 

 [5] => Array
  (
   [id] => 6
   [pid] => 2
   [content] => 评论6回复评论2
  ) 

 [6] => Array
  (
   [id] => 7
   [pid] => 4
   [content] => 评论7回复评论4
  ) 

 [7] => Array
  (
   [id] => 8
   [pid] => 7
   [content] => 评论8回复评论7
  ) 

 [8] => Array
  (
   [id] => 9
   [pid] => 8
   [content] => 评论9回复评论8
  ) 

 [9] => Array
  (
   [id] => 10
   [pid] => 8
   [content] => 评论10回复评论8
  ) 

)

然后我们就需要把这个数组重组成上面的那种留言板形式的
其中$array就是上面读取出来的数组,首先取出pid默认为空的,然后递归,在取出pid为当前评论id的数组

public static function tree($array,$child="child", $pid = null)
{
 $temp = [];
 foreach ($array as $v) {
  if ($v['pid'] == $pid) {
   $v[$child] = self::tree($array,$child,$v['id']);
   $temp[] = $v;
  }
 }
 return $temp;
}

重组后,可以得到下面的这个数组,可以看到,这个数组的样式已经和前台评论样式很像了

Array
(
 [0] => Array
  (
   [id] => 1
   [pid] =>
   [content] => 评论1
   [child] => Array
    (
     [0] => Array
      (
       [id] => 4
       [pid] => 1
       [content] => 评论4回复评论1
       [child] => Array
        (
         [0] => Array
          (
           [id] => 7
           [pid] => 4
           [content] => 评论7回复评论4
           [child] => Array
            (
             [0] => Array
              (
               [id] => 8
               [pid] => 7
               [content] => 评论8回复评论7
               [child] => Array
                (
                 [0] => Array
                  (
                   [id] => 9
                   [pid] => 8
                   [content] => 评论9回复评论8
                   [child] => Array
                    (
                    ) 

                  ) 

                 [1] => Array
                  (
                   [id] => 10
                   [pid] => 8
                   [content] => 评论10回复评论8
                   [child] => Array
                    (
                    ) 

                  ) 

                ) 

              ) 

            ) 

          ) 

        ) 

      ) 

     [1] => Array
      (
       [id] => 5
       [pid] => 1
       [content] => 评论5回复评论1
       [child] => Array
        (
        ) 

      ) 

    ) 

  ) 

 [1] => Array
  (
   [id] => 2
   [pid] =>
   [content] => 评论2
   [child] => Array
    (
     [0] => Array
      (
       [id] => 6
       [pid] => 2
       [content] => 评论6回复评论2
       [child] => Array
        (
        ) 

      ) 

    ) 

  ) 

 [2] => Array
  (
   [id] => 3
   [pid] =>
   [content] => 评论3
   [child] => Array
    (
    ) 

  ) 

)

得到上面的数组后 ,再用递归输出即可

public static function traverseArray($array)
{
 foreach ($array as $v) {
  echo "<div class='comment' style='width: 100%;margin: 10px;background: #EDEFF0;padding: 20px 10px;border: 1px solid #777;'>";
  echo $v['content'];
  if ($v['child']) {
   self::traverseArray($v['child']);
  }
  echo "</div>"; 

 } 

}

然后即可看到

原理就是这样,就是重组下数组,然后遍历输出就行了。

以上就是php实现畅言留言板和网易跟帖样式的全部过程,大家也可以尝试进行创新,希望这篇文章对大家的学习有所帮助。

(0)

相关推荐

  • php xml留言板 xml存储数据的简单例子

    类文件 : _class.xmldb.inc.php 复制代码 代码如下: <?php class xmldb extends DOMDocument{     var $xmldb;     public function __construct($xmldbname){         $this->xmldb=$xmldbname;         if(!file_exists($this->xmldb)){             $initxmldb = "<

  • php开发留言板的CRUD(增,删,改,查)操作

    项目结构: 添加页面:                                说明:这里只注重操作,对界面的美工没有下工夫,希望大家理解...... 列表页面: 修改页面: 项目中所需的sql: 复制代码 代码如下: create database form; use form; CREATE TABLE `message` ( `id` tinyint(1) NOT NULL auto_increment, `user` varchar(25) NOT NULL, `title` va

  • php实现留言板功能(会话控制)

    本文实例为大家分享了php留言板功能的具体代码,供大家参考,具体内容如下 数据库用到的三张表 一.登录界面 (denglu.php   login.php) 1.denglu.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>开发部内部留言板<

  • 来自经典的打造简单的PHP&MYSQL留言板第1/4页

    表一: admin 字段: id(int11)   name(varchvr)   password(varchvr) 表二: lo 字段: id(int11)   username(varchvr)  sex(varchvr)  qq(varchvr)  email(varchvr)  info(text)  ip(varchvr)  submit_time(datetime) 1.conn.php(连接数据库文件) 复制代码 代码如下: <?php  mysql_connect("lo

  • PHP结合Mysql数据库实现留言板功能

    先给大家展示下留言板效果图: 最近看了下PHP基础语法,就想利用这些基本东西实现留言板,也是对基础知识的一个巩固. 什么是留言板?一种可以用来记录,展示文字信息的载体. 现切入正题,说说本次留言板是怎么实现! 首先用户提交留言后,相关内容存入服务器,当他想看的时候后台再把所有留言读出来,最后显示在浏览器上,用户就可以看到留言了. 这其中后台需要便于读写数据的一个工具,我选择mysql数据库来帮助我完成这些事. 我写了主要是三个php文件,分别是: conn.php 连接数据库: addmsg.p

  • php简单的留言板与回复功能具体实现

    在网上找了这方面的教程 但是基本就是没有人说什么 然后在某一天看见一个PHP程序设计出了一张类似这样的数据库设计图之后就有了很多领悟!下面是数据库的结构图 下面我们就来继续一下介绍 id                        这个算是父Id 可以通过这个id来查询 在这个id下是否有子id 同时也可以记录这个是那条留言的id son_id                    这个是子id 然后通过这个id 可以找到相对应的父id   news_id                  

  • 一个可分页的基于文本的PHP留言板源码第1/2页

    小弟初学PHP,编了一个留言板程序,自我感觉良好,故厚着脸皮放了上来,请各位大哥指正.源程序如下:  <?php  //文件名:guest.php  //设定部分  $guestfile="guest";//纪录留言的文本文件  $home="index.html";//返回的主页  $imagedir="image"; //图像文件的目录  $backimage=$imagedir."/bk.gif";//背景图像 

  • 一个简单的PHP&MYSQL留言板源码第1/2页

    初学PHP,花了几晚上写了个留言板,请高手指正 p.s.我的空间不支持PHP,不能提供演示了T_T 数据库结构:(库名:lyb) 表一: admin 字段: id(int11)   name(varchvr)   password(varchvr) 表二: lo 字段: id(int11)   username(varchvr)  sex(varchvr)  qq(varchvr)  email(varchvr)  info(text)  ip(varchvr)  submit_time(dat

  • php制作文本式留言板

    代码很简单,就不多废话了,直接奉上代码: del.php 复制代码 代码如下: <html> <head > <meta charset="utf-8"> <title>我的留言板</title> </head> <body> <center>     <?php include("menu.php"); ?>     <h3>删除留言</h

  • 找到一款不错的基于AJAX留言板源码(PHP版、ASP版)提供下载了

    一.说明 大家好,现将51AJAX的留言板源码放出,有PHP和ASP两个版本. PHP版基于AJAX+PHP4.3+MySql 4.1+Dojo 0.3,ASP版基于AJAX+ASP+Access+Dojo 0.3. 压缩包中已包含了Dojo框架的主文件dojo.js,无需再下载Dojo包: 要下载完整的Dojo框架,请点击这里下载:http://download.dojotoolkit.org/release-0.3.1/dojo-0.3.1-ajax.zip. 关于Dojo的更多信息,请点击

随机推荐