当前位置:首页 > 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验证失败');
}

分页功能

对大量评论实现分页:

$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
分享给朋友:

相关文章

vue实现倒计时功能

vue实现倒计时功能

vue实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInter…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE o…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现定时任务

php实现定时任务

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

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…