如果语句带有传递的变量

时间:2012-09-27 23:50:44

标签: php

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

我猜这只是一个带有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");
?>

这是对的还是我应该做别的事?

5 个答案:

答案 0 :(得分:1)

不需要urlencode,甚至会引入错误(您永远不会匹配"new york"等字符串,因为urlencode会将$state转换为"new+york" )。

除此之外,代码看起来还不错。只需删除它就可以了。

答案 1 :(得分: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");
?>

答案 2 :(得分: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);

答案 3 :(得分:1)

你不需要urlencode函数来编码你“GET”的内容,除非你在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,看看你得到了什么。

答案 4 :(得分: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");