0

私は自分のサイトのプライベートメッセージセクションの削除機能を整理しようとしています。基本的にはメッセージを正常に削除しますが、メッセージだけでなく、に接続されている他のすべての返信メッセージも削除できるようにしようとしています。 whileループを介して、個々のメッセージには一意のmessage_idがありますが、応答が含まれる場所などのメッセージの各「会話」には、相互に接続されたすべてのメッセージに同じIDであるmessage_uniqueがあります。

以下の削除コードは次のとおりです。必要なのは、受信者からの返信の場合は変数を1に設定するか、送信者からの場合は削除変数を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のグローバル変数です。ご協力いただきありがとうございます。

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()の外部でメソッド呼び出しを1回だけ実行する必要があります。if () ... else ...

于 2012-05-26T11:51:05.957 に答える