我正在为网站上发布的每个帖子发表评论功能。简要说明:
在每个评论表名称的末尾,它的前缀为帖子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>");
}
}
额外:这些类型中有很多类似于开始发布帖子,直到评论框。问题是会有十几个。
答案 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)