当前位置:首页 > PHP

php实现简单留言板

2026-02-28 03:36:19PHP

创建数据库表结构

留言板需要存储用户提交的信息,通常包含ID、用户名、留言内容、时间等字段。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数据库,确保安全性:

$dbHost = 'localhost';
$dbName = 'message_board';
$dbUser = 'root';
$dbPass = '';

try {
    $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Database connection failed: " . $e->getMessage());
}

处理表单提交

创建HTML表单并处理POST请求:

php实现简单留言板

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>{$message['username']}</h3>";
    echo "<p>{$message['content']}</p>";
    echo "<small>".date('Y-m-d H:i', strtotime($message['created_at']))."</small>";
    echo "</div>";
}

前端界面设计

基础HTML表单和样式示例:

php实现简单留言板

<form method="POST">
    <input type="text" name="username" placeholder="Your name" required>
    <textarea name="content" placeholder="Your message" required></textarea>
    <button type="submit">Submit</button>
</form>

<style>
    .message {
        border: 1px solid #ddd;
        padding: 15px;
        margin-bottom: 10px;
    }
    textarea {
        width: 100%;
        min-height: 100px;
    }
</style>

安全增强措施

添加基础防护:

// 防止XSS
function sanitize($data) {
    return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}

// 防止CSRF
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('Invalid CSRF token');
    }
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

分页功能实现

添加留言分页支持:

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

文件结构建议

推荐的项目结构:

/message-board
├── index.php        # 主界面
├── config.php       # 数据库配置
├── functions.php    # 公共函数
├── styles.css       # 样式表
└── /includes        # 包含文件
    ├── header.php
    └── footer.php

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

相关文章

vue实现简单树

vue实现简单树

使用 Vue 实现简单树形结构 递归组件实现 递归组件是 Vue 实现树形结构的常见方式。通过组件调用自身实现无限层级嵌套。 <template> <ul> &l…

vue实现简单图片切换

vue实现简单图片切换

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

vue实现简单登录验证

vue实现简单登录验证

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

简单vue状态管理实现

简单vue状态管理实现

Vue 状态管理实现方法 使用 Vue 的响应式系统 Vue 的响应式系统可以轻松实现简单的状态管理。通过创建一个响应式对象,可以在多个组件之间共享状态。 // store.js import {…

react简单实现树形控件

react简单实现树形控件

实现树形控件的基本思路 树形控件的核心是递归渲染节点,每个节点可以包含子节点。通过状态管理展开/折叠状态,动态渲染可见部分。 基础代码结构 创建一个可复用的树形组件,包含以下关键部分: impor…

制作简单css

制作简单css

基础CSS结构 CSS(层叠样式表)用于控制网页的样式和布局。一个简单的CSS文件通常包含选择器和声明块。选择器用于定位HTML元素,声明块包含属性和值,用于定义样式。 /* 选择器 */ body…