Javascript 在php的评论回复系统中删除某个评论
我已经用php创建了一个评论回复系统。它类似于facebook中的墙。用户撰写评论,然后将其发布在“墙”中。我在数据库中使用以下表格来保存注释:注释(注释id、注释、注释日期、用户、注释哈希、flash)和保存用户详细信息的表格用户:用户(用户id、名称、姓氏)。一切都很完美,唯一的问题是我不能删除某条评论。删除注释意味着在我的数据库中为此注释设置标志=1 在每条评论上都有一个名为“删除”的链接。当用户按delete键时,javascript中会启动一个灯箱,用户按delete键时,会执行函数“deletepost”。我唯一的问题是,该函数为数据库中的所有注释设置flag=1,而不是为我按delete键的特定注释设置flag=1。你知道如何改进我的代码吗 我使用以下功能来显示注释:Javascript 在php的评论回复系统中删除某个评论,javascript,php,Javascript,Php,我已经用php创建了一个评论回复系统。它类似于facebook中的墙。用户撰写评论,然后将其发布在“墙”中。我在数据库中使用以下表格来保存注释:注释(注释id、注释、注释日期、用户、注释哈希、flash)和保存用户详细信息的表格用户:用户(用户id、名称、姓氏)。一切都很完美,唯一的问题是我不能删除某条评论。删除注释意味着在我的数据库中为此注释设置标志=1 在每条评论上都有一个名为“删除”的链接。当用户按delete键时,javascript中会启动一个灯箱,用户按delete键时,会执行函数“
<?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...");
}