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

无法实现PHP主/详情页功能,请求技术指导

解决PHP主/详情页(Master/Detail)开发问题

兄弟,我看了你这段主详情页的代码,发现几个关键问题导致功能跑不起来,咱们一个个来梳理修正:

1. 跳转链接的两个核心错误

你现在的链接代码是:

<a href="index.php?detail=<?php echo $row["id"]; ?>">

这里有两个明显的逻辑错误:

  • 跳转目标错了:应该跳转到detail.php而不是index.php,不然点击后还是停留在列表页,根本进不了详情页
  • 参数名不匹配:detail.php里是通过$_GET["id"]获取详情ID,但链接里传的参数名是detail,两者完全对不上

修正后的链接应该是:

<a href="detail.php?id=<?php echo $row["id"]; ?>">查看文章详情</a>

2. 文件引入顺序错误

detail.php里先引入了header.php再引入config.php,如果header.php里用到了数据库连接(比如导航栏要查询分类数据),就会直接报错——因为数据库连接对象$conn还没初始化。

正确的引入顺序必须先加载配置文件:

<?php
// 先加载数据库配置,确保连接先建立
require "includes/config.php";
// 再加载页面头部
require "includes/header.php";
?>

3. 严重的SQL注入风险

你直接把$_GET["id"]拼进SQL语句里,这是非常危险的操作,黑客可以通过构造恶意参数直接篡改你的数据库。必须用预处理语句来解决这个问题,同时还要先验证参数的合法性。

修正后的detail.php完整顶部代码:

<?php
require "includes/config.php";
require "includes/header.php";

// 先验证id参数是否存在且为有效数字
if (!isset($_GET["id"]) || !is_numeric($_GET["id"])) {
    // 参数无效,跳回列表页
    header("Location: index.php");
    exit;
}

$detail_id = $_GET["id"];
// 使用mysqli预处理语句防止SQL注入
$stmt = mysqli_prepare($conn, "SELECT * FROM post WHERE id = ?");
// 绑定参数:"i"表示整数类型,对应$detail_id
mysqli_stmt_bind_param($stmt, "i", $detail_id);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);
// 取出详情数据
$row_detail = mysqli_fetch_array($result);

// 如果没找到对应文章,友好提示
if (!$row_detail) {
    echo "<div style='padding: 20px;'>抱歉,找不到对应的文章!</div>";
    exit;
}
?>

4. 可选优化:列表页的查询(index.php)

虽然列表页的查询暂时没问题,但如果后续要加筛选条件,也建议用预处理语句,保持代码的安全性一致性。当前代码可以调整成更规范的写法:

<?php
require "includes/config.php";
require "includes/header.php";

// 查询所有文章,按id倒序排列
$query = mysqli_query($conn, "SELECT * FROM post ORDER BY id DESC");
// 可以加个判断,如果没有文章的话提示
if (mysqli_num_rows($query) === 0) {
    echo "<p>暂无文章</p>";
}
?>

按照上面的修改,你的主详情页就能正常工作了,而且安全性也有保障。

内容的提问来源于stack exchange,提问作者Aqwam Hizbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:29:37