我正在尝试整理我网站的私人消息部分的删除功能,基本上它可以很好地删除消息,但我现在试图让它不仅删除消息,而且删除连接到它的所有其他回复消息,通过一个while循环,每条消息都有一个唯一的message_id, 但是消息的每个"对话",例如涉及回复的地方,都有一个message_unique,对于通过彼此连接的每个消息都是相同的ID。
这是下面的删除代码,它需要做的就是将一个变量设置为一个回复来自收件人的变量,或者如果它形成发件人,则将删除变量设置为 1,希望您应该明白我的意思,目前它将 sender_deleted 和 recipient_deleted 都设置为 1,这不应该
if (isset($_POST['delete_inbox'])) {
foreach($_POST['inbox_select_box'] as $message_unique) //loop through the checkboxes
{
$query = mysql_query("SELECT * FROM messages WHERE message_unique = $message_unique");
while($row = mysql_fetch_assoc($query)){
extract($row);
if ($recipient_id == $user_id){
$sql = "UPDATE messages SET recipient_deleted = '1' WHERE message_unique = '$message_unique'";
$result=mysql_query($sql);
}
else{
$sql = "UPDATE messages SET sender_deleted = '1' WHERE message_unique = '$message_unique'";
$result=mysql_query($sql);
}
}
}
$user_id 是登录用户 id 的全局变量,感谢你们能给我的任何帮助
我假设您的主键被称为类似 message_id
.像这样尝试:
if (isset($_POST['delete_inbox'])) {
foreach($_POST['inbox_select_box'] as $message_unique) //loop through the checkboxes
{
$query = mysql_query("SELECT * FROM messages WHERE message_unique = $message_unique");
while($row = mysql_fetch_assoc($query)){
extract($row);
$message_id = $row['message_id'];
if ($recipient_id == $user_id){
$sql = "UPDATE messages SET recipient_deleted = '1' WHERE message_id = '$message_id'";
}
else
{
$sql = "UPDATE messages SET sender_deleted = '1' WHERE message_id = '$message_id'";
}
$result = mysql_query($sql);
}
}
}
问题是,您每次都在线程中的每条消息上设置值。您需要使用每行消息的实际 ID 执行更新。
作为旁注:如果您只是设置要在mysql_query()
中使用的 SQL 字符串,则应仅在 if () ... else ...
语句之外执行一次方法调用。