如何让用户删除自己的评论?

时间:2014-01-14 16:45:07

标签: php

我的删除评论表单有问题。我想以某种方式创建用户删除自己的评论,但到目前为止我只设法为所有评论创建删除。它是否属于自己并不重要。

这是我的表格:

<form action="<?php echo $editFormAction; ?>" method="POST" name="CommentForm">
<table>
<tr><td colspan="2"></td></tr><tr><td><input type="hidden" name="name" value="<?php     
    echo $_SESSION['MM_Username']; ?>" /></td></tr>  

 <tr><td colspan="2">Заглавие:</td></tr><tr><td><input type="text" name="title"  
 style="width:300px; height:20px;" /></td></tr>
 <tr><td colspan="2">Коментар</td></tr>
 <tr><td colspan="2"><textarea name="comment" style="width:450px; height:150px;"> 
   </textarea></td></tr>
  <tr><td colspan="2"><input type="submit" name="submit" value="Коментирай"                     
    style="padding:5px; color:#069"/></td></tr>

</table>
   <input type="hidden" name="MM_insert" value="CommentForm" />


   </form><br /><br  />
<?php

  $getquery=mysql_query("SELECT * FROM comments ORDER BY id DESC");

  while($rows=mysql_fetch_assoc($getquery))
   {
 $id=$rows['id'];
 $title=$rows['title'];
 $comment=$rows['comments'];
 $MM_Username=$rows['name'];
 $dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>";

 echo '<b><p   style="background-color:#6CC; border-radius:10px; te"
     ;border:1px solid;"> &nbsp Потребител:</b> ' . $MM_Username . ' <br /><b>&nbsp   
     Тема:</b> ' . $title . '</b><br /><b>&nbsp Коментар:</b><br />&nbsp ' . $comment .
      '<br />' . $dellink .'</p><br />' ;

    }

  ?>

这是我的delete.php:

 <?php
  include 'Connections/localhost.php';
  mysql_query("DELETE FROM comments WHERE id = $_GET[id]")or die(msql_error()) ;
  header('location: komentari.php');
 ?>

3 个答案:

答案 0 :(得分:1)

我认为用户已登录,并且您有关于存储在会话中的该用户的一些信息。如果它不存在,您应该添加用户ID,以便您可以在delete.php中执行:

<?php
session_start();

// Here you should kick out any visitors that are not logged in


// proceed with the delete
include 'Connections/localhost.php';

$id = (int) $_GET[id];
$uid = (int) $_SESSION['user_id'];    // or something similar

mysql_query("DELETE FROM comments WHERE id = $id AND owner_id = $uid")or die(msql_error()) ;
                                                     ^^^^^^^^ or something similar
// etc.

你现在应该切换到PDO或mysqli并准备好语句,因为你现在有一个SQL注入问题而且mysql_*函数已被弃用。

答案 1 :(得分:0)

最简单的解决方案是将AND owner = ?添加到DELETE查询的末尾。从存储当前用户ID(可能是会话)的任何位置填充值。您需要将表达评论的用户的ID存储在表的所有者列中。

您可能希望添加一些代码来测试删除是否成功,并可能进行更多查询以找出原因,如果不是这样,您可以提供良好的错误报告。

通过比较从数据库中获取的所有者值与当前用户的值,可以避免不恰当地生成删除链接。

答案 2 :(得分:0)

你将不得不在这里解决两个问题。首先,您的'delete.php'应仅处理注释所有者等同于登录用户的位置。为此,您需要添加

" AND [owner] = $_SESSION['CurrentUser']"

请注意,这取决于您的数据结构。

你需要提出一些逻辑的第二点是

的定义
$dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>";

此时,您将要添加:

IF ([owner] == $_SESSION['CurrentUser'])
   $dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>";
ELSE
   $dellink=""

或等效的PHP。对不起,我有一段时间没用PHP编程。但其他目前的答案似乎都无法解决这两个问题。