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

PHP中URL显示ID与名称后页面无数据的问题求助

解决方案

我来帮你搞定这个问题,你遇到的核心问题是重写规则没跟上URL格式的变化,再加上原来的PHP查询逻辑也有问题,导致页面拿不到数据。下面分步骤解决:

1. 更新.htaccess的重写规则

原来的规则只能匹配/1这种单ID格式,现在要适配/1/Health-and-Beauty的结构。修改后的规则会提取URL里的ID(数字部分),后面的名称只是SEO友好的slug,不影响业务逻辑:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 匹配 /数字/任意字符 的格式,把数字作为sub_id传递
RewriteRule ^(\d+)/.*$ category-classifieds.php?sub_id=$1 [L]
# 保留原单ID格式的兼容性(比如用户直接访问/1也能正常打开)
RewriteRule ^(\d+)$ category-classifieds.php?sub_id=$1 [L]

2. 修正PHP的查询与链接生成逻辑

原来的PHP代码有两个致命问题:一是用categories_name作为查询条件,但现在URL传递的是sub_id;二是直接拼接SQL存在注入风险。修改后的代码如下:

<?php
// 先验证sub_id是否合法(必须是数字)
if(isset($_GET['sub_id']) && is_numeric($_GET['sub_id'])){
    $sub_id = $_GET['sub_id'];
    // 用预处理语句防止SQL注入,同时用sub_id查询数据
    $stmt = $conn->prepare("SELECT * FROM sub_categories WHERE sub_id = ?");
    $stmt->bind_param("i", $sub_id);
    $stmt->execute();
    $data = $stmt->get_result();
    
    while ($row = $data->fetch_assoc()) {
        $sub_categories_name = $row['sub_categories_name'];
        $sub_id = $row['sub_id'];
        // 生成规范的友好URL,修复原来的语法错误(多了个多余的);)
        $friendly_url = $sub_id . '/' . str_replace(' ', '-', strtolower($sub_categories_name));
        ?>
        <a href="<?php echo $friendly_url; ?>">
            <div class="cat-box p-0 m-0 cat-url">
                <p class="subcat-url"><?php echo $sub_categories_name;?></p>
            </div>
        </a>
        <?php 
    }
    $stmt->close();
} else {
    // 处理无效ID的情况
    echo "Invalid category ID";
}
?>

为什么之前的修改会失效?

  • 旧的重写规则没法解析/1/Health-and-Beauty,导致category-classifieds.php根本没接收到sub_id参数,自然查不到数据
  • 原来的PHP代码用categories_name作为查询条件,但新URL并没有传递这个参数,查询条件不成立,返回空结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:48:14