2013-07-12 65 views
0

我有一个功能文件,其中我处理POST和GET让用户进行POST或一个GET。这更像是一个API调用。

我应该做这样或会使用$ _REQUEST同时处理一个POST和GET一个?

if ($_SERVER['REQUEST_METHOD'] === "GET") { 

    $function = $_GET['f']; 
    $user_id = $_GET['user_id']; 
} 
elseif ($_SERVER['REQUEST_METHOD'] === "POST") { 

    $function = $_POST['f']; 
    $user_id = $_POST['user_id']; 
} 

$res = new stdClass(); 

if (isset($function)) { 

    switch ($function) {  
     .... 
    } 
} 
+0

是,'$ _REQUEST'同时处理'$ _GET'和'$ _POST' – rorypicko

+1

我喜欢你现在做的方式。 '$ _REQUEST'也可能具有'$ _COOKIE'值,这取决于ini变量[variables_order](http://www.php.net/manual/en/ini.core.php#ini.variables-order),它可能因系统而异。显式比模糊更好。 –

+0

这几乎是$ _REQUEST的要点。 – j08691

回答

4

您目前的方法提供的好处是您可以为每个实例使用最佳方法。有些时候你不想获得GET信息,因为它只是将数据附加到URL上,并将它暴露给任何看起来以及向那些知道如何使用URL来“坏事”的人“暴露”的人。

如果您担心发现无法控制请求方法的调用,则可以添加$ _REQUEST作为最后的手段,但我会建议限制您使用的方法 - 例如:仅将数据从数据库并没有任何修改它。

+0

缺点是他不能混用$ _REQUEST类型(当然在if语句中) – rorypicko

+0

知道的人也知道如何发布内容。这也不是那么难。如果你自己的页面会传递URL中的敏感信息会很糟糕,但是在接收端它不会伤害它。调试很容易。 – GolezTrol

+2

另一个缺点是重复代码!这个怎么样 '$ vars = $ _SERVER ['REQUEST_METHOD'] ===“GET”? $ _GET:$ _POST;' '$ vars ['user_id']' – rorypicko

3

如果您想允许这两个,您可以使用$_REQUEST。如果您不关心该值是POST还是-ARGET,则更容易。但请注意,根据settings in PHP.ini$_REQUEST也可能包含Cookie。

+1

“request_order:请注意,由于安全考虑,默认分发php.ini文件不包含cookie的'C'”,这意味着$ _REQUEST可以包含3个中的任何一个,具体取决于服务器配置。 – Luke

+0

@Luke感谢您的补充! – GolezTrol

0

是的,你可以,$_REQUEST同时处理$_POST$_GET

+1

@GeorgeCummins'或将使用$ _REQUEST处理POST和GET?' – rorypicko

0

$_REQUEST是处理两个类型的请求($_GET & $_POST)最方便的方法。因此,使用$ _REQUEST:

REQUEST METHOD IN PHP

1

$_REQUEST可以$_POST$_GET,但它可以$_COOKIE为好,这取决于request_ordervariables_order设置。因为根据ini设置它也可能不是这些,所以我根本不会使用它。

我的建议是使用$_GET$_POST分开。他们的意思完全不同。您希望使用$_POST作为动作,使用$_GET作为获取动作。如果您想根据$_GET填写表单,则可以使用$_SERVER['REQUEST_METHOD'] == 'POST'来确定实际发生的情况并在两者之间切换。