обновить веб-страницу после изменения базы данных без фреймворков? приложение для обмена сообщениями - PullRequest
0 голосов
/ 02 ноября 2018

Можно ли обновить веб-страницу при внесении изменений в базу данных без фреймворка? Я пытался найти ответ, но все, кажется, включают некоторый тип структуры для достижения этой цели. Я не люблю изучать новые рамки, если это не является абсолютно необходимым. Я пытаюсь сделать приложение для обмена сообщениями. Я могу получать сообщения от других, которые вошли в систему, но только если я обновлю страницу. Есть ли решение для этого, или, возможно, другой подход? Будет ли изучение основы абсолютно необходимо для этого? Вот мой код для печати сообщений, отправленных другим пользователем, в этом случае я назвал счет другого пользователя:

<?php
$conn = new mysqli($server_name,$server_username,$server_password,$dbname);

$bill = $conn ->query("SELECT message_sent FROM message WHERE name = 'bill'");
while($row = $bill->fetch_assoc())
{
    echo $row["message_sent"];
}
?>

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете сделать это довольно просто, просто используя 2 файла - index.php, который отображает HTML-страницу, и get_messages.php, который обслуживает последние сообщения.

При этом используется jQuery для выборки на стороне сервера , но это больше библиотека, чем фреймворк;)

HTML-страница index.php отправляет запрос на get-messages.php каждые 3 секунды, обновляя страницу новыми сообщениями.

Серверный сценарий get_messages.php также случайным образом создает сообщения, поэтому вы можете видеть мгновенные результаты ... как только вы увидите его в действии, вы можете удалить все между // --- BEGIN FAKE MESSAGE CREATION --- // и // --- END FAKE MESSAGE CREATION --- // комментариями и добавить Ваш собственный код базы данных в соответствующем месте.

Надеюсь, я добавил достаточно комментариев, чтобы объяснить, что происходит, где и почему!

index.php

<?php

// --- BEGIN FAKE MESSAGE CREATION --- //
session_start();
unset( $_SESSION[ 'messages' ] );
// --- END FAKE MESSAGE CREATION --- //

?>
<!--DOCTYPE HTML -->
<html>
<head>
<meta charset="utf-8">
<title>Messages</title>
<!-- Load jQuery -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
</head>
<body>

<h1>Messages</h1>

<!-- This <div> is where messages will be displayed -->
<div id="message_list"></div>

<script>
function get_messages() {
  // Load messages from the server
  $.ajax({
    url: 'get_messages.php',
    success: function(result){
      // Insert the result into <div id="message_list">
      $("#message_list").html(result);
    }
  });
}

// Wait for the page to load...
$(document).ready( function() {
  // Get messages straight away
  get_messages();
  // Call get_messages() every 3 seconds
  setInterval( get_messages, 3000 );  
});
</script>

</body>
</html>

get_messages.php

<?php
// --- BEGIN FAKE MESSAGE CREATION --- //
session_start();

// Maybe create a new message?
if ( !rand( 0, 3 ) )  
  $_SESSION[ 'messages' ][] = md5( time() );

$messages = $_SESSION[ 'messages' ];
// --- END FAKE MESSAGE CREATION --- //

echo '<p>Last updated: ' . date( 'H:i:s' ) . '</p>';

// *** This is where you'd loop through your database entries *** //
foreach ( $messages as $m )
  echo $m . '<br>';

?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...