当前位置:首页 > PHP

php实现评论功能

2026-02-27 14:11:00PHP

数据库设计

创建评论表存储评论数据,基本字段包括评论ID、用户ID、内容、创建时间、关联文章ID等。示例SQL:

CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    content TEXT NOT NULL,
    article_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (article_id) REFERENCES articles(id)
);

表单处理

创建评论提交表单,通常包含内容输入框和隐藏的文章ID字段。HTML示例:

<form method="POST" action="add_comment.php">
    <textarea name="content" required></textarea>
    <input type="hidden" name="article_id" value="<?php echo $article_id; ?>">
    <button type="submit">提交评论</button>
</form>

后端处理

在add_comment.php中处理表单提交,验证数据并存入数据库:

<?php
session_start();
require 'db_connection.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $content = htmlspecialchars(trim($_POST['content']));
    $article_id = (int)$_POST['article_id'];
    $user_id = $_SESSION['user_id'];

    if (!empty($content)) {
        $stmt = $pdo->prepare("INSERT INTO comments (user_id, content, article_id) VALUES (?, ?, ?)");
        $stmt->execute([$user_id, $content, $article_id]);
        header("Location: article.php?id=$article_id");
        exit;
    }
}
?>

显示评论

在文章页面查询并显示相关评论:

<?php
$article_id = (int)$_GET['id'];
$stmt = $pdo->prepare("SELECT c.*, u.username FROM comments c 
                      JOIN users u ON c.user_id = u.id 
                      WHERE c.article_id = ? ORDER BY c.created_at DESC");
$stmt->execute([$article_id]);
$comments = $stmt->fetchAll();

foreach ($comments as $comment) {
    echo '<div class="comment">';
    echo '<h4>' . htmlspecialchars($comment['username']) . '</h4>';
    echo '<p>' . htmlspecialchars($comment['content']) . '</p>';
    echo '<small>' . $comment['created_at'] . '</small>';
    echo '</div>';
}
?>

安全措施

实施XSS防护和CSRF保护:

// 在所有输出上使用htmlspecialchars
// 添加CSRF令牌
$_SESSION['token'] = bin2hex(random_bytes(32));

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

// 验证时检查
if (!hash_equals($_SESSION['token'], $_POST['token'])) {
    die('CSRF验证失败');
}

分页功能

对大量评论实现分页:

php实现评论功能

$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;

$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS c.*, u.username 
                      FROM comments c JOIN users u ON c.user_id = u.id 
                      WHERE c.article_id = ? 
                      ORDER BY c.created_at DESC 
                      LIMIT ? OFFSET ?");
$stmt->execute([$article_id, $per_page, $offset]);
$comments = $stmt->fetchAll();

$total = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
$total_pages = ceil($total / $per_page);

标签: 功能php
分享给朋友:

相关文章

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php无法实现

php无法实现

PHP 是一种功能强大的服务器端脚本语言,能够实现多种功能,包括动态网页开发、数据库交互、文件操作等。如果遇到“无法实现”的问题,通常是由于以下原因之一: 环境配置问题 确保 PHP 环境正确安装和…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…