当前位置:首页 > PHP

PHP实现新闻评论

2026-02-16 00:57:12PHP

数据库设计

创建新闻表和评论表,新闻表存储新闻信息,评论表存储评论内容并关联新闻ID。

CREATE TABLE news (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    news_id INT NOT NULL,
    user_name VARCHAR(100) NOT NULL,
    comment TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (news_id) REFERENCES news(id)
);

连接数据库

使用PDO连接MySQL数据库,确保安全性。

$host = 'localhost';
$dbname = 'news_site';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Database connection failed: " . $e->getMessage());
}

显示新闻及评论

查询特定新闻及其关联评论,按时间倒序排列。

$news_id = $_GET['id'] ?? 0;

$stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
$stmt->execute([$news_id]);
$news = $stmt->fetch(PDO::FETCH_ASSOC);

$stmt = $pdo->prepare("SELECT * FROM comments WHERE news_id = ? ORDER BY created_at DESC");
$stmt->execute([$news_id]);
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);

提交评论处理

验证用户输入并插入新评论到数据库。

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_comment'])) {
    $user_name = htmlspecialchars(trim($_POST['user_name']));
    $comment = htmlspecialchars(trim($_POST['comment']));

    if (!empty($user_name) && !empty($comment)) {
        $stmt = $pdo->prepare("INSERT INTO comments (news_id, user_name, comment) VALUES (?, ?, ?)");
        $stmt->execute([$news_id, $user_name, $comment]);
        header("Location: news.php?id=$news_id");
        exit();
    }
}

前端展示

创建简单的HTML表单和评论列表。

<h1><?= htmlspecialchars($news['title']) ?></h1>
<p><?= nl2br(htmlspecialchars($news['content'])) ?></p>

<h2>Comments</h2>
<form method="POST">
    <input type="text" name="user_name" placeholder="Your name" required>
    <textarea name="comment" placeholder="Your comment" required></textarea>
    <button type="submit" name="submit_comment">Submit</button>
</form>

<div class="comments">
    <?php foreach ($comments as $comment): ?>
    <div class="comment">
        <strong><?= htmlspecialchars($comment['user_name']) ?></strong>
        <small><?= $comment['created_at'] ?></small>
        <p><?= nl2br(htmlspecialchars($comment['comment'])) ?></p>
    </div>
    <?php endforeach; ?>
</div>

安全性增强

添加CSRF保护和输入验证。

session_start();

if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF token validation failed');
    }
}

在表单中添加CSRF令牌:

PHP实现新闻评论

<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">

标签: 新闻PHP
分享给朋友:

相关文章

vue实现新闻分页

vue实现新闻分页

Vue 实现新闻分页的方法 数据准备与分页逻辑 在 Vue 中实现新闻分页需要准备新闻数据列表和分页参数。通常使用 data 属性存储当前页码和每页显示的新闻数量。 data() { retur…

新闻列表制作css

新闻列表制作css

新闻列表的CSS样式设计 新闻列表通常需要清晰、易读的布局,同时兼顾美观和响应式设计。以下是一些常见的CSS样式方案: 基础样式 .news-list { list-style: no…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PENDI…

PHP接口防重推荐实现

PHP接口防重推荐实现

防重实现方法 使用唯一请求标识符(UUID或业务ID)作为防重依据,客户端每次请求生成唯一标识,服务端校验该标识是否已处理过。适合短时间内的重复请求拦截。 // 客户端生成唯一标识 $request…

PHP实现elm

PHP实现elm

PHP实现ELM(极限学习机) ELM(Extreme Learning Machine)是一种单隐层前馈神经网络算法,具有训练速度快、泛化性能好的特点。以下是PHP实现ELM的关键步骤和代码示例。…

mvc实现 PHP

mvc实现 PHP

MVC 模式概述 MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑分离为三个核心组件:模型(Model)处理数据,视图(View)负责展示,控制器(Contro…