2009-06-09 47 views
3

我知道您可以同时使用$_GET$_POST,但是这是必需的“功能”吗?我写了一个框架,在这里你可以访问输入:

$value = $this->input->get('name',''); 
$value = $this->input->post('name',''); 
$value = $this->input->cookies('name',''); 

我只是想在这里,有必要在同一时间有GET和POST?我不能这样做:

$value = $this->input('name','default value if not set'); 

要根据哪个HTTP请求获取GET/POST数据? Cookies将只能通过->cookies()访问,但是我应该使用->get()->post()而不是像->input()那样做吗?

感谢您的输入!

+0

让我重新解释这个问题。 我不问$ _REQUEST什么。我打算做一个方法 - > input(),它根据HTTP请求类型(POST或GET)返回相应的$ _GET或$ _POST值。那么,这是一个坏主意吗?如果用户提交POST和GET,我只使用POST。 – Tower 2009-06-09 15:38:02

回答

3

是的!
我想你必须允许同时访问$_GET$_POST。我不认为你可以将它们合并在一起。 (你可以有,像PHP和生病concieved $_REQUEST的选项。)你可以得到一个要求如:

POST /validator?type=strict HTTP/1.1 

type=html/text 
body=<h1>Hello World</h1> 

注意变量名type使用了两次,但在不同的范围! (一旦在URI定义应该处理的POST资源,然后在贴实体本身)在PHP中,这看起来像:

$_GET => ('type' => 'strict') 
$_POST => ('type' => 'html/text', 'body' => '<H1>Hellow World</h1>') 

PHP:S的只是解析URI,并把这些参数有办法到$_GET有点混淆。一个URI与大多数(所有?)的HTTP方法一起使用,比如POST,GET,PUT,DELETE等(不仅仅是GET,就像PHP一样,你会相信)。也许你可能是革命性的并且使用一些你自己的术语:

$a = $this->uri('name');//param passed in the URI (same as PHP:s $_GET) 
$b = $this->entity('body');//var passed in an entity (same as PHP:s $_POST) 
$c = $this->method(); //The HTTP method in question ('GET', 'POST' etc.) 

而且甚至一些实用功能:

if($this->isGET()){ 
    ... 
}elseif($this->isPOST()){ 
    ... 
) 

我知道,野生和疯狂的:)
祝你好运,玩得开心!
干杯!

0

一般认为使用$_GET$_POST而不是$_REQUEST更好,因为它没有花费太多成本,它关闭了网站的一些小操作。我会在您的框架中至少提供具体的源检索。

4

是的,但您可能希望确保在使用此代码时,如果要因请求而更改任何内容,请检查请求方法是否为POST,而不是将GET和POST视为同一事物。

这是因为一般GET请求不应该有任何副作用,他们应该做的就是'得到'东西。

编辑 这似乎不太相关的,因为你已经澄清你的问题,但我会离开这里反正

1

柜面用户从特定变种要输入你可以只使用输入法,但与标志:

$this->input('abc', ''); 
$this->input('abc', '', self::I_POST); 
$this->input('abc', '', self::I_GET); 
$this->input('abc', '', self::I_COOKIE); 
5

这是可以想象的是,在一个REST架构我想添加一个产品像这样:

POST /products?location=Ottawa HTTP/1.0 

name=Book 

产品将自动与查询参数中的位置关联。

简而言之:允许两者都有语义上有效的原因,但它们总是可以转换成一个或另一个。话虽如此,你是否想要强制用户使用这种用法?

0

我建议让他们分开,因为他们是用于不同的目的。 GET通常用于显示目的,而POST用于管理目的,添加/编辑项目,确认选项等。

可能还有一个轻微的安全问题:有人可能喜欢使用GET参数的页面并强制执行类似删除数据的事情 - 例如example.com/index.php?deleteid=123(实际上,这可以通过POST从外部HTML表单完成,但不太常见,任何人都可以在论坛,博客,任何地方张贴链接。)

0

我建议保留POST和GET变量,因为你无法预测他们将如何使用。

在填充对象之前,最重要的是确保在$ _ [POST | GET]中针对安全漏洞进行验证,如XSS,Sql注入。

0

我会说它高度取决于情况。如果你只是想接受一些会改变你如何显示一个HTML页面的参数(一个典型的GET变量),那么接受这两个参数可能是可以的。

如果您要使用表单,更改数据和限制访问;您应该查看CSRF的域以及此安全问题可能会如何影响您。

一般来说,如果您可以明确地了解这两者之一,那么这样做是明智的。