Javascript 在php的评论回复系统中删除某个评论

Javascript 在php的评论回复系统中删除某个评论,javascript,php,Javascript,Php,我已经用php创建了一个评论回复系统。它类似于facebook中的墙。用户撰写评论,然后将其发布在“墙”中。我在数据库中使用以下表格来保存注释:注释(注释id、注释、注释日期、用户、注释哈希、flash)和保存用户详细信息的表格用户:用户(用户id、名称、姓氏)。一切都很完美,唯一的问题是我不能删除某条评论。删除注释意味着在我的数据库中为此注释设置标志=1 在每条评论上都有一个名为“删除”的链接。当用户按delete键时,javascript中会启动一个灯箱,用户按delete键时,会执行函数“

我已经用php创建了一个评论回复系统。它类似于facebook中的墙。用户撰写评论,然后将其发布在“墙”中。我在数据库中使用以下表格来保存注释:注释(注释id、注释、注释日期、用户、注释哈希、flash)和保存用户详细信息的表格用户:用户(用户id、名称、姓氏)。一切都很完美,唯一的问题是我不能删除某条评论。删除注释意味着在我的数据库中为此注释设置标志=1

在每条评论上都有一个名为“删除”的链接。当用户按delete键时,javascript中会启动一个灯箱,用户按delete键时,会执行函数“deletepost”。我唯一的问题是,该函数为数据库中的所有注释设置flag=1,而不是为我按delete键的特定注释设置flag=1。你知道如何改进我的代码吗

我使用以下功能来显示注释:

<?php
function getComments(){    
  $session_user_id = $_SESSION['user_id'];
  $comments = "";
  $sql = mysql_query("SELECT * FROM comments WHERE (`flag`=0) ORDER BY comment_date DESC LIMIT 40") or die (mysql_error());

  if(mysql_num_rows($sql) == 0){
    $comments = "<div class='each_comment'>  Write your first posts ...</div> ";
  }
  else{

    while ($row= mysql_fetch_assoc($sql)) {
  $comment_id = $row['comments_id'];
      $hash = $row['comment_hash'];

      $personal_1 = mysql_query("SELECT `user_id`, `name`, `surname`, `email`, `profile` FROM `users` WHERE `user_id`='{$row['user']}' ");

        while ($run_personal_1= mysql_fetch_assoc($personal_1)) {
          $comment_user_id = $run_personal_1['user_id'];
          $comment_user_name = $run_personal_1['name'];
          $comment_user_surname = $run_personal_1['surname'];
        }

    // displays comment that includes user's name and surname and hash
    $comments .= " $comment_user_surname   $comment_user_name   $hash";
    $comments .= ".$row['comment'].";


//---- at this point I insert a delete link , that when user presses it a javascript light box ask user if wants to delete the comment. If user press the delete button it is called the function named "deletepost".

//---- first checks if the comment is from the user that is logged in ($session_user_id) in order to have the right to delete post

  if($comment_user_id == $session_user_id){
      if(isset($_POST['submit_2'])) {
        deletepost($session_user_id, $comment_id);
        header('Location: wall.php');
      } 

  $comments .= <<<EOD
  <a href="javascript:void(0)" onclick="document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'"> <font color='grey' >Delete</font> </a>
<div id="light" class="white_content">
    <form action="$_SERVER[PHP_SELF]" method="post">
    <input type="submit" name="submit_2" value="Delete Post ">
    </form>
    <a href="javascript:void(0)" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'"><button>Cancel</button></a>
</div>
<div id="fade" class="black_overlay"></div>             
  EOD;
  }

  }
    return $comments;   
} 
?>
<?php
function postComments($comment){
    $comment = mysql_real_escape_string(strip_tags($comment));
        $session_user_id = $_SESSION['user_id'];
        $random_num = rand(0, 99999999999);
        $sql = mysql_query(" INSERT INTO `comments` (comment, comment_date, user, comment_hash) VALUES ('".$comment."', now(), '$session_user_id', '$random_num') ");
    return getComments();
}
?>

无论出于何种原因,我的第一反应是猜测
注释\u hash
工作不太正常。尝试简化删除功能:

function deletepost($comment_user_id, $comment_id){
    $sql="UPDATE `comments` SET `flag`=1 WHERE (`user`='$comment_user_id' AND `comments_id`='$comment_id')";
    $result=mysql_query($sql) or die("Error when trying to delete...");
}
我不知道为什么当前的delete函数要查询数据库以从表中获取哈希,然后使用哈希从同一表中查找同一行。它似乎毫无意义,效率低下,并且引入了更多可能破坏的东西


顺便说一句,Vascowhite是正确的,您不应该使用旧的mysql库,但我认为更改它不会解决您的问题。

在deletepost中,如果您一次删除一条注释,为什么要运行while循环来获取哈希值。另一件事是,flag=1出现在您的所有注释中,因为散列可能对所有用户的注释都是通用的。您需要使哈希对特定用户的每个注释都是唯一的

。它们不再得到维护。相反,学习,并使用或-将帮助您决定哪一个。我不知道…谢谢你的数据库模式是什么样子的?如果你是指表,我已经在顶部写了它们,但是数据类型是什么,索引是什么,你确定你正确设置了主键,等等。?您可以发布用于创建表的sql命令吗?我已经尝试过了,但仍然将flag=1设置为表中的所有注释。我看不出错误在哪里,这使得它适用于所有人,而不是某些人。。。您确定
comment\u id
已正确初始化吗?如果您忘记将其设置为自动增量
,可能会发生类似的情况。是的,我有自动增量。我在数据库中看到我的表,我看到每个帖子的注释都有不同的值。这个问题是否可能来自javascript?javascript?只有当它以某种方式为每条评论发送一个单独的删除请求时,我想这不是不可想象的。请查看您的页面正在发送的网络请求。是否知道要编写什么来改进此功能?每当您插入与特定用户相关的注释时,请使用唯一的哈希代码(如将哈希代码设置为随机数)在数据库中插入注释以及在删除特定用户的注释时,传递该用户id和函数参数中的随机数,并针对该用户id和数字更新该标志。
function deletepost($comment_user_id, $comment_id){
    $sql="UPDATE `comments` SET `flag`=1 WHERE (`user`='$comment_user_id' AND `comments_id`='$comment_id')";
    $result=mysql_query($sql) or die("Error when trying to delete...");
}