mysql — система обмена сообщениями PHP не будет отображать первое сообщение

Я использую PHP и создал довольно сложную систему обмена сообщениями. Но моя проблема в том, что оно не покажет первое сообщение, пока оно не будет «подтолкнуто» вверх. Если я захожу в чей-то профиль и отправляю им сообщение, первое сообщение не будет отображаться, но если я отправлю другое, первое покажет, а второе — нет … пока я не отправлю третье сообщение, то отобразятся первое и второе. и так далее и тому подобное.

Я проверил это, и это, кажется, не CSS или MySQL. Текст на самом деле отображается, и база данных хранит каждое сообщение в секунду, когда оно отправлено. Я даже отправляю 1 сообщение, иду домой, а затем проверяю, было ли оно отправлено, и оно было, но оно не будет отображаться, пока не будет отправлено 2-е. База данных также показывает данные сообщения, которые хранятся, и это там и все.

Есть ли способ нажать строку в моем выводе php вперед на один? Так что это на ходу?

Этот код ниже проверяет наличие любых сообщений между двумя пользователями из базы данных и сохраняет их в массиве, если они существуют.

$query = "select * from messages INNER JOIN users u on u.userid = messages.createduserid
where (createduserid='$user' && recuserid='$recuser') OR (createduserid='$recuser' && recuserid='$user')
ORDER BY createddate DESC limit 6 " or die("Error in the consult.." . mysqli_error($connection));
$result = $connection->query($query);
$row = mysqli_fetch_array($result);

Это берет массив, созданный выше, и помещает это для пользователей, чтобы видеть

while ($profilepreviewlist = $result->fetch_assoc()) {


echo '<div class="previewlistitem">';
echo'<p class="messagetext">';
echo $profilepreviewlist['username'],': ';

echo $profilepreviewlist['body'];
echo'<div class="messagedate">';
echo ($profilepreviewlist["createddate"]);
echo'</div>';
echo'</p>';
echo '</div>';
}
?>

Когда эта кнопка нажата, сообщение отправляется и запускает код под ним

<input class="input" name="messageplace" placeholder="Type a message here" id="messageplace">

Этот код хранит данные из их сообщения, отправляя их в базу данных, затем обновляет страницу сообщения

$userid = $_SESSION['userid'];
$recuserid = $_SESSION['tempuserid'];
$body=$_POST['messageplace'];
$datee = new DateTime("NOW");
$createddate = $datee->format('Y-m-d H:i:s');

send_message($userid,$recuserid,$body,$createddate);
include('message.php');

Если вы заинтересованы в тестировании этой функции, дайте мне знать

2

Решение

Когда вы звоните $row = mysqli_fetch_array($result) вы обращаетесь к первой записи, которую возвратил ваш SQL-запрос и продвигая курсор $result к следующей записи. Поэтому, когда вы звоните:

while ($profilepreviewlist = $result->fetch_assoc()) {
//do whatever...
}

У вас не будет доступа к первой записи в наборе, потому что вы уже обработали ее — она ​​хранится в $row,

Чтобы устранить проблему, удалите $row = mysqli_fetch_array($result), Удалив его, вы больше не обрабатываете запись и получите доступ к ней в цикле while.

4

Другие решения

Похоже, у вас есть «состояние гонки» … в котором вы пытаетесь получить сообщение до того, как оно будет вставлено. Например, в этих строках:

send_message($userid,$recuserid,$body,$createddate);
include('message.php');

Это, или вы отображаете кэшированные данные, которые были получены до вставки.

Вы не хотите увеличивать возвращаемые строки на 1; это не решит проблему.

3

По вопросам рекламы [email protected]