即使有有效的CASE,PHP SWITCH也会输入DEFAULT?

时间:2011-11-02 13:23:58

标签: php default switch-statement

我有这个SWITCH块:

switch ($_GET['page']) {

    case "listaOferteTest":
        include("php_views/lista_oferte_test.php");
    break;

    case "categorieOferte":
        include("php_views/categorie_oferte.php");
    break;

    case "pagina":
        include("php_views/pagina.php");
    break;

    default:
        include("php_views/page_not_found_redirect.php");
    break;
}

和一些php链接[他们是dinamicaly生成,但我会粘贴html]:

<a href='/pagina/termeni-si-conditii/'>
Termeni si conditii
</a>
<a href='/pagina/informatii-utile/'>
Informatii utile
</a>
<a href='/pagina/contact/'>
Contact
</a>

我有一个.htaccess,我在这里处理这样的链接:

RewriteRule (.*)/(.*)/(.*)/ index.php?page=$1&subPage=$2&subSubPage=$3 [L]

问题:当我测试上面的链接时,我注意到一个奇怪的行为 - 从随机链接上的大约10次点击,也得到了默认值。这怎么可能?谢谢!

2 个答案:

答案 0 :(得分:0)

我的第一直觉是让调试器退出并逐步完成代码,这样你就可以清楚地看到发生了什么。如果您没有安装调试器(为什么不安装?它应该会改变您的生活!)或者如果您无法使用调试器重新创建问题,因为它看似随机性,那么接下来最好的事情就是添加一些记录到默认块,这样你就可以找出它到达那里的原因。我的猜测是$ glob ['page']与'pagina'完全不匹配;也许它有一个前导/尾随空格或斜杠,或者它可能是空的,因为这个值的提取方式存在错误。像Monolog这样的东西可以完成日志记录。

答案 1 :(得分:-2)

然后你可以使用if代替switch

对于前。

if (isset($_GET['page'])) {
   if($_GET['page']=='something') {...}
   if($_GET['page']=='something2') {...}
   ...
}