You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP博客文章页异常:跳转后显示最新文章而非选中文章

问题分析

你的post.php完全没处理URL里传入的id参数!当前代码不管用户访问的是post?id=2还是post?id=5,都会执行获取最新文章列表的查询——这就是为什么点击任何文章链接,都只会显示最新文章的原因。

修复方案

修改post.php的PHP逻辑,让它根据传入的id参数精准查询对应文章,而不是拉取文章列表。以下是修复后的完整代码:

<?php 
require_once('inc/core.php');

// 获取并验证传入的文章ID
$post_id = isset($_GET['id']) ? intval($_GET['id']) : 0;

if ($post_id > 0) {
    // 根据ID查询单篇文章,intval已确保ID是整数,避免基础SQL注入
    $sql = "SELECT * FROM `blog` WHERE `id` = {$post_id} LIMIT 1";
    $otvet = mysql_query($sql);
    
    // 检查是否找到目标文章
    if (mysql_num_rows($otvet) === 0) {
        // 文章不存在时显示提示
        echo "<div class='container'><h2>文章不存在</h2><p>你访问的文章可能已被删除或链接无效。</p></div>";
        exit;
    }
} else {
    // 没有传入有效ID时,跳转到博客列表页
    header("Location: blog.php");
    exit;
}

// 获取单篇文章的数据
$row = mysql_fetch_assoc($otvet);
?> 

<div id="post-content" class="container-fluid">
    <div class="container">
        <div id="post-body" class="row">
            <div id="post-holder" class="col-md-9">
                <div id="post-<?php echo $row['id']; ?>" class="post">
                    <div class="post-thumbnail">
                        <img src="<?php echo $row['poster']; ?>" class="post-image" alt="<?php echo $row['title']; ?>">
                    </div>
                    <h4 class="post-title"><?php echo $row['title']; ?></h4>
                    <div class="meta">
                        <span class="view">10 Views</span>
                        <span class="like"><a href="#" class="like-btn">7 Like</a></span>
                    </div>
                    <div class="post-content">
                        <p><?php echo $row['content']; ?></p>
                    </div>
                </div>
                <div class="post-author">
                    <div class="row">
                        <div class="col-sm-2">
                            <img alt="Admin" src="images/team2.jpg">
                        </div>
                        <div class="col-sm-10">
                            <h3 class="name">Admin</h3>
                            <p class="desc">Nunc in ultricies odio. Vivamus ullamcorper convallis convallis. Mauris in urna sed metus iaculis pretium sed porttitor velit. Mauris id mauris ac leo eleifend volutpat. Aliquam porttitor orci et eleifend sagittis.</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
关键修复点
  • 新增了$post_id = isset($_GET['id']) ? intval($_GET['id']) : 0;来获取并验证文章ID,用intval强制转成整数,避免初级SQL注入风险
  • 替换了原来的文章列表查询语句,改为WHERE id = {$post_id}的单篇查询,确保只拉取用户指定的文章
  • 增加了文章不存在的判断逻辑,避免页面显示空内容或错误信息
  • 移除了多余的while循环——因为只需要显示一篇文章,不需要循环输出
额外优化建议
  1. 替换废弃的mysql扩展:你当前使用的mysql_*函数在PHP 5.5+已被废弃,PHP 7+完全移除,建议尽快迁移到mysqli_*或PDO,同时使用预编译语句进一步提升安全性
  2. 添加HTML转义:输出文章标题、内容等用户输入的内容时,建议用htmlspecialchars()转义,避免XSS攻击,例如:<?php echo htmlspecialchars($row['title']); ?>

内容的提问来源于stack exchange,提问作者Nikolai Buzovskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:21