当前位置:首页 > PHP

php站内信实现

2026-02-13 20:07:23PHP

站内信功能概述

站内信是网站内部用户之间通信的系统,通常包含发送、接收、查看和删除等功能。PHP实现需结合数据库存储消息数据,并通过前端界面交互。

数据库设计

创建消息表存储站内信数据,基础字段包括:

CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sender_id` int(11) NOT NULL,
  `receiver_id` int(11) NOT NULL,
  `subject` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `is_read` tinyint(1) DEFAULT 0,
  `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `receiver_id` (`receiver_id`)
);

发送功能实现

构建表单提交处理逻辑,验证后插入数据库:

// 发送消息处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $senderId = $_SESSION['user_id'];
    $receiverId = intval($_POST['receiver_id']);
    $subject = htmlspecialchars($_POST['subject']);
    $content = htmlspecialchars($_POST['content']);

    $stmt = $pdo->prepare("INSERT INTO messages (sender_id, receiver_id, subject, content) VALUES (?, ?, ?, ?)");
    $stmt->execute([$senderId, $receiverId, $subject, $content]);

    header("Location: messages.php?sent=1");
    exit;
}

收件箱实现

查询当前用户接收的消息并展示:

$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT m.*, u.username as sender_name 
                      FROM messages m 
                      JOIN users u ON m.sender_id = u.id 
                      WHERE m.receiver_id = ? 
                      ORDER BY m.created_at DESC");
$stmt->execute([$userId]);
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);

消息状态更新

标记消息为已读状态:

if (isset($_GET['id'])) {
    $messageId = intval($_GET['id']);
    $stmt = $pdo->prepare("UPDATE messages SET is_read = 1 WHERE id = ? AND receiver_id = ?");
    $stmt->execute([$messageId, $_SESSION['user_id']]);
}

前端界面示例

构建基础HTML模板展示消息列表:

<div class="message-list">
    <?php foreach ($messages as $msg): ?>
    <div class="message <?= $msg['is_read'] ? 'read' : 'unread' ?>">
        <h4><?= htmlspecialchars($msg['subject']) ?></h4>
        <p>发件人: <?= htmlspecialchars($msg['sender_name']) ?></p>
        <p><?= nl2br(htmlspecialchars($msg['content'])) ?></p>
        <small><?= $msg['created_at'] ?></small>
    </div>
    <?php endforeach; ?>
</div>

安全增强措施

  1. 对所有用户输入使用htmlspecialchars()过滤
  2. 使用预处理语句防止SQL注入
  3. 验证消息接收者是否为有效用户
  4. 实施CSRF保护令牌

性能优化建议

  1. 对消息表进行分表处理,按用户ID哈希分片
  2. 为常用查询字段添加索引
  3. 实现消息分页功能,避免一次性加载过多数据
  4. 对长时间未读消息实施自动归档机制

php站内信实现

标签: 站内php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (H…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…