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

PHP如何检测传入值是否在switch case分支中并跳转错误页

实现方案

核心改动分两部分,一是补全参数类型校验避免松散匹配误判,二是修改default分支指向自定义错误页。

  • 修复原有代码的参数校验漏洞:PHP的switch比较默认是松散比较,而URL通过GET传递的参数默认是字符串类型,如果不做类型转换,传入类似id=1xxx的非纯数字内容时,会被误判定为匹配case 1加载首页,无法走到错误分支。
  • 替换default分支逻辑:把原来default分支加载首页的代码,替换为加载你提前创建好的自定义错误页即可,建议额外返回404HTTP状态码,符合标准协议规范。

修改后的完整代码

把你原来的代码替换成如下内容即可,注意把default分支里的错误页文件名换成你自己实际的文件路径:

<?php 
    // 无id参数时默认加载首页
    $id = 1;

    if(isset($_GET['id'])){
        // 校验传入id是否为合法数字,过滤非数字的非法参数
        if(is_numeric($_GET['id'])){
            $id = intval($_GET['id']);
        }else{
            // 非数字参数直接标记为非法值
            $id = -1;
        }
    }
    
    switch ($id) {
        case 1: require_once 'home.php';
            break;
        case 2: require_once 'courseInfo.php';
            break;
        case 3: require_once 'aboutUs.html';
            break;
        case 4: require_once 'contacts.html';
            break;
        case 5: require_once 'accountDashboard.php';
            break;
        case 6: require_once 'accountCourses.php';
            break;
        case 7: require_once 'studentLogin.php';
            break;
        case 8: require_once 'applicationForm.php';
            break;
        case 9: require_once 'accountFiles.php';
            break;
        case 10: require_once 'accountCursoAulas.php';
            break;
        case 11: require_once 'event.php';
            break;
        case 12: require_once 'allEvents.php';
            break;
        default:
            // 返回标准404状态码
            http_response_code(404);
            // 替换为你自己的自定义错误页文件路径
            require_once 'customError.php';
            break;
    }
?>

如果你不需要返回404状态码,删掉http_response_code(404);这行就行,不影响错误页加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:45:48