Почему бот из бд достает мое сообщение, когда должен вывести другой ответ?

Суть такая: пользователь через инлайн мод бота пишет @username и сообщение, которое хочет отправить. Бот сохраняет username того, кому отправляют, а также того, кто отправляет и само сообщение После чего бот присылает сообщение с кнопкой, которую нажать может тот юзер, кому оно было адресовано, остальным же бот напишет, что чужое сообщение нельзя прочитать

Функция получения сообщения из бд:

function message_get($username)
{
    global $db;
    $username = mysqli_real_escape_string($db, $username);
    $query = ("SELECT message, receiver_id
        FROM `secret_messages`
        WHERE receiver_id = '$username'
        ORDER BY id DESC LIMIT 1"); // Получить последний ID со строкой
    $result = mysqli_query($db, $query) or die ("Получить сообщение не удалось");
    return $result->fetch_assoc();
}

Сравнение юзернеймов получателя и того, кто нажимает на кнопку:

switch ($callback_data) {
case 'view_message':
    $messageData = message_get($username); // Получение запроса из бд
    if ($messageData['receiver_id'] == $username) { // Сравнение юзернейма/айди юзера, кому прислали сообщение и кто его читает
        $alert_message = [
            'callback_query_id' => $callback_query_id,
            'text' => $messageData['message'],
            'show_alert' => TRUE
        ];
        sendRequest('answerCallbackQuery', $alert_message);

        $message_read = [
            'inline_message_id' => $inline_message_id,
            'text' => '<b>Сообщение было прочитано</b> ✔',
            'parse_mode' => 'html'
        ];
        sendRequest('editMessageText', $message_read);
    } elseif ($messageData['message'] == null) {
        $alert_message = [
            'callback_query_id' => $callback_query_id,
            'text' => 'Такого сообщения не существует!',
            'show_alert' => TRUE
        ];
        sendRequest('answerCallbackQuery', $alert_message);
    } elseif ($messageData['receiver_id'] != $username) {
        $alert_message = [
            'callback_query_id' => $callback_query_id,
            'text' => 'Упс! Это не твое сообщение! ?',
            'show_alert' => TRUE
        ];
        sendRequest('answerCallbackQuery', $alert_message);
    }
        break;
}

Проблема заключается в том, что после отправления сообщения, для нажавшего на кнопку человека достается когда-то адресованное ему сообщение. Если в данный момент сообщение пришло не ему, то он все равно может нажать на кнопку, но прочитает только старый запрос

Пример на скриншотах:

сообщение пришло мне

введите сюда описание изображения

я могу его прочитать

сообщение не мне

вернулось ранее написанное мне сообщение

В итоге следующая ситуация - я пишу себе сообщение test и спокойно его читаю, затем пишу сообщение человеку с другим username и при нажатии на кнопку возвращается мое предыдущее сообщение, а не выводится от бота - Это не твое сообщение

что сохраняется в бд

Как можно по другому оформить функцию, чтобы каждому пользователю возвращалось свое сообщение, а другим выводилось, что оно чужое?


Ответы (1 шт):

Автор решения: Константин Бронштейн
$messageData = message_get($username); // Получение запроса из бд
if ($messageData['receiver_id'] == $username)

Смотри ты в функцию передаешь юзернэйм и получаешь строку где receiver_id равно этому юзернэйму, а потом берешь receiver_id в условии и сравниваешь с тем же юзернэймом с которым ты получил эту строку из базы. Понял? Условие всегда будет истина. Ты не можешь получить строку из базы где receiver_id=$username а потом в условии это ожидать что они будут отличаться

→ Ссылка