2014-09-23 26 views
1

我正在使用以下PHP代码,在用户通过输入名称提交表单后,该代码将处理该代码,然后决定向用户转发哪个URL。在PHP开关大小写声明中的默认情况下并不真正起到默认作用?

我刚刚注意到,如果用户没有输入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> 
+0

尝试增加休息;到默认情况 – Matheno 2014-09-23 10:52:13

+0

@DamienPirsy @ User8889'break'会跳过'switch'并且无论如何会继续到'header'部分 – Justinas 2014-09-23 10:53:16

+0

@ User8889不会帮助.. – Bucky 2014-09-23 10:57:39

回答

0

1)我觉得你与$_POST$_GET搞乱。 Get params在URL中可见,POST不在url中显示。

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 */ 
} 
+0

这不是一个选项,因为页面必须处理使用POST方法提交的表单。 – Bucky 2014-09-23 11:00:57

+0

@Bucky不仅仅是把'$ _GET'改成'$ _POST',但是你不能用'header'发送参数,你必须使用'cUrl' – Justinas 2014-09-23 11:08:12

0

请核实时,该页面导航到不foo参数达到switch snipet。

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

+0

你是什么意思来验证它?你所说的基本上是问题的原因(因为如果在表单中提交'foo'参数,它会工作正常),但是我希望'default'在任何情况下都可以工作,是不是默认的目的是为了处理这种情况,以便不会出现空字符串? – Bucky 2014-09-23 11:04:52

+0

如果您从来没有首先进入'switch'语句,那么缺省值不起作用。当'isset($ _ POST ['foo'])'为false时,您可以跳过整个块。 – Barmar 2014-09-23 11:05:51

+0

你可以在'switch'函数后面或'header'函数之前'死掉','var_dump'是'$ url'的值。 – 2014-09-23 11:06:41

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> 

如果您在上方设置默认网址,会更好。所以,即使没有任何案件得到匹配。默认值将始终存在。如果情况下的值得到匹配,那么它将被替换。

0

$_POST['foo']有什么价值吗? 尝试转储值,以检查是否有什么在里面:

var_dump($_POST['foo']) 

如果这样做的结果是空再有就是你的形式出现错误。

像这样的东西应该工作:

<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/"; 
    } 
}