当前位置:首页 > PHP

php实现留言板功能

2026-02-13 12:20:21PHP

数据库设计

创建一个MySQL数据库表存储留言信息,表结构可设计如下:

CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

连接数据库

使用PDO连接MySQL数据库:

$host = 'localhost';
$dbname = 'message_board';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

提交留言处理

创建表单提交处理逻辑:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = htmlspecialchars($_POST['username']);
    $content = htmlspecialchars($_POST['content']);

    $stmt = $pdo->prepare("INSERT INTO messages (username, content) VALUES (?, ?)");
    $stmt->execute([$username, $content]);

    header('Location: '.$_SERVER['PHP_SELF']);
    exit;
}

显示留言列表

查询并显示所有留言:

php实现留言板功能

$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($messages as $message) {
    echo '<div class="message">';
    echo '<h3>'.htmlspecialchars($message['username']).'</h3>';
    echo '<p>'.nl2br(htmlspecialchars($message['content'])).'</p>';
    echo '<small>'.date('Y-m-d H:i', strtotime($message['created_at'])).'</small>';
    echo '</div>';
}

前端表单

创建HTML表单供用户提交留言:

<form method="post" action="">
    <input type="text" name="username" placeholder="您的姓名" required>
    <textarea name="content" placeholder="留言内容" required></textarea>
    <button type="submit">提交留言</button>
</form>

安全增强

添加CSRF防护:

php实现留言板功能

session_start();

if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['token'], $_POST['token'])) {
        die('CSRF验证失败');
    }
    // 继续处理表单
}

表单中添加隐藏的CSRF token字段:

<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">

分页功能

实现留言分页显示:

$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;

$total = $pdo->query("SELECT COUNT(*) FROM messages")->fetchColumn();
$totalPages = ceil($total / $perPage);

$stmt = $pdo->prepare("SELECT * FROM messages ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->bindValue(1, $perPage, PDO::PARAM_INT);
$stmt->bindValue(2, $offset, PDO::PARAM_INT);
$stmt->execute();

添加分页导航:

for ($i = 1; $i <= $totalPages; $i++) {
    echo '<a href="?page='.$i.'">'.$i.'</a> ';
}

标签: 留言板功能
分享给朋友:

相关文章

vue实现换页功能

vue实现换页功能

Vue 实现分页功能 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 在 main.js 中引入: import Vue fr…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…

vue实现网页功能

vue实现网页功能

Vue 实现网页功能的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 适合现代轻量级应用。 npm init vue@lat…

vue 实现拍照功能

vue 实现拍照功能

使用HTML5的getUserMedia API实现拍照 在Vue中实现拍照功能可以通过HTML5的getUserMedia API访问摄像头,结合canvas元素捕获图像。 安装依赖(如需处理图像…

vue实现小功能

vue实现小功能

Vue.js 是一个渐进式 JavaScript 框架,适合实现各种小型功能。以下是几个常见小功能的实现方法: 计数器功能 通过 Vue 的响应式数据绑定实现简单的计数器: <templat…

vue支付功能实现

vue支付功能实现

支付功能实现的基本流程 在Vue项目中实现支付功能通常需要对接第三方支付平台(如支付宝、微信支付、Stripe等)。以下是通用流程: 用户在前端选择支付方式并提交订单 后端生成支付参数并返回给前端…