通过while和for循环更新表

时间:2012-05-26 11:16:57

标签: php mysql

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

下面是删除代码,它需要做的就是将变量设置为答复来自收件人的变量,或者如果它构成发件人,则将删除变量设置为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的全局变量,感谢你们给我的任何帮助

1 个答案:

答案 0 :(得分: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执行更新。

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