2012-09-27 75 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");