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

Теперь, как я могу распознать, был ли значение, сохраненное в переменной $a из $_GET или $_POST? Я хотел перенаправить пользователя, если он был собран с $_GET. Есть ли способ проверить? PHP немного жестко. Просто что-то вроде этого:

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

Используйте '$ _GET' и' $ _POST'? –

+1

При каких обстоятельствах метка произвольно отправляется из * либо * '$ _GET', либо' $ _POST'? –

+2

Похоже, ваш код плохо структурирован. – Leri

ответ

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'. –

+0

@Jack, так как получится ваш ответ, если от «$ a» –

+0

Потому что мой ответ включает в себя причудливый способ сделать это :) –

0

Лучше использовать $ _SERVER [ 'REQUEST_METHOD']:

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

подробнее см документации PHP

+1

Это может не работать как ожидается; Запрос может быть запросом 'POST', но по-прежнему имеет значения в строке запроса, доступ к которой' $ _ ['GET'] 'еще доступен. –

Смежные вопросы