![](/img/trans.png)
[英]PHP Game won't recognize input from form, doesn't run switch-case statement
[英]default case in a PHP switch-case statement doesn't really work as the default?
我在用户提交带有特定foo
输入名称的表单后到达的页面上使用以下PHP代码,该页面将由该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
条件失败, 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>
如果您在顶部设置默认网址会更好。 因此,即使没有一种情况都匹配。 默认值将始终存在。 如果大小写的值匹配,则将替换它。
$_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/";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.