Php 如何将注释发布到从数据库获取并使用while循环显示的帖子

Php 如何将注释发布到从数据库获取并使用while循环显示的帖子,php,mysql,Php,Mysql,大家好,我正在尝试将类似论坛的功能整合到我的网站中,用户可以发表评论,其他人可以回复每条评论。我已从数据库中获取帖子,并通过条件while循环显示它们。问题是,每当我为一篇文章发表评论时,就会在数据库中为每个显示的评论输入评论。请帮助我解决这个问题。请注意,插入注释的php也在while()函数中,因为当我将其放在函数外部时,帖子的id没有得到,并且显示为零 <?php $sql="SELECT first_name,surname,post_id,post_body,post_date

大家好,我正在尝试将类似论坛的功能整合到我的网站中,用户可以发表评论,其他人可以回复每条评论。我已从数据库中获取帖子,并通过条件while循环显示它们。问题是,每当我为一篇文章发表评论时,就会在数据库中为每个显示的评论输入评论。请帮助我解决这个问题。请注意,插入注释的php也在while()函数中,因为当我将其放在函数外部时,帖子的id没有得到,并且显示为零

<?php
$sql="SELECT first_name,surname,post_id,post_body,post_date FROM  

users_posts INNER JOIN users ON users.user_id=users_posts.user_id     ORDER BY
post_date DESC LIMIT $start,$per_page";
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)>0){
while($row=mysqli_fetch_assoc($result)){
$post_date=$row["post_date"];
$post_id=$row["post_id"];
$post_date=$row["post_date"];
$first_name=$row["first_name"];
$surname=$row["surname"];
post_body=$row["post_body"];
?>
//html to display users posts goes here
<?php
if(isset($_POST['publishcomment'])){
$postcomment=mysqli_real_escape_string($conn,$_POST['postcomment']);
$date=date('Y-m-d H:i:s');
if(mysqli_query($conn, "INSERT INTO user_post_comments      (post_id,user_id,comment_date,comment_body) VALUES ('$post_id','$user_id','$date','$postcomment')")){
header("location:home.php");
}else{
$error="something went wrong";
}

}                    
}
}                         
?>     

//用于显示用户帖子的html位于此处

由于在while循环中有insert语句,并且if(isset($\u POST['publishcomment']){
将始终为true,因此会为每个注释发布注释

您应该在注释表单中添加一个隐藏字段,该字段具有原始注释的post_id

<input type="hidden" name="current_post_id" value="<?php echo $post_id; ?>">
然后,ifstatement仅对用户评论的注释为真


注意:我假设您正在为该场景的每个注释字段创建一个单独的表单。否则,将始终提交隐藏字段,并且每个注释的ifstatement将再次为true。

“注意,插入注释的php也在while()函数中”。那将是你的问题。每$post\u id插入一个。你需要将绘制页面的代码与响应回发的代码分开。它只需要运行一次。它需要从$post获取变量(即用户提交的信息,其中应包括相关的post id)不是从循环中。您还需要使用参数化查询重新写入SQL,因为当前它容易受到SQL注入攻击,这可能会危害您的数据。而不是
&($\u POST['current\u POST\u id']=$POST\u id))
,最好将插入数据库的代码完全从while循环中删除,因为它根本没有理由在其中。
if ((isset($_POST['publishcomment'])) && ($_POST['current_post_id'] == $post_id)) {