Admin后台通过GET参数传递产品ID编辑商品时链接跳转首页的问题排查
后台产品编辑跳转异常排查与修正
可直接定位的常见问题与解决方式
路由解析未剥离GET参数
当前使用的简易路由大多直接拆分完整请求URI来匹配控制器,如果没有单独剥离URL中?后面的查询参数,会把edit-product?id=xxx整个字符串当作控制器名,拼接出不存在的文件路径,触发系统默认的重定向到首页规则。
修正方案:在路由解析的最开头,拆分PATH路径和查询参数,仅用PATH部分做控制器匹配:// 路由解析环节增加参数剥离逻辑 $cleanRequestPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // 后续仅对$cleanRequestPath做分段拆分,定位对应的控制器文件校验逻辑未中断执行流程
目前编辑页的校验存在明显流程漏洞:判断获取不到id参数时,仅打印了提示文本,没有终止后续代码运行。当参数为空时,代码会继续执行空入参的数据库查询,触发SQL层面的错误,若全局错误捕获配置了异常即重定向规则,就会出现点击链接直接跳首页的现象。
修正后的校验代码:if(!isset($_GET['id']) || empty($_GET['id'])) { echo 'ürün bulunamadı.'; exit; // 必须中断后续执行,避免无效查询触发全局错误重定向 } $query = $db->prepare('SELECT * FROM product WHERE id = ?'); $query->execute([ $_GET['id'] ]); $product = $query->fetchAll(PDO::FETCH_ASSOC);链接生成有效性排查
打开浏览器开发者工具的网络面板,点击跳转链接检查实际发出的请求地址:- 确认生成的href是否存在路径异常,比如
URL常量末尾已自带斜杠时,admin_url函数拼接出的路径是否出现重复斜杠//,导致路由匹配失效 - 确认拼接后的GET参数是否完整,避免因
$products['id']取值为空,生成/admin/edit-product?id=这类残缺链接,触发后台参数校验的重定向规则
- 确认生成的href是否存在路径异常,比如
控制器文件匹配校验
admin_controller函数会将传入的控制器名转为小写后拼接文件路径,需要检查admin/controller目录下是否存在edit-product.php文件。若文件名大小写不一致、或对应文件缺失,也会触发系统默认的重定向逻辑。
内容的提问来源于stack exchange,提问作者Exciless_
相关产品推荐
相关产品推荐

