当前位置:首页 > PHP

php站内信实现

2026-01-28 21:58:55PHP

PHP 站内信功能实现

站内信功能通常包括发送、接收、查看和删除消息等基本操作。以下是实现站内信功能的详细方法:

数据库设计

创建两个表:users(用户表)和messages(站内信表)。

用户表结构示例:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

站内信表结构示例:

CREATE TABLE messages (
    id INT PRIMARY KEY AUTO_INCREMENT,
    sender_id INT NOT NULL,
    receiver_id INT NOT NULL,
    subject VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    is_read BOOLEAN DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sender_id) REFERENCES users(id),
    FOREIGN KEY (receiver_id) REFERENCES users(id)
);

发送站内信

通过表单提交发送消息,后端处理数据并存入数据库。

发送表单示例(HTML):

<form action="send_message.php" method="post">
    <input type="text" name="receiver_id" placeholder="接收者ID">
    <input type="text" name="subject" placeholder="主题">
    <textarea name="content" placeholder="内容"></textarea>
    <button type="submit">发送</button>
</form>

PHP 处理发送逻辑(send_message.php):

<?php
session_start();
include 'db_connect.php';

$sender_id = $_SESSION['user_id'];
$receiver_id = $_POST['receiver_id'];
$subject = $_POST['subject'];
$content = $_POST['content'];

$sql = "INSERT INTO messages (sender_id, receiver_id, subject, content) 
        VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iiss", $sender_id, $receiver_id, $subject, $content);
$stmt->execute();

header("Location: inbox.php");
?>

查看站内信

显示用户收件箱中的消息列表。

收件箱页面示例(inbox.php):

<?php
session_start();
include 'db_connect.php';

$user_id = $_SESSION['user_id'];

$sql = "SELECT m.id, u.username as sender, m.subject, m.content, m.is_read, m.created_at 
        FROM messages m 
        JOIN users u ON m.sender_id = u.id 
        WHERE m.receiver_id = ? 
        ORDER BY m.created_at DESC";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo "<div style='" . ($row['is_read'] ? "" : "font-weight:bold;") . "'>
            <a href='view_message.php?id=" . $row['id'] . "'>" . $row['subject'] . "</a>
            <span>来自: " . $row['sender'] . "</span>
            <span>" . $row['created_at'] . "</span>
          </div>";
}
?>

查看单条消息

点击消息标题后显示详细内容,并标记为已读。

查看消息页面(view_message.php):

<?php
session_start();
include 'db_connect.php';

$message_id = $_GET['id'];
$user_id = $_SESSION['user_id'];

// 标记为已读
$sql = "UPDATE messages SET is_read = 1 WHERE id = ? AND receiver_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $message_id, $user_id);
$stmt->execute();

// 获取消息内容
$sql = "SELECT m.*, u.username as sender 
        FROM messages m 
        JOIN users u ON m.sender_id = u.id 
        WHERE m.id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $message_id);
$stmt->execute();
$result = $stmt->get_result();
$message = $result->fetch_assoc();

echo "<h3>" . $message['subject'] . "</h3>";
echo "<p>发件人: " . $message['sender'] . "</p>";
echo "<p>时间: " . $message['created_at'] . "</p>";
echo "<div>" . nl2br($message['content']) . "</div>";
?>

删除站内信

用户可以删除自己发送或接收的消息。

删除消息逻辑(delete_message.php):

<?php
session_start();
include 'db_connect.php';

$message_id = $_GET['id'];
$user_id = $_SESSION['user_id'];

// 检查用户是否有权限删除(是发送者或接收者)
$sql = "DELETE FROM messages 
        WHERE id = ? AND (sender_id = ? OR receiver_id = ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iii", $message_id, $user_id, $user_id);
$stmt->execute();

header("Location: inbox.php");
?>

安全注意事项

  • 使用预处理语句防止 SQL 注入
  • 验证用户权限(确保用户只能操作自己的消息)
  • 对输出内容进行转义防止 XSS 攻击
  • 重要操作(如删除)使用 POST 请求而非 GET

以上方法提供了站内信功能的基本实现框架,可根据实际需求扩展更多功能,如消息分类、批量操作、附件支持等。

php站内信实现

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

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php实现上传

php实现上传

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

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数:…