当前位置:首页 > PHP

php实现双方聊天

2026-03-13 12:39:09PHP

实现 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>

实时更新优化

对于更实时的体验,可以考虑以下改进:

php实现双方聊天

  • 使用WebSocket替代轮询
  • 添加消息已读状态更新功能
  • 实现消息通知提醒
  • 添加文件或图片发送功能

安全考虑

  • 对所有用户输入进行验证和过滤
  • 使用预处理语句防止SQL注入
  • 实现用户认证系统
  • 对敏感数据进行加密

标签: 双方php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUES…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php 抢购实现

php 抢购实现

抢购系统设计要点 高并发抢购系统的核心在于解决超卖问题、保证数据一致性以及提升系统性能。PHP实现需结合数据库、缓存和队列等技术。 数据库层面优化 使用InnoDB引擎的事务特性确保数据一致性。商品…