当前位置:首页 > PHP

php站内信实现

2026-02-13 20:07:23PHP

站内信功能概述

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

数据库设计

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

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;
}

收件箱实现

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

php站内信实现

$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 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现上传

php实现上传

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

php实现推送消息推送消息

php实现推送消息推送消息

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

php实现过程

php实现过程

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

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class…