PHP switch-case语句中的默认情况并不真正作为默认值?

时间:2014-09-23 10:49:57

标签: php switch-statement http-post

我在用户在提交带有某个foo输入名称的表单后访问的页面上使用以下PHP代码,此PHP代码处理该表单,并决定该用户的URL相应转发。

我刚刚注意到,如果用户没有输入带有foo输入名称的页面(例如,假设前一页上的表单有一个'vvv'作为输入名称,那么到期有些错误), 那么这个PHP代码不会将用户发送到默认URL。相反,它会在循环中每3秒刷新一次。

为什么呢?如果出现任何错误,包括上述情况,不应该获得默认值吗?

CODE:

<?php

if(isset($_POST['foo'])){

    switch ($_POST['foo']) {

    case "aaa":
        $url = "http://www.aaa.com/";
        break;

    default:
        $url = "http://www.bbb.com/";
    }
}

header( "refresh:3;url=$url" );


?>  
<!doctype html>
<html>
<head>
<style>
.test {display: block;}
</style>
</head>
<body>
test
</body>
</html>

4 个答案:

答案 0 :(得分:0)

1)我认为你正在弄乱$_POST$_GETGet参数在网址中可见,POST未显示在网址中。

2)如果没有$_POST['foo'],则会抛出错误,因为没有设置$url变量。更好地改变这段代码:

if(isset($_GET['foo'])){

    switch ($_GET['foo']) {
        case "aaa":
            $url = "http://www.aaa.com/?foo=bbb";
            header( "refresh:3;url={$url}" );
            break;
        default:
            $url = "http://www.bbb.com/?foo=aaa";
            header( "refresh:3;url={$url}" );
    }
    die(); // Optionally, if you wish not to continue any script
} else {
    /* Show default code */
}

答案 1 :(得分:0)

请在没有switch参数的情况下导航到此页面时验证是否已达到foo snipet。

在您的情况下,$url尚未启动(可能是if条件失败)。因此,header函数实际上会向浏览器发送此标头:refresh:3;url=url=之后的空字符串),这会导致浏览器每3次刷新当前网址秒。

答案 2 :(得分:0)

<?php
$url = "http://www.bbb.com/"; 
if(isset($_POST['foo'])){

    switch ($_POST['foo']) {

    case "aaa":
        $url = "http://www.aaa.com/";
        break;

    }
}

header( "refresh:3;url=$url" );


?>  
<!doctype html>
<html>
<head>
<style>
.test {display: block;}
</style>
</head>
<body>
test
</body>
</html>

如果您将默认网址设置在顶部会更好。所以即使没有一个案例得到匹配。默认值将始终存在。如果大小匹配的值,那么它将被替换。

答案 3 :(得分:0)

$_POST['foo']是否有任何价值? 尝试转储该值以检查其中是否有任何内容:

var_dump($_POST['foo'])

如果结果为null,则表单中存在错误。

这样的事情应该有效:

<form method='post' action = $this->url()>
  <div>
    <input type='text' name='foo' value='foo'>
  </div>
  <div>
    <input type='submit' value='submit' name='submit'>
  </div>
</form>

行动:

if(isset($_POST['foo']) && !empty($_POST['foo'])){

    switch ($_POST['foo']) {

    case "aaa":
        $url = "http://www.aaa.com/";
        break;

    default:
        $url = "http://www.bbb.com/";
    }
}