我有一个包含以下字段的表: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());
}
}
如何将删除按钮绑定到各个帖子,而不是删除当前正在进行会话的用户所做的所有帖子?
答案 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的帖子。
这会回答你的问题吗?
答案 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 server和similar question的链接,可帮助您更好地理解。