我的删除评论表单有问题。我想以某种方式创建用户删除自己的评论,但到目前为止我只设法为所有评论创建删除。它是否属于自己并不重要。
这是我的表格:
<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;">   Потребител:</b> ' . $MM_Username . ' <br /><b> 
Тема:</b> ' . $title . '</b><br /><b>  Коментар:</b><br />  ' . $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');
?>
答案 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编程。但其他目前的答案似乎都无法解决这两个问题。