У меня есть проект, который использует приложение чата. Я уже прочитал здесь ответ о том, как удалить сообщение от пользователя, но он не будет удален от другого пользователя. Тем не менее, я застрял в этом. Я могу удалить его, не используя удаление строки, но только обновление idSender (idPengirim). Поле idReceiver (idPenerima) по-прежнему остается. Кроме того, он всегда удаляется от обоих пользователей. Здесь это метод:
public function deleteChat($pengirim,$penerima,$idChat){
$query = $this->conn->prepare("SELECT * FROM mess WHERE idChat=:idchat");
$query->execute(array(":idchat" => $idChat));
while($row=$query->fetch(PDO::FETCH_ASSOC)){
$row['idPengirim'] = $pengirim;
$row['idPenerima'] = $penerima;
if($pengirim == -1 && $penerima == -1){
$query = $this->conn->prepare("DELETE FROM mess WHERE idChat = :idchat");
$query->execute(array(":idchat"=>$idChat));
}
if ($pengirim!=-1){
$query = $this->conn->prepare("UPDATE mess SET idPengirim = -1");
$query->bindParam(":idchat",$idChat);
$query->execute();
return $query;
}
if ($penerima!=-1){
$query = $this->conn->prepare("UPDATE mess SET idPenerima = -1");
$query->bindParam(":idchat", $idChat);
$query->execute();
return $query;
}
}
}
Я понятия не имею, что мне делать. Надеюсь, я найду здесь гидов, спасибо. Извините за мой сломанный английский.
Я думаю, что правильный способ создания чат-приложения - построить таблицу, размещенную для chats
и содержать userFromId
и userToId
. когда вы получаете чат, вы отправляете запрос get * from chat where userFromId=.. and userToId =.....
и когда вы удаляете чат, вы делаете то же самое: delete * from chat where..
Я не знаю, как вы так как у вас нет проблем с "чатом, удаленным от одного пользователя и не удаленным из другого".
$row['idPengirim'] = $pengirim;
? Вы ничего не делаете с этим. На самом деле вы вообще не читаете из массива$row
, так почему у вас естьSELECT
? И в вашихUPDATE
вы:idchat
переменную:idchat
, но не используете ее в своих запросах.