当前位置:首页 > 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请求:

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表单和样式示例:

<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

php实现简单留言板

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

相关文章

留言板怎么实现vue

留言板怎么实现vue

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

vue实现简单登录注册

vue实现简单登录注册

Vue 实现登录注册功能 项目初始化 使用 Vue CLI 创建项目 vue create auth-demo cd auth-demo 安装必要依赖 npm install axios vue-…

vue怎么实现简单登录

vue怎么实现简单登录

Vue实现简单登录功能 使用Vue 2或Vue 3均可实现基础登录逻辑,以下是关键实现步骤: 创建登录表单组件 在Login.vue中设置用户名和密码输入框,绑定v-model数据: <te…

vue简单实现瀑布流

vue简单实现瀑布流

vue实现瀑布流的方法 使用Vue实现瀑布流布局可以通过CSS或JavaScript库完成。以下是几种常见方法: 使用CSS columns属性 CSS columns属性可以快速实现瀑布流效果,适…

react 简单table实现

react 简单table实现

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

react简单实现树形控件

react简单实现树形控件

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