2013-02-23 49 views
0
$a = $_REQUEST['label']; 

現在,我怎麼能識別存儲在變量$a的值是從$_GET$_POST?我想重定向用戶,如果它是從$_GET收集的。有什麼方法可以檢查嗎? PHP很難。只要是這樣的:

$var = recognize($_REQUEST['label']); 
if($var == 'GET') { } else { } 
+1

使用'$ _GET'和'$ _POST'? – 2013-02-23 07:03:22

+1

什麼情況下是從*'$ _GET'或'$ _POST'任意發送的標籤? – 2013-02-23 07:06:46

+2

聽起來像你的代碼結構不好。 – Leri 2013-02-23 07:08:01

回答

2

一旦一個變量被分配,你將不能夠說出它從(通常)來了。

考慮做這樣的事情,因爲如果你使用$_REQUEST它甚至可能來自$_COOKIE

if (isset($_GET['label'])) { 
    // do redirect 
} elseif (isset($_POST['label'])) { 
    // do something else 
} 

或者,如果你傳遞變量在內心深處,你不能說出它最初來自:

class RequestParameter 
{ 
    private $name; 
    private $value; 
    private $source; 

    public function __construct($name) 
    { 
     $this->name = $name; 
     if (isset($_POST[$name])) { 
      $this->value = $_POST[$name]; 
      $this->source = INPUT_POST; 
     } elseif (isset($_GET[$name])) { 
      $this->value = $_GET[$name]; 
      $this->source = INPUT_GET; 
     } 
    } 

    public function isFromGet() 
    { 
     return $this->source === INPUT_GET; 
    } 

    public function getValue() 
    { 
     return $this->value; 
    } 
} 

$a = new RequestParameter('label'); 

if ($a->isFromGet()) { 
    // do redircet 
} 

但我建議構建你的代碼的方式,這是不必要。一種方法是檢查POST是否被做:

$_SERVER['REQUEST_METHOD'] === 'POST' 
-3

試試這個

if(isset($_REQUEST['label'])){ 
//redirect 
} 
1

檢查if($_GET['label']) { then redirect using header location; }

+1

OP想知道你是否可以單獨從'$ a'中知道。 – 2013-02-23 07:15:27

+0

@傑克如何來你的答案會告訴如果從'$ a' – 2013-02-23 07:22:31

+0

因爲我的回答包括一個奇特的方式做到這一點:) – 2013-02-23 07:24:35

0

更好地使用$ _ SERVER [ 'REQUEST_METHOD']:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // … 
} 

更多信息請參考文檔PHP

+1

這可能不工作預期;請求可以是'POST'請求,但仍然在querystring上有值,$ _ ['GET']'仍然可以訪問。 – 2013-02-23 10:10:49