删除论坛帖子

时间:2011-08-03 15:31:10

标签: javascript php javascript-events

我有一个包含以下字段的表:wall_posts,group_id,id和user_id。

Wall_posts是用户条目,group_id是从另一个表导入的,只是一个唯一的组ID,id只是一个简单的计数器,user_id从会话中获取用户ID。

如果您通过将用户ID与会话中的用户进行比较来按下删除按钮,则我的代码将删除所有wall_posts。我正试图找到一种删除个别帖子的方法,而不是用户删除所有帖子。

以下是代码:

if (isset($_POST['delete'])) {
    $current_user = $_SESSION['user_id'];
    $result = mysql_query("SELECT * FROM group_posts");
    while ($user_id = mysql_fetch_array($result)) {
        $id = $user_id['user_id'];
    }
    if ($current_user == $id) {
        mysql_query("DELETE FROM group_posts WHERE $current_user = $id") or die(mysql_error());
    }
}

如何将删除按钮绑定到各个帖子,而不是删除当前正在进行会话的用户所做的所有帖子?

2 个答案:

答案 0 :(得分:2)

上面的SQL查询没有意义 - WHERE语句的格式应为WHERE column_name = value

假设id是group_posts的主键,当您显示帖子时,请为作者创建的每个帖子创建一个链接,例如: <a href="delete.php?delete=3">Delete This Post</a>发布id 3.然后你会做这样的查询:

DELETE FROM group_posts WHERE id = postIdValueHere

使用上面的代码模式:

if (isset($_POST['delete']) && $_POST['delete'] > 0) {
$current_user = $_SESSION['user_id'];
$post_id = (int) $_POST['delete'];

if ($current_user == $id) {
    mysql_query("DELETE FROM group_posts WHERE id = $post_id AND user_id = $id") or die(mysql_error());
}

该查询确保只能删除当前作者创建的具有给定ID的帖子。

这会回答你的问题吗?

一旦您对SQL更加熟悉,您可能还希望使用mysqliPDO的预准备语句。这将有助于您的代码清洁和安全。

答案 1 :(得分:0)

我假设你的删除按钮是简单的链接。您的链接必须包含删除帖子的所有信息。一种方法是将帖子ID作为GET变量传递(例如link =“myurl.com/posts/delete?id =#”)。

然后,您的脚本首先会确保允许当前用户删除帖子。例如:

$user_id = $_SESSION['user_id'];
$post_id = (int) $_GET['id'];
if(canDelete($user_id, $post_id))
{
    // assuming post_id is unique for every post
    $sql = sprintf("DELETE FROM group_posts WHERE id = %d", $post_id);
    mysql_query($sql);
}

当然,您必须自己实施canDelete($user_id)

顺便说一句,"DELETE FROM group_posts WHERE $current_user = $id"总是会删除表格中的每条记录。首先,您要比较$current_user是否等于$id,如果它们确实相同,那么您的查询看起来就像WHERE 1 = 1。我想你的意思是"DELETE FROM group_posts WHERE user_id = '$id'"

编辑:您似乎想使用ajax删除帖子。我建议使用jQuery或任何其他适当的JavaScript框架,因为它可以节省您的时间。以下是jQuery文档中描述how to make an ajax call to the serversimilar question的链接,可帮助您更好地理解。