首页 >后端开发 >php教程 >仿网易评论盖楼PHP+Mysql实现

仿网易评论盖楼PHP+Mysql实现

不言
不言原创
2018-06-04 09:59:244183浏览

这篇文章主要介绍了关于仿网易评论盖楼PHP+Mysql实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

大家可能都看过网易评论的那种盖楼式的引用,这边文章就用php和mysql来实现这种效果。

先设计数据表来存放评论数据:

DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `site` varchar(128) DEFAULT NULL,
  `content` varchar(1000) NOT NULL,
  `time` datetime NOT NULL,
  `pid` int(10) NOT NULL,
  `articleid` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

其中的关键字段就是pid,保存的是引用评论的id,如果没有引用那么设为0即可。

具体的实现主要是通过递归算法来找出所有引用的评论(和无限分类菜单类似),代码如下:

<?php 
    require_once"sqlHelper.class.php";
     
    //连接数据库
    $sqlHelper= new SqlHelper(&#39;localhost&#39;,&#39;root&#39;, &#39;root&#39;,&#39;test&#39;, 3306);
 
    //插入评论数据
    if(isset($_POST) && !empty($_POST)){
        $comment= array();
        $comment[&#39;username&#39;] =$_POST[&#39;name&#39;]?$_POST[&#39;name&#39;]:&#39;匿名&#39;;
        $comment[&#39;site&#39;] =$_POST[&#39;site&#39;]?$_POST[&#39;site&#39;]:&#39;
 &#39;; 
        $comment[&#39;pid&#39;] =$_POST[&#39;commentid&#39;]?$_POST[&#39;commentid&#39;]:&#39;0&#39;;
        if($comment[&#39;pid&#39;]
 == $comment[&#39;id&#39;]){
            $comment[&#39;pid&#39;] =&#39;0&#39;;
        }
        $comment[&#39;content&#39;] =$_POST[&#39;content&#39;]?$_POST[&#39;content&#39;]:&#39;...&#39;;
        $comment[&#39;articleid&#39;] =$_POST[&#39;articleid&#39;]?$_POST[&#39;articleid&#39;]:&#39;1&#39;;
        $comment[&#39;time&#39;] = date ( &#39;Y-m-d H:i:s&#39;, time () );
 
        $sql_str= $sqlHelper->get_replace_db_sql("comment",$comment);
        //echo $sql_str;
        $sqlHelper->insert_db($sql_str);
    }
?>
 
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xml:lang="en">
 
<head>
 
    <meta http-equiv="Content-Type"content="text/html;charset=UTF-8"/>
    <title>文章评论的无限引用实现</title>
    <style type="text/css">
        *{margin:0;padding:0;}
        body{margin:10px;font-size:14px;font-family:宋体}
        h1{font-size:26px;margin:10px 0 15px;}
        #commentHolder{width:540px;border-bottom:1px solid #aaa;}
        .comment{padding:5px 8px;background:#f8fcff;border:1px solid #aaa;font-size:14px;border-bottom:none;}
        .comment p{padding:5px 0;}
        .comment p.title{color:#1f3a87;font-size:12px;}
        .comment p span{float:right;color:#666}
        .comment p{background:#ffe;padding:3px;border:1px solid #aaa;line-height:140%;margin-bottom:5px;}
        .comment p span{color:#1f3a87;font-size:12px;}
    </style>
</head>
<body>
 
<?php
     
    functionp($str){
        echo"<pre class="brush:php;toolbar:false">";
        if(is_array($str))
            print_r($str);
        else
            echo$str;
        echo"
"; } /* 获取文章id对应的所有评论,以数组的形式返回结果 */ functiongetCommentByArticleId($articleid=1){ $result= array(); if(empty($articleid) || !is_numeric($articleid)){ return$result; } $sql= 'select * from comment where articleid = '. $articleid; global$sqlHelper; $result= $sqlHelper->get_all($sql); //p($result); return$result; } /* 把评论数组数据转换为html格式 */ functioncommentArr2Html($comment_arr) { $str= ''; if(is_array($comment_arr) && !empty($comment_arr)){ $str.= '

'; foreach($comment_arr as $key => $value) { $str.= '

'; $str.= '

'.$value['username'] .''; $str.= '' . $value['time'] .' 发表'; $str.= '

'; global$temp_arr; $temp_arr= array(); //这里去查找当前评论下的所有引用的评论,并格式化为html字符串 $tmpStr= ''; addCommentNode($comment_arr,$value); krsort($temp_arr);//根据key倒叙排序数组 $tmpStr= getChildComment($temp_arr);//添加所有的引用评论 $str.= $tmpStr; $str.= "

" . $value['content'] ."

"; $str.= '

'; } $str.='

'; } return$str; } /* 把temp_arr数组中保存的引用评论信息转换为html形式 */ functiongetChildComment($temp_arr){ $htmlStr= ''; if(!is_array($temp_arr) || empty($temp_arr)){ return''; } foreach($temp_arras $value){ $tmp= '

'; $tmp.= $htmlStr; $tmp.= '' . $value['username'] .' 原贴:
' . $value['content']; $tmp.= '

'; $htmlStr= $tmp; } return$htmlStr; } /* list代表某一文章下的全部评论列表 cmt代表当前要显示的评论 */ functionaddCommentNode($list,$cmt){ if(isset($cmt['pid']) && $cmt['pid'] !='0'){ $find= findParentCmt($list,$cmt['pid']);//找寻id等于当前评论的pid的评论,返回数组。 // 递归调用,只要pid不为零,就加入到引用评论列表 addCommentNode($list,$find); }else{ return; } } /** * 查找list中找寻id等于pid的数组项,并返回 * @param [type] $list [description] * @param [type] $cmtpid [description] * @return [type] [description] */ functionfindParentCmt($list,$cmtpid){ foreach($list as $key => $value) { if($value['id'] == $cmtpid){ /* 用数组的方式来保存所有引用的评论 */ global$temp_arr; $temp_arr[] =$list[$key]; //p($list[$key]);echo "
"; return$list[$key]; } } returnfalse; } $temp_arr= array();//设一个全局的数组变量来保存引用评论的信息 $list= getCommentByArticleId();//通过文章id获取所有的文章评论 $htmlStr= commentArr2Html($list);//把获取到的评论格式化转换为html形式 ?>

文章评论的无限引用PHP+Mysql实现




你的名字:
联系方式或个人网站:
选择引用的评论:
评论内容酷站网软:

相关推荐:

PHP+MySQL实现模糊查询员工信息功能

PHP+MySQL实现输入页码跳转到指定页面功能示例

PHP+mysql+ajax实现轻量级聊天室的方法

以上是仿网易评论盖楼PHP+Mysql实现的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn