基本上我从网址抓取一个变量,我需要根据用户填写的状态将用户发送到自定义页面。即如果它是覆盖状态之一,它们将被发送到自定义页面。但如果是其他任何状态,他们会被送到标准状态。
我猜这只是一个带有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");
?>
这是对的还是我应该做别的事?
答案 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");