gpt4 book ai didi

javascript - 检查与上次运行 PHP 脚本相比,数据库行数是否发生变化?

转载 作者:行者123 更新时间:2023-11-30 23:01:20 25 4
gpt4 key购买 nike

我对如何对此进行编程有点困惑:这就是我正在尝试做的事情 - 我正在编写一个简单的聊天应用程序。分为两部分:

1.发送消息部分——消息被输入到文本区域并存储到数据库中(我用 jQuery AJAX 实现了这个)

**数据库:数据库中有两列,日期和消息

2. 接收消息部分——来自服务器的新更新在页面上更新而不刷新页面(我用 HTML 5 SSE 实现了这一点)。

在更高层次上,这是主要问题:我不知道如何编写条件 - 条件是 IF block 中的代码仅在数据库更新时运行,与上次 even 被触发相比 -换句话说,它应该只在有新消息时更新一次,而不是你在下面得到的:

Without if condition

这是两个代码页(我认为最好全部包含,否则上下文有点模糊):

快速总结:

chat.php - 主聊天界面

messaging.php - 聊天发送按钮重定向到这里处理

get_message.php - 监听新消息并以 AJAX 样式显示它

chat.php

<!-- display window -->
<div class = "message-window" id = "message-window">
Chat starts
</div>

<!-- listens in to new server updates and updates with new messages -->
<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("get_message.php");
source.onmessage = function(event) {
document.getElementById("message-window").innerHTML+=event.data + "<br>";
};
} else {
document.getElementById("message-window").innerHTML="Sorry, your browser does not support server-sent events...";
}
</script>

<!-- comopse message area -->
<div class = "send-wrapper">
<textarea id = "compose"></textarea>
<button type = "button" id = "send">Send</button>
</div>

<!-- event handler for click button to pass along data on the page -->
<script>
$(document).ready(function() {
$("#send").on('click', function() {
$.post(
// file
"messaging.php",
// data
{
// date: Date.toLocaleString(),
message: $("#compose").val()
},
// function after success
function(data, status) {
alert("Data: " + data + "\nStatus: " + status);
var singleMessageContent = $("#compose").val();
$("#message-window").html(
$("#message-window").html() + "<br />" + singleMessageContent
);
});
});
});
</script>

get_message.php

<?php
// get_message.php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

echo "retry: 1000\n";


// Create connection
$link = mysqli_connect('localhost', 'root', 'root', 'button');

// If number of rows changed from last retry

IF BLOCK (...)

// Get the most recent row
$query = "SELECT message FROM messages ORDER BY Date DESC LIMIT 1";
$result = mysqli_query($link, $query);

// echo the message field
$most_recent_row = mysqli_fetch_row($result);

echo "data: {$most_recent_row[0]}\n\n";

IF BLOCK (...)

flush();

?>

如您所见,我坚持的是 if block - 事件每次都由 chat.php 上的 EventSource 对象触发(我认为这是正确的?),那么我如何比较数据库事件在不同时间被解雇的问题?我需要这个,因为我想这样写,以便仅在更新数据库时显示消息。

if(current_database_rows != old_database_rows) 

这是我的想法:

与全局变量有关吗?在设置全局变量以计算每次执行 php 代码结束时数据库中的行数方面,运行 mysqli_num_rows($result),并与该变量进行比较。我的问题是 - 您将如何创建这个在触发事件之间不会丢失其值的“共享”变量?

如果您能告诉我可能的情况、替代解决方案或其他想法,我将不胜感激。谢谢!

最佳答案

如果您正在存储消息发送的日期(希望是时间?),您可以返回最后一条聊天消息的时间,然后继续将该更新的值发送回您的查询(通过 ajax)以仅接收过去的聊天那个时候。

关于javascript - 检查与上次运行 PHP 脚本相比,数据库行数是否发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23809776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com