当前位置:首页 > PHP

php实现评论功能

2026-01-15 12:59:05PHP

数据库设计

创建评论表(示例结构):

CREATE TABLE `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `content` text NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `parent_id` int(11) DEFAULT NULL COMMENT '回复的评论ID',
  `post_id` int(11) NOT NULL COMMENT '关联的文章或内容ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

表单提交处理

创建评论提交表单(HTML部分):

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

PHP处理逻辑(submit_comment.php):

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $content = htmlspecialchars($_POST['content']);
  $post_id = intval($_POST['post_id']);
  $user_id = $_SESSION['user_id'] ?? 0; // 假设用户已登录

  $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
  $stmt = $pdo->prepare("INSERT INTO comments (user_id, content, post_id) VALUES (?, ?, ?)");
  $stmt->execute([$user_id, $content, $post_id]);

  header("Location: post.php?id=".$post_id); // 返回原页面
}
?>

评论列表展示

从数据库查询并显示评论:

<?php
$post_id = intval($_GET['id']);
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->prepare("SELECT * FROM comments WHERE post_id = ? ORDER BY created_at DESC");
$stmt->execute([$post_id]);
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($comments as $comment) {
  echo '<div class="comment">';
  echo '<p>'.htmlspecialchars($comment['content']).'</p>';
  echo '<small>用户ID: '.$comment['user_id'].' | 时间: '.$comment['created_at'].'</small>';
  echo '</div>';
}
?>

回复功能实现

扩展表单支持回复:

<form action="submit_comment.php" method="POST">
  <input type="hidden" name="post_id" value="<?php echo $post_id; ?>">
  <input type="hidden" name="parent_id" value="<?php echo $_GET['reply_to'] ?? 0; ?>">
  <textarea name="content" required></textarea>
  <button type="submit">提交</button>
</form>

更新数据库插入逻辑:

$parent_id = isset($_POST['parent_id']) ? intval($_POST['parent_id']) : null;
$stmt = $pdo->prepare("INSERT INTO comments (user_id, content, post_id, parent_id) VALUES (?, ?, ?, ?)");
$stmt->execute([$user_id, $content, $post_id, $parent_id]);

嵌套评论展示

递归显示评论及回复:

php实现评论功能

function displayComments($comments, $parent_id = null) {
  foreach ($comments as $comment) {
    if ($comment['parent_id'] == $parent_id) {
      echo '<div class="comment" style="margin-left: '.($parent_id ? '20px' : '0').'">';
      echo '<p>'.htmlspecialchars($comment['content']).'</p>';
      echo '<a href="?id='.$comment['post_id'].'&reply_to='.$comment['id'].'">回复</a>';
      displayComments($comments, $comment['id']); // 递归调用
      echo '</div>';
    }
  }
}
displayComments($comments);

安全注意事项

  1. 始终使用预处理语句防止SQL注入
  2. 输出内容时使用htmlspecialchars()过滤XSS攻击
  3. 验证用户权限,确保登录后才能评论
  4. 对高频提交实施限流措施

性能优化建议

  1. post_idparent_id字段添加索引
  2. 实现分页查询避免一次性加载大量评论
  3. 考虑使用缓存机制存储热门帖子的评论

完整实现需根据实际项目需求调整数据库结构和业务逻辑。

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

相关文章

vue实现轨道功能

vue实现轨道功能

实现轨道功能的基本思路 轨道功能通常指在界面中创建可滑动的轨道,用户可以通过拖动或点击轨道上的元素进行交互。Vue.js结合其响应式特性和组件化开发方式,可以高效实现这一功能。 核心实现步骤 创建轨…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

vue实现换页功能

vue实现换页功能

Vue 实现分页功能 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 在 main.js 中引入: import Vue fr…