MySQL和PHP的注释功能

时间:2015-02-13 18:58:52

标签: php mysql

我正在为网站上发布的每个帖子发表评论功能。简要说明:

  • 每个帖子在发布时都有 id
  • 当页面加载时,MySQL查询检查是否有表评论框,如果没有,则创建一个。
  • 在每个评论表名称的末尾,它的前缀为帖子ID 。如果帖子的ID为9,则此帖子的表名称为feed_comment_9。 (评论表在另一个数据库中)

  • 我能够在html视图中连接评论表和帖子框

  • 但是,当INSERT INTO查询转过来时,我找不到一个好方法

我的主要问题:是否有任何方法可以连接这两个数据库,或者可以执行任何插入查询将与帖子相同的评论表中的内容。

我的代码:

while ($row = $results->fetch_assoc()) {
    //database change and creating and checking tables 
    $dbc->select_db("feed_update_comment");
$create_comment_table = "CREATE TABLE  IF NOT EXISTS feed_comment_" . $row['id'] . "( id MEDIUMINT NOT NULL AUTO_INCREMENT, full_name varchar(40), comment varchar(120), date_time varchar(100), PRIMARY KEY (id))";
$result_create_comment_table = $dbc->query($create_comment_table);
   //creating and checking finishes 



// making the comments box 
    $dbc->select_db("feed_update_comment");
     $select_comment_table = "SELECT * FROM feed_comment_" . $row['id'] . " ORDER BY id";
$result_query_select_comment_table = $dbc->query($select_comment_table );
if(!$result_query_select_comment_table) {
    $result_select_comment_table = array("full_name" => "", "comment"=> "No comments yet.");

}
$id_result_comment = '<script type="text/javascript">var DivId = $(this).parent(".feed_box_id").attr("id");</script>';
echo '<div id="feed_comment_box_' . $row['id'] . '"' . 'class="feed_comment_box_cl"><div id="add_comment_id" class="add_comment_cl">
<form class="comment_form" method="post" action="' .$_SERVER['PHP_SELF']  . '">
<input name="comment_full_name" type="text" class="input_comment_full_name" required>  </input> 
<textarea required name="input_comment_text" type="text" class="input_comment_text" ></textarea><input class="submit_input" name="comment_submit" type="submit"></input> <br>
 </form>' . $id_result_comment .' 
</div><br>
<div class="comment_box_cl">';      
while ($result_select_comment_table = $result_query_select_comment_table->fetch_assoc()) {
echo '<table tabindex="0" class="comment_box"><tr> <td class="comment_text">' . $result_select_comment_table["comment"] . '</td></tr><br>' . 
'<tr> <td class="comment_full_name">' .  $result_select_comment_table["full_name"]. '</td></tr><br>' . 
'<tr><td class="date_time_comment">' . $result_select_comment_table["date_time"] . '</td></tr><br>'
. '</table>';
}
    echo '</div></div>';    
    echo '</div>';          

    //making of comment box finishes


 //insert query (MAIN POINT)
  if ( isset($_POST["comment_submit"]) ) {
        $commenter_name = ($_POST["comment_full_name"]);
    $commenter_comment = ($_POST["input_comment_text"]);
        if (!empty($commenter_name) || !empty($commenter_comment)) {
            $dbc->select_db("feed_update_comment");
            $result_comment_submit = "INSERT INTO feed_comment_" . " (full_name,comment,date_time)" .  " VALUES('$commenter_name','$commenter_comment',DATE_FORMAT(NOW(),'%h:%i %p,  %W %M %e'))";
            $add_comment_submit = $dbc->query($result_comment_submit)
            or die ("<script type='text/javascript'>alert('not working!');</script>");

        }

    }

额外:这些类型中有很多类似于开始发布帖子,直到评论框。问题是会有十几个。

There are many of these types

1 个答案:

答案 0 :(得分:1)

要知道评论所属的帖子,您可以使用type="hidden"这样的输入

<input type="hidden" name="comment_post_id" value="' . $row['id'] . '">

并通过$_POST['comment_post_id']访问它,就像访问任何其他字段一样。


除非您有很多(并且您必须考虑根据您使用的dbms的批次定义)评论,否则这是一种过度杀伤力。您创建了许多表feed_comment_X,其中只包含很少的条目。

基本解决方案是拥有一个表评论,这可能看起来像这样

CREATE TABLE comments (
  comment_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  post_id INT NOT NULL FOREIGN KEY REFERENCES posts (id) [ON..],
  full_name VARCHAR(32) NOT NULL,
  comment TEXT NOT NULL,
  date_time DATETIME NOT NULL
);

您保存此表中的所有注释,无需检查是否存在和(如有必要)在每个页面加载时创建新表。

简单地获取所有评论(使用参数化语句)

SELECT full_name, comment, date_time FROM comments
  WHERE post_id = :post_id

并按

添加新条目
INSERT INTO comments (post_id, full_name, comment, date_time) VALUES
  (:post_id, :full_name, :comment, :date_time)

如果您想获得更多信息,这可以实现快速操作,例如。每篇帖子的评论数量:

SELECT p.id, .., COUNT(c.post_id) AS total_comments FROM posts AS p
  LEFT JOIN comments AS c on c.post_id = p.id
  GROUP BY (p.id)