当前位置:首页 > PHP

php评论功能怎么实现

2026-01-29 06:50:30PHP

数据库设计

创建评论表存储评论数据,表结构可包含以下字段:

  • id:自增主键
  • content:评论内容(TEXT类型)
  • user_id:用户ID(关联用户表)
  • article_id:文章ID(关联文章表)
  • created_at:评论时间(TIMESTAMP)

SQL示例:

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

表单提交处理

创建评论提交表单:

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

表单处理脚本(submit_comment.php):

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

  // 数据库插入
  $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
  $stmt = $pdo->prepare("INSERT INTO comments (content, user_id, article_id) VALUES (?, ?, ?)");
  $stmt->execute([$content, $user_id, $article_id]);

  header("Location: article.php?id=$article_id");
}
?>

评论显示

在文章页面显示评论:

<?php
$article_id = intval($_GET['id']);
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT c.*, u.username FROM comments c JOIN users u ON c.user_id = u.id WHERE article_id = ? ORDER BY created_at DESC");
$stmt->execute([$article_id]);
$comments = $stmt->fetchAll();

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

安全增强

防止XSS攻击: 对所有用户输入使用htmlspecialchars()函数处理

防止SQL注入: 使用PDO预处理语句

限制评论频率:

// 检查最后评论时间
$stmt = $pdo->prepare("SELECT created_at FROM comments WHERE user_id = ? ORDER BY created_at DESC LIMIT 1");
$stmt->execute([$_SESSION['user_id']]);
$last_comment = $stmt->fetch();

if ($last_comment && (time() - strtotime($last_comment['created_at'])) < 60) {
  die('评论过于频繁,请稍后再试');
}

分页功能

实现评论分页:

php评论功能怎么实现

$per_page = 10;
$page = isset($_GET['page']) ? intval($_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 article_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->bindValue(1, $article_id, PDO::PARAM_INT);
$stmt->bindValue(2, $per_page, PDO::PARAM_INT);
$stmt->bindValue(3, $offset, PDO::PARAM_INT);
$stmt->execute();

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

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

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

php如何实现直播

php如何实现直播

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

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

vue实现app功能

vue实现app功能

Vue 实现 App 功能的常见方法 使用 Capacitor 或 Cordova 进行混合开发 Vue 结合 Capacitor 或 Cordova 可以将 Web 应用打包成原生 App。Capa…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…