我知道您可以同时使用$_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()
之类的内容吗?
感谢您的投入!
答案 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的域以及此安全问题可能对您有何影响。
一般情况下,如果您可以明确表示,那么这样做是明智的。