我的框架是否应允许同时访问$ _GET和$ _POST?

时间:2009-06-09 15:07:08

标签: php post input get

我知道您可以同时使用$_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数据? Cookie只能通过->cookies()访问,但是我应该使用->get()->post()而不是->input()之类的内容吗?

感谢您的投入!

8 个答案:

答案 0 :(得分:5)

可以想象,在REST架构中,我会添加如下产品:

POST /products?location=Ottawa HTTP/1.0

name=Book

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

简而言之:允许两者存在语义上有效的原因,但它们总是可以转换为其中一种。话虽如此,您是否希望对用户强制执行该用法?

答案 1 :(得分:4)

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

这是因为通常GET请求不应该有任何副作用,他们应该做的就是“获取”东西。

修改 由于你澄清了你的问题,这似乎不那么重要了,但无论如何我都会留在这里

答案 2 :(得分:3)

是的!
我认为您 必须 允许同时访问$_GET$_POST。我认为你也不能将它们合并在一起。 (您可以选择,例如PHP和不良的$_REQUEST。)您可以获得如下请求:

POST /validator?type=strict HTTP/1.1

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

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

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

PHP:只是解析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()){
     ...
)

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

答案 3 :(得分:1)

你可以只使用输入法,但是如果用户想要输入来自特定var:

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

答案 4 :(得分:0)

通常认为使用$_GET$_POST而不是$_REQUEST会更好,因为它不会花费你太多而且会关闭网站的一些小操作。我会在您的框架中至少提供特定的源检索。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

我会说这在很大程度上取决于具体情况。如果您只是想接受一些会改变您显示HTML页面的方式(一个典型的GET变量),那么可以接受这两个参数。

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

一般情况下,如果您可以明确表示,那么这样做是明智的。