通过 while 和 for 循环更新表


Updating table through while and for loop

我正在尝试整理我网站的私人消息部分的删除功能,基本上它可以很好地删除消息,但我现在试图让它不仅删除消息,而且删除连接到它的所有其他回复消息,通过一个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 ... 语句之外执行一次方法调用。