php实现双方聊天
实现 PHP 双方聊天功能
数据库设计
需要创建一张表存储聊天消息,字段包括发送者、接收者、消息内容和时间戳。
CREATE TABLE chat_messages (
id INT AUTO_INCREMENT PRIMARY KEY,
sender_id INT NOT NULL,
receiver_id INT NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_read BOOLEAN DEFAULT FALSE
);
发送消息功能
创建一个PHP文件处理消息发送,例如send_message.php

<?php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 获取POST数据
$sender_id = $_POST['sender_id'];
$receiver_id = $_POST['receiver_id'];
$message = $_POST['message'];
// 插入消息到数据库
$stmt = $conn->prepare("INSERT INTO chat_messages (sender_id, receiver_id, message) VALUES (?, ?, ?)");
$stmt->bind_param("iis", $sender_id, $receiver_id, $message);
$stmt->execute();
?>
获取消息功能
创建get_messages.php获取聊天记录

<?php
header('Content-Type: application/json');
$conn = new mysqli('localhost', 'username', 'password', 'database');
$user1 = $_GET['user1'];
$user2 = $_GET['user2'];
$query = "SELECT * FROM chat_messages WHERE
(sender_id = ? AND receiver_id = ?) OR
(sender_id = ? AND receiver_id = ?)
ORDER BY created_at ASC";
$stmt = $conn->prepare($query);
$stmt->bind_param("iiii", $user1, $user2, $user2, $user1);
$stmt->execute();
$result = $stmt->get_result();
$messages = [];
while($row = $result->fetch_assoc()) {
$messages[] = $row;
}
echo json_encode($messages);
?>
前端实现
创建聊天界面chat.html
<div id="chat-container">
<div id="messages"></div>
<input type="text" id="message-input">
<button id="send-button">发送</button>
</div>
<script>
// 获取用户ID
const user1 = 1; // 当前用户ID
const user2 = 2; // 聊天对象ID
// 定期获取新消息
function fetchMessages() {
fetch(`get_messages.php?user1=${user1}&user2=${user2}`)
.then(response => response.json())
.then(messages => {
document.getElementById('messages').innerHTML = '';
messages.forEach(msg => {
const div = document.createElement('div');
div.className = msg.sender_id == user1 ? 'sent' : 'received';
div.textContent = msg.message;
document.getElementById('messages').appendChild(div);
});
});
}
// 每2秒刷新一次消息
setInterval(fetchMessages, 2000);
// 发送消息
document.getElementById('send-button').addEventListener('click', () => {
const message = document.getElementById('message-input').value;
if(message.trim() === '') return;
const formData = new FormData();
formData.append('sender_id', user1);
formData.append('receiver_id', user2);
formData.append('message', message);
fetch('send_message.php', {
method: 'POST',
body: formData
}).then(() => {
document.getElementById('message-input').value = '';
fetchMessages();
});
});
</script>
实时更新优化
对于更实时的体验,可以考虑以下改进:
- 使用WebSocket替代轮询
- 添加消息已读状态更新功能
- 实现消息通知提醒
- 添加文件或图片发送功能
安全考虑
- 对所有用户输入进行验证和过滤
- 使用预处理语句防止SQL注入
- 实现用户认证系统
- 对敏感数据进行加密






