当前位置:首页 > PHP

php实现简单留言板

2026-01-29 06:24:37PHP

创建数据库表结构

使用MySQL创建一个名为messages的表,包含idnameemailcontentcreated_at字段:

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

建立数据库连接

创建config.php文件存放数据库连接信息:

<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}
?>

创建留言表单

构建HTML表单页面index.php

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

    <h2>留言列表</h2>
    <?php
    $stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
    while ($row = $stmt->fetch()) {
        echo "<div>";
        echo "<p><strong>{$row['name']}</strong> ({$row['email']})</p>";
        echo "<p>{$row['content']}</p>";
        echo "<small>" . date('Y-m-d H:i', strtotime($row['created_at'])) . "</small>";
        echo "</div><hr>";
    }
    ?>
</body>
</html>

处理表单提交

创建post_message.php处理留言提交:

<?php
require 'config.php';

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

    try {
        $stmt = $pdo->prepare("INSERT INTO messages (name, email, content) VALUES (?, ?, ?)");
        $stmt->execute([$name, $email, $content]);
        header("Location: index.php");
        exit();
    } catch(PDOException $e) {
        die("Error: " . $e->getMessage());
    }
}
?>

安全增强措施

添加CSRF防护和输入验证:

// 在config.php中添加
session_start();
if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}

// 在表单中添加隐藏字段
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">

// 在post_message.php中添加验证
if (!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
    die("Invalid CSRF token");
}

样式美化

添加基本CSS样式到<head>部分:

php实现简单留言板

<style>
    body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
    form { margin-bottom: 30px; }
    label { display: inline-block; width: 80px; }
    input, textarea { margin-bottom: 10px; width: 100%; }
    textarea { height: 100px; }
    button { padding: 8px 15px; background: #4CAF50; color: white; border: none; }
    div.message { margin-bottom: 15px; padding: 10px; background: #f5f5f5; }
    small { color: #666; }
</style>

这个实现包含了留言板的核心功能:数据库存储、表单提交、留言显示和基本安全措施。可以根据需要进一步扩展功能,如分页显示、管理员回复或留言审核等。

标签: 留言板简单
分享给朋友:

相关文章

vue 实现简单登录

vue 实现简单登录

实现 Vue 简单登录功能 创建登录组件 在 Vue 项目中创建一个登录组件 Login.vue,包含用户名和密码输入框以及登录按钮。 <template> <div clas…

vue实现简单图片切换

vue实现简单图片切换

以下是在Vue中实现简单图片切换的几种方法: 使用v-bind动态绑定图片路径 通过data属性存储图片数组和当前索引,利用v-bind动态切换src属性: data() { retu…

vue简单的列表实现

vue简单的列表实现

实现简单的 Vue 列表 在 Vue 中实现列表功能通常使用 v-for 指令。以下是一个基础的列表实现示例: <template> <div> <ul&g…

vue实现简单登录验证

vue实现简单登录验证

实现登录表单基础结构 使用Vue的模板语法构建登录表单,包含用户名和密码输入框及提交按钮。表单需绑定v-model实现双向数据绑定,并监听submit事件。 <template> &…

vue简单查询功能实现

vue简单查询功能实现

实现 Vue 简单查询功能 1. 创建 Vue 实例与数据绑定 在 Vue 实例的 data 中定义查询关键词 searchQuery 和数据列表 items。通过 v-model 实现输入框与数据…

react 简单table实现

react 简单table实现

基础表格实现 使用 React 实现简单表格可以通过原生 HTML 的 <table> 标签结合动态数据渲染完成。以下是一个基础示例,展示如何通过数组数据动态生成表格内容: impo…