当前位置:首页 > 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实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php mvc实现

php mvc实现

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

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…

vue实现站内信

vue实现站内信

Vue 实现站内信功能 前端实现 组件结构设计 创建 MessageList.vue 和 MessageDetail.vue 组件,分别用于展示消息列表和消息详情。使用 Vue Router 实现页面…