Личные сообщения на PHP

169
06 апреля 2019, 00:00

Всем привет, пишу сайт и в нём написал раздел Личные сообщения. Посещаешь страницу человека, и кнопка отправить сообщения. в БД сделал таблицу id from_login to_login message time Написал скрипт на php, всё работает, но есть проблема. Сообщения находятся всегда вверху отправителя, я сортировал по времени, но оно сортирует только его смс, а после его сообщений уже находятся мои. Буду очень благодарен если поможете, гуглил не нашёл ничего годного, Мне нужно чтобы были сообщения в порядке, последовательно. Написал он, если я ответил ты выводить его сообщение потом моё. У меня всегда находятся сообщения верху того, с кем мы переписываемся, потом как его сообщения закончились, идут мои. Вот мой код php:

<?php
//Подключение к БД
$connect = mysqli_connect('localhost', 'root', '', 'ruletka');
//Данные в куки
$login = $_COOKIE['pass'];
$time = date("H:i:s");
//Выводим ник получателя
$query = ("SELECT * FROM `users` WHERE `id` = '$_GET[id]'");
$data = mysqli_query($connect, $query);
$result = mysqli_fetch_row($data);
$result[1];
//Поле и кнопка
$message = $_POST['message'];
$enter = $_POST['enter'];
//Заносим сообщение в бд
if (isset($enter) && !empty($message)) {
$query = ("INSERT INTO `privatemessage` (`from_login`, `to_login`, `message`, `time`) VALUES ('$login', '$result[1]', '$message', '$time')");
$data = mysqli_query($connect, $query);
}
echo "<hr>
<p class='login'><a href = 'user.php?id=$result[0]'>$result[1]</a></p>
<div class='bordertop'></div>
<div class='bordersend'></div>
<form action ='privatemessage.php?id=$result[0]' method='POST'>
<div class='send'>
    <textarea name = 'message' rows='2' cols='60' placeholder='Напишите сообщение...'></textarea>
</div>
<div class='sendbuttom'> 
    <input type='submit' name='enter' size='20'>
</div>
</form>";
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Диалоги</title>
    <style type="text/css">
    h2{
        z-index: 2;
    }
        .border{
            overflow: scroll;
            border: 1px solid #E3E4E8;
            background: white;
            position: absolute;
            top: 104px;
            left: 400px;
            width: 550px;
            height: 455px;
        }
        hr{
    border: none; /* Убираем границу */
    background-color:#4A76A8; /* Цвет линии */
    height: 47px; /* Толщина линии */
    width: 1367px;
    position: absolute;
    top: -10px;
    left: -1px;
        }
.bordersend{
border: 1px solid #E3E4E8;
background: white;
position: absolute;
top: 560px;
left: 400px;
width: 550px;
height: 50px;
}
.send{
position: absolute;
top: 570px;
left: 410px;
}
textarea{
    resize: none;
}
.sendbuttom{
position: absolute;
top: 570px;
left: 860px;
}
input{
    height: 35px;
}
.bordertop{
border: 1px solid #E3E4E8;
background: white;
position: absolute;
top: 53px;
left: 400px;
width: 550px;
height: 50px;
}
.login{
z-index: 3;
position: absolute;
top: 35px;
left: 630px;
font-size: 30px;
}
    .message{
        position: absolute;
        top: 20px;
        left: 30px;
    }
a{
    text-decoration: none;
}
    </style>
</head>
<body bgcolor='#EDEEF0'>
    <div class='border'>
<div class = 'message'>
<?php
////Выводим ник отправителя
$query2 = ("SELECT * FROM `users` WHERE `login` = '$login'");
$data2 = mysqli_query($connect, $query2);
$result2 = mysqli_fetch_row($data2);
//Выводим ник получателя
$query1 = ("SELECT * FROM `users` WHERE `id` = '$_GET[id]'");
$data1 = mysqli_query($connect, $query1);
$result1 = mysqli_fetch_row($data1);
//Выводим сообщение для получателя
$query = ("SELECT * FROM `privatemessage` WHERE `from_login` = '$result1[1]' and `to_login` = '$login' ");
$data = mysqli_query($connect, $query);
$i = 1;
while ($result = mysqli_fetch_array($data)) {
    echo "<div style = 'overflow-auto'><a href = 'user.php?id=$result1[0]'>$result[1]</a><br>$result[3]<br>$result[4]<br></div><br>";
    $i++;
}
////Выводим сообщение для отправителя
$query = ("SELECT * FROM `privatemessage`  WHERE `to_login` = '$result1[1]' and `from_login` = '$login' ");
$data = mysqli_query($connect, $query);
$i = 1;
while ($result = mysqli_fetch_array($data)) {
    echo "<a href = 'user.php?id=$result2[0]'>$result[1]</a><br>$result[3]<br>$result[4]<br><br>";
    $i++;
}
?>
</div>
</div>
</body>
</html>
Answer 1

Так не пойдет. Данные надо выбирать одним запросом а не двумя.

        // Выводим сообщение двух пользователей
        $query = ("SELECT * FROM `privatemessage` WHERE `from_login` = '$result1[1]' AND `to_login` = '$login' OR `from_login` = '$login' AND `to_login` = '$result1[1]'");
        $data = mysqli_query($connect, $query);
        $i = 1;
        while ($result = mysqli_fetch_array($data)) {
            // Здесь выводим сообщене
            $i++;
        }
READ ALSO
Как реализовать выборку части текста из сообщения?

Как реализовать выборку части текста из сообщения?

Есть условное приложение, которое позволяет записывать в БД сообщения с секретными кодами внутриСекретный код записывается внутри фигурных...

167
Как решить ошибку?

Как решить ошибку?

Не работает отправка в Jabber, как решить ошибку? Доброго времени суток, друзья!

216
Как оживить кнопки? Win32

Как оживить кнопки? Win32

Создал окно программы с пунктами и подпунктамиКаким образом можно оживить Кнопки? Например как сделать чтобы по нажатию на "Файл">"Выход"...

166
Ошибка в сортировке массива чисел

Ошибка в сортировке массива чисел

код должен отсеивать все элементы массива не входящие в границы [a b], массив сжимается, все не вошедшие элементы к нулю и вправо, выдает неправильный...

170