我在一个页面上使用以下PHP代码,用户在提交了一个包含特定foo
输入名称的表单后会访问该页面,该PHP代码会处理该表单,并相应地决定将用户转发到哪个URL。
我刚刚注意到,如果用户没有使用foo
输入名称输入该页面(例如,由于某些错误,假设上一页上的表单的输入名称为"vvv"),则此PHP代码不会将用户发送到默认URL。相反,它会在一个循环中每3秒刷新一次自己。
为什么?是否应该在出现任何错误的情况下获得默认值,包括上述情况?
代码:
<?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>
1)我认为您在扰乱$_POST
和$_GET
。Get
参数在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 */
}
请验证在没有foo
参数的情况下导航到此页面时是否已到达switch
狙击手。
在您的情况下,$url
尚未启动(可能是if
条件失败)。因此,header
函数将实际向浏览器发送此标头:refresh:3;url=
(url=
之后的空字符串),这将导致浏览器每3秒刷新一次当前url。
<?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>
如果你在顶部设置默认url会更好。因此,即使没有一个案例得到匹配。默认值将始终存在。如果case中的值匹配,则它将被替换。
$_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/";
}
}