当前位置:首页 > 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实现评论功能

<?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>';
}
?>

回复功能实现

扩展表单支持回复:

php实现评论功能

<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]);

嵌套评论展示

递归显示评论及回复:

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中实现收藏功能通常涉及前端交互与后端数据存储的结合。核心逻辑包括:用户点击收藏按钮时切换状态,并通过API将状态同步到后端数据库。 前端组件实现 创建收藏按钮组件,使…

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…