当前位置:首页 > PHP

php实现留言板功能

2026-02-27 10:58:05PHP

创建数据库表结构

留言板功能通常需要一个数据库表来存储留言信息。可以使用以下SQL语句创建一个简单的留言表:

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

数据库连接配置

创建一个配置文件config.php来存储数据库连接信息:

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'database_name');
?>

留言表单页面

创建一个HTML表单页面index.php用于用户提交留言:

<?php require_once 'config.php'; ?>
<!DOCTYPE html>
<html>
<head>
    <title>留言板</title>
</head>
<body>
    <h1>留言板</h1>
    <form method="post" action="submit.php">
        <div>
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" required>
        </div>
        <div>
            <label for="email">邮箱:</label>
            <input type="email" id="email" name="email">
        </div>
        <div>
            <label for="content">留言内容:</label>
            <textarea id="content" name="content" required></textarea>
        </div>
        <button type="submit">提交留言</button>
    </form>
</body>
</html>

处理留言提交

创建submit.php文件处理表单提交并将数据存入数据库:

<?php
require_once 'config.php';

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

    try {
        $conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $conn->prepare("INSERT INTO messages (name, email, content) VALUES (:name, :email, :content)");
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':email', $email);
        $stmt->bindParam(':content', $content);
        $stmt->execute();

        header("Location: view.php");
        exit();
    } catch(PDOException $e) {
        echo "错误: " . $e->getMessage();
    }
}
?>

显示留言列表

创建view.php文件显示所有留言:

<?php
require_once 'config.php';

try {
    $conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->query("SELECT * FROM messages ORDER BY created_at DESC");
    $messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>留言列表</title>
</head>
<body>
    <h1>留言列表</h1>
    <a href="index.php">添加新留言</a>

    <?php foreach ($messages as $message): ?>
    <div style="margin-bottom: 20px; padding: 10px; border: 1px solid #ccc;">
        <h3><?php echo $message['name']; ?></h3>
        <p><?php echo nl2br($message['content']); ?></p>
        <small><?php echo $message['created_at']; ?></small>
    </div>
    <?php endforeach; ?>
</body>
</html>

安全增强措施

为增强安全性,可以添加以下措施:

// 在config.php中添加CSRF防护
session_start();
function generate_csrf_token() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

// 在表单中添加CSRF令牌
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">

// 在submit.php中验证CSRF令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("CSRF令牌验证失败");
}

数据验证和过滤

对用户输入进行更严格的验证:

// 验证姓名
if (!preg_match("/^[a-zA-Z0-9_\x{4e00}-\x{9fa5}]+$/u", $name)) {
    die("姓名只能包含中文、英文、数字和下划线");
}

// 验证邮箱
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    die("邮箱格式不正确");
}

// 限制内容长度
if (mb_strlen($content, 'UTF-8') > 1000) {
    die("留言内容不能超过1000个字符");
}

这些代码提供了一个完整的PHP留言板实现,包括数据库连接、表单提交、数据显示和基本安全措施。可以根据实际需求进一步扩展功能,如分页显示、管理员回复、留言审核等。

php实现留言板功能

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

相关文章

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vit…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一…

php分页功能的实现

php分页功能的实现

分页功能的基本原理 分页功能的核心是通过SQL的LIMIT子句实现数据分段查询。LIMIT接受两个参数:起始位置偏移量和每页记录数。例如查询第2页(每页10条)的SQL语句为: SELECT *…

vue 分页功能实现

vue 分页功能实现

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

vue实现表情功能

vue实现表情功能

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

vue实现筛选功能

vue实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及数据绑定、计算属性和方法的使用。通过监听用户输入或选择,动态过滤数据列表。 基础筛选实现 创建一个输入框绑定到Vue实例的data属性,使用计算…