2012-09-27 77 views
0

基本上我从URL中获取一个变量,并且我需要根据用户填入的状态将用户发送到自定义页面。也就是说,如果它是被掩盖的状态之一,它们将被发送到自定义页面...但是如果它是任何其他状态,他们会被发送到标准页面。如果语句具有传递变量

我猜这只是一个简单的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

什么不行?尽管答案中提到了一些小问题,但您的代码应该可以工作。没有特殊字符的字符串的urlencode()应该是no-op。 – Barmar

回答

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"); 
?> 

此外,在URL检查 '状态'。你收到了你需要的正确字符串吗?尝试echo $ state,看看你得到了什么。

1

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

除此之外,代码看起来不错。只要删除它,你会很好。

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"); 
?> 
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); 
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");