首页 > 解决方案 > 没有框架的数据库更改后刷新网页?消息应用

问题描述

在没有框架的情况下对数据库进行更改时是否可以刷新网页?我尝试寻找答案,但似乎都包含某种类型的框架来完成此任务。我不喜欢学习一个新的框架,除非它是完全必要的。我正在尝试制作一个消息传递应用程序。我可以从其他登录的人那里收到消息,但前提是我刷新页面。有没有解决方案,或者可能采取不同的方法?完全有必要学习一个框架来完成这个吗?这是我打印从另一个用户发送的消息的代码,在这种情况下,我将另一个用户命名为 bill:

<?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"];
}
?>

标签: phpmysqlmysqli

解决方案


您只需使用 2 个文件即可轻松完成此操作 -index.php显示一个 HTML 页面,并get_messages.php提供最新消息。

这确实使用了一些jQuery 来进行服务器端获取,但它更像是一个库而不是框架;)

index.phpHTML 页面每 3 秒发送一次请求,get-messages.php使用任何新消息更新页面。

服务器端脚本get_messages.php还随机创建消息,因此您可以看到即时结果……一旦您看到它的实际效果,您可以删除// --- BEGIN FAKE MESSAGE CREATION --- //// --- END FAKE MESSAGE CREATION --- //注释之间的所有内容,并在适当的位置添加您自己的数据库代码。

希望我已经添加了足够的评论来解释发生了什么,在哪里以及为什么!

索引.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>';

?>

我知道这远非最优雅的解决方案,但希望这是一个很好的简单示例 - 一个改进是只返回新消息,并将它们附加到现有列表(以节省带宽等)......但我'留给你去弄清楚!


推荐阅读