Я предлагаю вам сделать шаг назад и немного реструктурировать этот подход.
Например, вам не нужно conversationID
(по крайней мере, не в его текущем формате), так как вы можете вычесть его из Sender
и Receiver
, что более точно. Вам также не нужно MessageDate
, поскольку MessageTime
- это значение даты и времени, которое содержит дату и время. Таким образом, conversationID
и MessageDate
могут быть удалены.
Затем мы можем очистить количество запросов. Вы хотите получить все сообщения, если вы являетесь отправителем, а другой пользователь - получателем, или , где вы являетесь получателем, а другой пользователь - отправителем этого сообщения. Затем мы сортируем по дате (не по идентификатору!) И проверяем, должно ли сообщение быть зеленым или синим на основе значения Sender
этой строки - устанавливаем переменную $class
с одним значением для синего, если отправитель является текущим пользователь, зеленый в противном случае.
Как примечание, при выводе блоков HTML вы можете выйти из PHP, что облегчает чтение (и работу с кавычками). У вас также были элементы HTML с тем же идентификатором, что недопустимо.
Вы также должны использовать подготовленные операторы при работе с переменными в запросе.
<?php
include "../Site/db.php";
$url = $_SERVER['REQUEST_URI'];
$urlArray = explode('=', $url);
$Username = $urlArray[sizeof($urlArray) - 1];
$Myself = $_SESSION['username'];
$sql = "SELECT Message, MessageTime, Sender, Receiver
FROM messages
WHERE (Sender = ? AND Receiver = ?)
OR (Receiver = ? AND Sender = ?)
ORDER BY `MessageTime` ASC");
if (!$stmt = $conn->prepare($sql)) {
error_log($conn->error);
die("An error occurred fetching messages");
}
$stmt->bind_param("ssss", $Myself, $Username, $Myself, $Username);
$stmt->bind_result($message, $timeSent, $sender, $received);
if (!$stmt->execute()) {
error_log($stmt->error);
die("An error occurred fetching messages");
}
?>
<!-- Header of message box -->
<div id="messages" class="messagePersonBox shadow">
<span class="usersname" name="receiver"><a href="Account?=<?php echo $Username; ?>"><?php echo $Username; ?></a></span>
<hr style="margin-top:24px">
<div id="allMessages" class="allMessages">
<?php
while ($stmt->fetch()) {
$class = $sender == $Myself ? 'messageDisplay' : 'messageDisplay1'; // Check which class should be used; if I'm the sender, show messageDisplay, if not show MessageDisplay1
?>
<div class="<?php echo $class; ?>
<?php echo $message; ?>
<span style="float: right; margin-top: 2px">
<?php echo time_elapsed_string($timeSent); ?>
</span>
</div>
<?php
}
?>
<!-- Typing part of message -->
</div>
<input type="text" id="messagetosend" name="message" class="messagetype" placeholder="Type a message..."><span id="send" class="messageSend">↩</span>
</div>
<?php
$stmt->close();