当前位置:首页 > 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;
}

显示留言列表

查询并显示所有留言:

$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防护:

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();

添加分页导航:

php实现留言板功能

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

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

相关文章

留言板怎么实现vue

留言板怎么实现vue

使用 Vue 实现留言板 创建 Vue 项目 通过 Vue CLI 或 Vite 创建一个新的 Vue 项目。确保已安装 Node.js 和 npm/yarn。 npm init vue@lates…

vue实现付费功能

vue实现付费功能

Vue 实现付费功能的方法 集成第三方支付平台 选择适合的第三方支付平台(如支付宝、微信支付、Stripe、PayPal等),并按照其文档进行集成。在 Vue 项目中,可以通过引入支付平台的 SDK…

vue 实现多选功能

vue 实现多选功能

Vue 实现多选功能的方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选功能。适用于复选框组(checkbox)或下拉多选(select multi…

vue 分页功能实现

vue 分页功能实现

分页功能实现方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。 安装 Element UI: npm in…

vue实现全选功能

vue实现全选功能

实现全选功能的基本思路 在Vue中实现全选功能通常需要绑定一个全选复选框的状态,并通过v-model或事件监听控制子选项的选中状态。核心逻辑包括全选按钮与子选项的双向数据绑定,以及状态同步。 数据准…

vue实现的功能

vue实现的功能

Vue.js 的核心功能 Vue.js 是一个渐进式 JavaScript 框架,专注于构建用户界面。其核心功能包括数据绑定、组件化开发、指令系统和状态管理,适用于从简单交互到复杂单页应用(SPA)的…