Как отобразить массив сообщений, полученных из базы данных, для чата - PullRequest
0 голосов
/ 08 апреля 2019

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

Моя проблема в том, что сообщения, которые возвращаются из базы данных, отображаются буквами и построчно. Кроме того, у меня есть <body onload="setInterval('chat.update()', 1000)"> на моей странице chat.php, который, кажется, загружает одно и то же сообщение снова и снова, пока не будет введено новое сообщение.

(см. Путь к скриншоту, недостаточно репов для размещения изображения)

Я подозреваю, что я возвращаю строку, а не массив строк, поэтому сообщения отображаются так, как они есть. Я довольно новичок в javascript и AJAX, поэтому я не уверен, что делать дальше.

Может кто-нибудь поделиться каким-либо советом о том, как вернуть и массив сообщений, который, возможно, решит мою проблему?

Заранее спасибо!

Запуск базы данных MYSQL с отправкой chat.js в process.php. chat.php имеет HTML-код для области сообщений.

chat.php

    <div class="container chat-container">
        <div id="page-wrap">
            <h2 class="forum-header">Discussion Room for: <?php echo "$session" ?> </h2>
            <br>
            <p id="name-area"></p>
            <div id="chat-wrap"><div id="chat-area"></div></div>               
            <div class="md-form">
                <form id="send-message-area">
                    <label class="message-label" for="form7">Your Message</label>
                    <textarea id="sendie" maxlength = '100' class="md-textarea form-control" rows="3"></textarea>                        
                </form>
            </div>
        </div>
    </div>
</body>

chat.js

//Updates the chat
function updateChat() {
    if (!instanse) {
        instanse = true;
        $.ajax({
            type: "POST",
            url: "process.php",
            data: {
                'function': 'update',
                'state': state               
            },
            dataType: "json",
            success: function (data) {
                if (data.text) {
                    for (var i = 0; i < data.text.length; i++) {
                       $('#chat-area').append("<p>" + data.text[i] + "</p>");
                    }
                }
                document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight;
                instanse = false;
                state = data.state;
            }
        });
    } else {
        setTimeout(updateChat, 1500);
    }
}

process.php

case('update'):
        $state = $_POST['state'];

        $lines = "SELECT messageBody, timeSent, nickname FROM message ORDER BY timeSent";
        $result = mysqli_query($conn, $lines);

        if (mysqli_num_rows($result) > 0) {

            while ($row = mysqli_fetch_assoc($result)) {
                $message = $row['messageBody'];
                $time = $row['timeSent'];
                $nickname = $row['nickname'];
            }
        }

        $count = count($lines);
        if ($state == $count) {
            $log['state'] = $state;
            $log['text'] = false;
        } else {
            $text = array();
            $log['state'] = $state + count($lines) - $state;

            $text[] = $message = str_replace("\n", "", $message);
        }

        $log['text'] = $message;     
        break;

Также я использовал echo json_encode ($ log); Снимок экрана консоли

1 Ответ

0 голосов
/ 08 апреля 2019

В process.php вы должны сохранить полученный результат в массиве, например так:

if (mysqli_num_rows($result) > 0) {
            $message = array();                

            while ($row = mysqli_fetch_assoc($result)) {
                $message[] = $row['messageBody'];
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...