0

基本上我从 url 中获取一个变量,我需要根据他们填写的状态将用户发送到自定义页面。即,如果它是覆盖状态之一,他们将被发送到自定义页面......但是如果这是他们被发送到标准状态的任何其他状态。

我猜这只是一个带有 else 的简单 if 语句......但由于某种原因,我无法让它正常工作。

<?php
$state = urlencode($_GET['state']);
if ($state=="california"){$link = "http://website.com/page1";}
else if ($state=="new york"){$link = "http://website.com/page2";}
else if ($state=="ohio"){$link = "http://website.com/page3";}
else  {$link = "http://website.com/default";}
header("Location: $link");
?>

这是正确的还是我应该做其他事情?

4

5 回答 5

1

urlencode不需要,甚至引入了一个错误(你永远不会匹配字符串,例如,"new york"因为urlencode$state变成"new+york")。

除此之外,代码看起来还可以。只需删除它,你就会好起来的。

于 2012-09-27T23:52:50.760 回答
1

无需使用urlencode

<?php
    $state = $_GET['state'];
        if ($state=="california"){
              $link = "http://website.com/page1";
         } else if ($state=="new york") {
              $link = "http://website.com/page2";
         } else if ($state=="ohio"){
             $link = "http://website.com/page3";
         } else {
             $link = "http://website.com/default";}
                  header("Location: $link");
?>
于 2012-09-27T23:57:03.350 回答
1

这样做更整洁switch,并结合重复的东西:

switch($_GET['state']) {
    case "california": $page = "page1"; break;
    case "new york": $page = "page2"; break;
    case "ohio": $page = "page3"; break;
    default: $page = "default"; break;
}
header("Location: http://website.com/".$page);
于 2012-09-27T23:57:58.353 回答
1

您不需要 urlencode 函数来对您“获取”的内容进行编码,除非您发送的 url 中的字符串已被编码。但是,在这种情况下,您将需要 urldecode 函数,而不是 urlencode。

所以你的代码应该是这样的:

<?php
$state = $_GET['state'];
//or $state = urldecode($_GET['state']); 
//if you are receving an encoded url.
if ($state=="california"){$link = "http://website.com/page1";}
else if ($state=="new york"){$link = "http://website.com/page2";}
else if ($state=="ohio"){$link = "http://website.com/page3";}
else  {$link = "http://website.com/default";}
header("Location: $link");
?>

另外,检查网址中的“状态”。您收到所需的正确字符串了吗?尝试回显 $state,看看你得到了什么。

于 2012-09-28T00:10:59.260 回答
1

另一种选择是使用关联数组;如果有很多选择,这很有吸引力。

$statemap = array('california' => 'page1',
                  'new york' => 'page2',
                  'ohio' => 'page3');

$state = $_GET['state'];
$link = 'http://website.com/' . array_key_exists($state, $statemap) ? $statemap[$state] : 'default'
header("Location: $link");
于 2012-09-28T00:59:20.377 回答