当前位置:首页 > PHP

php ajax实现在线聊天

2026-02-13 21:55:40PHP

PHP AJAX 实现在线聊天

数据库设计

创建数据库表存储聊天消息,字段包括消息ID、发送者ID、接收者ID、消息内容、发送时间等。

CREATE TABLE chat_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sender_id INT NOT NULL,
    receiver_id INT NOT NULL,
    message TEXT NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

前端实现

使用HTML和JavaScript创建聊天界面,通过AJAX与后端交互。

<div id="chat-container">
    <div id="chat-messages"></div>
    <input type="text" id="message-input" placeholder="输入消息...">
    <button id="send-button">发送</button>
</div>

<script>
document.getElementById('send-button').addEventListener('click', function() {
    const message = document.getElementById('message-input').value;
    const receiverId = 2; // 接收者ID

    const xhr = new XMLHttpRequest();
    xhr.open('POST', 'send_message.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.onload = function() {
        if (xhr.status === 200) {
            document.getElementById('message-input').value = '';
            fetchMessages();
        }
    };
    xhr.send(`message=${encodeURIComponent(message)}&receiver_id=${receiverId}`);
});

function fetchMessages() {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'get_messages.php', true);
    xhr.onload = function() {
        if (xhr.status === 200) {
            document.getElementById('chat-messages').innerHTML = xhr.responseText;
        }
    };
    xhr.send();
}

// 定期刷新消息
setInterval(fetchMessages, 3000);
</script>

后端处理

创建PHP文件处理消息发送和获取。

send_message.php

<?php
header('Content-Type: application/json');

$message = $_POST['message'];
$receiverId = $_POST['receiver_id'];
$senderId = 1; // 从会话中获取发送者ID

$db = new PDO('mysql:host=localhost;dbname=chat_db', 'username', 'password');
$stmt = $db->prepare("INSERT INTO chat_messages (sender_id, receiver_id, message) VALUES (?, ?, ?)");
$stmt->execute([$senderId, $receiverId, $message]);

echo json_encode(['status' => 'success']);
?>

get_messages.php

<?php
$receiverId = 2; // 接收者ID
$senderId = 1; // 发送者ID

$db = new PDO('mysql:host=localhost;dbname=chat_db', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM chat_messages WHERE (sender_id = ? AND receiver_id = ?) OR (sender_id = ? AND receiver_id = ?) ORDER BY timestamp ASC");
$stmt->execute([$senderId, $receiverId, $receiverId, $senderId]);
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($messages as $msg) {
    $class = $msg['sender_id'] == $senderId ? 'sent' : 'received';
    echo "<div class='$class'>{$msg['message']}</div>";
}
?>

实时性优化

使用WebSocket或长轮询替代定期AJAX请求,实现更实时的消息推送。

长轮询实现

function longPoll() {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'long_poll.php', true);
    xhr.onload = function() {
        if (xhr.status === 200) {
            document.getElementById('chat-messages').innerHTML = xhr.responseText;
        }
        longPoll(); // 再次发起请求
    };
    xhr.send();
}
longPoll();

安全性考虑

对所有输入数据进行过滤和验证,防止SQL注入和XSS攻击。

php ajax实现在线聊天

$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
$receiverId = filter_var($_POST['receiver_id'], FILTER_VALIDATE_INT);

扩展功能

添加用户在线状态显示、消息已读标记、文件上传支持等功能,提升聊天体验。

标签: 在线php
分享给朋友:

相关文章

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…

php 插件实现

php 插件实现

PHP 插件实现方法 PHP 插件可以通过多种方式实现,具体取决于插件的用途和功能需求。以下是一些常见的实现方法: 使用钩子(Hooks)和过滤器(Filters) 钩子和过滤器是一种常见的插件架…