当前位置:首页 > 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实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInt…

vue实现滚动留言板

vue实现滚动留言板

实现滚动留言板的基本思路 使用Vue实现滚动留言板,主要涉及动态数据渲染和CSS动画的结合。核心是通过Vue的响应式数据绑定,结合CSS的animation或JavaScript定时器实现滚动效果。…

留言板怎么实现vue

留言板怎么实现vue

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

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

vue实现答题功能

vue实现答题功能

Vue实现答题功能 数据准备 创建一个包含题目、选项和正确答案的数据结构,通常是一个数组对象。每个题目对象包含问题文本、选项数组和正确答案索引。 const questions = [ {…