Maison  >  Article  >  développement back-end  >  Imitation de la création de commentaires NetEase, implémentation PHP+Mysql

Imitation de la création de commentaires NetEase, implémentation PHP+Mysql

不言
不言original
2018-06-04 09:59:244153parcourir

Cet article présente principalement l'implémentation PHP+Mysql de l'imitation de la création de commentaires NetEase. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Vous avez peut-être lu NetEase. L'article ici utilise php et mysql pour obtenir cet effet.

Concevez d'abord une table de données pour stocker les données du commentaire :

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;

Le champ clé est pid, qui enregistre l'identifiant du commentaire référencé. S'il n'y a pas de référence, définissez-le sur. 0.

L'implémentation spécifique utilise principalement un algorithme récursif pour trouver tous les commentaires référencés (similaire au menu Catégories infinies Le code est le suivant :

<?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实现




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

Associés). recommandations :

PHP+MySQL implémente la fonction de requête floue des informations sur les employés

PHP+MySQL implémente l'exemple de saisie du numéro de page pour accéder à la page spécifiée page

Comment implémenter une salle de discussion légère en utilisant PHP+mysql+ajax

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn