当前位置:首页 > 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
分享给朋友:

相关文章

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…