我在用户在提交带有某个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>
答案 0 :(得分:0)
1)我认为你正在弄乱$_POST
和$_GET
。 Get
参数在网址中可见,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/";
}
}