繁体   English   中英

PHP switch-case语句中的默认大小写不能真正用作默认大小写吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM