2010-12-10 59 views
0

我有一個長的URL與多個$ _GET價值,它看起來是這樣的: 的index.php類別=音樂&編號= 3211 &刪除= YES 和PHP文件,我有一個條件,如果是這樣的:

if(isseet($_GET['Category']) && isset($_GET['Id']) && !isset($_GET['Delete'])){ 
echo 'Valid page'; 
}elseif(if(isseet($_GET['Category']) && isset($_GET['Id']) && isset($_GET['Delete'])){ 
echo 'delete !'; 
} 

正如你所見,這是一個非常複雜的條件,當我有像這樣的20左右的類似條件。我想知道,如果我們有一些簡單的方法來做到這一點,例如開關 謝謝

+3

這取決於所有變量的含義以及您打算如何使用它們。對另一種情況來說,一個好的答案並不是一個好的答案。我建議詢問你的實際問題,而不是試圖製作它的通用版本。 – 2010-12-10 06:48:40

回答

1
// if switch is true, check if all are set; if it's 
// false check for none to be set. Defaults to true 
function array_all_set($keys, $vector, $switch=true) 
{ 
    foreach($keys as $key) 
     if($switch == !isset($vector[$key])) 
      return false; 
    return true; 
} 

現在這樣使用它:

if(array_all_set(array("Category", "Id"), $_GET) 
    && array_all_set(array("Delete"), $_GET, false)) {/* stuff */} 

我知道這不是太大的僅用3個值就可以改善,但對於像你所說的20個值,這完全是爲了向該數組添加值。

0

首先,使用這樣的代碼:

if(isseet($_GET['Category'])) 
//do something... 

這是不對的!你需要清理你的輸入。但是,我會假設你已經知道這一點。回到你的問題,你應該使用一個相當複雜的結構來處理你的請求變量,比如字典,然後用它來驗證你的請求。一個想法是這樣的:

class RequestDictionary 
{ 
    private $dictionary; 

    public function RequestDictionary() 
    { 
    foreach ($_GET as $key => $value) 
    { 
     $this->dictionary[$key] => clean_var($value); 
    } 
    } 

    public function hasKeys($keys = array()) 
    { 
    foreach ($keys as $key) 
     if (!isset($this->dictionary[$key])) 
     return false; 

    return true; 
    } 
} 

,然後在你的PHP頁面,你應該做的方法在你的頁面,以驗證所請求的URL,像這樣的:

function Validate() 
{ 
    $requestDict = new RequestDictionary(); 
    return $requestDict->hasKeys(array('category', 'id', 'whatever')); 
} 

你的代碼非常簡化。請記住,無論何時您將相同的代碼片段多次編碼,都不會被抽象化。對不起,超長的答案,但我不得不把大部分的課,所以你可能會看到它,

希望我可以幫助! David