From ea82104091775ba4a06627e79fc5a4e666c52e6b Mon Sep 17 00:00:00 2001 From: CXM <chenzixin202209@163.com> Date: Mon, 18 Mar 2024 00:43:04 +0000 Subject: [PATCH] implement the online user can chat within one chat area like a group --- Logic/chat.js | 61 ++++++++++++++++++++++++++++++++++++--- Logic/get_message.php | 20 +++++++++++++ Logic/send_message.php | 20 +++++++++++++ Presentation/chatPage.php | 23 ++++++++++++++- 4 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 Logic/get_message.php create mode 100644 Logic/send_message.php diff --git a/Logic/chat.js b/Logic/chat.js index e7c164e..94ace07 100644 --- a/Logic/chat.js +++ b/Logic/chat.js @@ -24,10 +24,63 @@ function fetchOnlineUsers() { xhr.send(); } -// 页面加载完毕时获取在线用户 +// —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— +// 获取消息函数 +function fetchMessages() { + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'http://localhost/zhushou/Logic/get_message.php', true); + xhr.onload = function () { + if (this.status == 200) { + var messages = JSON.parse(this.responseText); + var chatBox = document.getElementById('chat-box'); + chatBox.innerHTML = ''; // 清空当前聊天框 + + messages.forEach(function(message) { + var messageDiv = document.createElement('div'); + var senderSpan = document.createElement('span'); + senderSpan.textContent = message.user_Name + ': '; // 使用实际的字段名 + senderSpan.classList.add('sender'); // 添加 CSS 类名 + + var messageContentSpan = document.createElement('span'); + messageContentSpan.textContent = message.message; + + messageDiv.appendChild(senderSpan); + messageDiv.appendChild(messageContentSpan); + chatBox.appendChild(messageDiv); + }); + chatBox.scrollTop = chatBox.scrollHeight; // 滚动到最新消息 + } + }; + xhr.send(); +} + +// 发送消息函数 +function sendMessage() { + var messageInput = document.getElementById('message'); + var message = messageInput.value; + var receiverId = 1; // 需要根据实际情况设置接收者ID + var formData = new FormData(); + formData.append('message', message); + formData.append('receiver_id', receiverId); // 假设接收者ID + + var xhr = new XMLHttpRequest(); + xhr.open('POST', 'http://localhost/zhushou/Logic/send_message.php', true); + xhr.onload = function () { + if (this.status == 200) { + console.log(this.responseText); + fetchMessages(); // 发送消息后重新获取消息 + messageInput.value = ''; // 清空输入框 + } + }; + xhr.send(formData); +} + +// —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— + +// 页面加载完毕时获取在线用户和消息,并定时刷新 window.onload = function () { fetchOnlineUsers(); + fetchMessages(); + setInterval(fetchOnlineUsers, 5000); // 每5秒刷新在线用户 + setInterval(fetchMessages, 1000); // 每1秒刷新消息 }; - -// 每隔 5 秒刷新一次在线用户列表 -setInterval(fetchOnlineUsers, 5000); diff --git a/Logic/get_message.php b/Logic/get_message.php new file mode 100644 index 0000000..3c5655f --- /dev/null +++ b/Logic/get_message.php @@ -0,0 +1,20 @@ +<?php +session_start(); +require_once '../Logic/config.php'; + +$receiver_id = 1; // 接收者ID,假设已经保存在会话中 + +// 获取与当前用户相关的消息,并联合用户表获取发送者名字 +$stmt = DB->prepare(" + SELECT m.message_id, m.sender_id, m.receiver_id, m.message, m.timestamp, u.user_Name + FROM chat_message m + LEFT JOIN user u ON m.sender_id = u.id + WHERE m.receiver_id = ? OR m.sender_id = ? + ORDER BY m.timestamp DESC +"); +$stmt->execute([$receiver_id, $receiver_id]); +$messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + +echo json_encode($messages); +?> + diff --git a/Logic/send_message.php b/Logic/send_message.php new file mode 100644 index 0000000..e89c745 --- /dev/null +++ b/Logic/send_message.php @@ -0,0 +1,20 @@ +<?php +session_start(); +require_once '../Logic/config.php'; + +if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $sender_id = $_SESSION['user_id']; // 假设用户ID已经保存在会话中 + $receiver_id = $_POST['receiver_id']; + $message = $_POST['message']; + + if (!empty($message) && !empty($receiver_id)) { + $stmt = DB->prepare("INSERT INTO chat_message (sender_id, receiver_id, message) VALUES (?, ?, ?)"); + if ($stmt->execute([$sender_id, $receiver_id, $message])) { + echo json_encode(['status' => 'success']); + } else { + echo json_encode(['status' => 'error', 'message' => 'Failed to send message.']); + } + } +} +?> + diff --git a/Presentation/chatPage.php b/Presentation/chatPage.php index 141f380..e4803fd 100644 --- a/Presentation/chatPage.php +++ b/Presentation/chatPage.php @@ -43,6 +43,25 @@ flex-grow: 1; margin-right: 5px; } + + #chat-box div { + margin-bottom: 5px; + padding: 5px; + } + + #chat-box div span { + display: inline-block; + margin-right: 5px; + } + + #chat-box div span.sender { + font-weight: bold; + } + + .sender { + font-weight: bold; + color: #333; + } </style> </head> <body> @@ -62,6 +81,8 @@ <button onclick="sendMessage()">发送</button> </div> </div> -<script src="../Logic/chat.js"></script> +<script src="../Logic/chat.js"> + +</script> </body> </html> -- GitLab