0

我正在尝试为我的网站的私人消息部分整理删除功能,基本上它可以很好地删除消息,但我现在正试图让它不仅删除消息,而且连接到的所有其他回复消息它通过一个while循环,每个单独的消息都有一个唯一的message_id,但是每个消息的“对话”,例如涉及回复的地方,都有一个message_unique,它对于通过彼此连接的每条消息都是相同的id。

这是下面的删除代码,它需要做的就是将一个变量设置为来自收件人的回复,或者如果它来自发件人,则将删除变量设置为一个,希望你现在应该明白我的意思它将 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 的全局变量,感谢你们给我的任何帮助

4

1 回答 1

1

我假设你的主键被称为类似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 执行更新。

附带说明:如果您只是设置要在其中使用的 SQL 字符串,则应该只在语句mysql_query()之外执行一次方法调用。if () ... else ...

于 2012-05-26T11:51:05.957 回答