识别$ _REQUEST

时间:2013-02-23 07:02:47

标签: php

$a = $_REQUEST['label'];

现在我如何识别存储在变量$a中的值是来自$_GET还是来自$_POST?如果用户是从$_GET收集的,我想重定向用户。有没有办法检查? PHP有点难度。就像这样:

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

4 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

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

答案 2 :(得分:0)

最好使用$ _SERVER ['REQUEST_METHOD']:

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

更多详细信息,请参阅文档PHP

答案 3 :(得分:-3)

试试这个

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