当前位置:首页 > 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实现双方聊天

<?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实现双方聊天

<?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注入
  • 实现用户认证系统
  • 对敏感数据进行加密

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

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…