Php 如何在使用过滤器输入时检查POST和GET数据?

Php 如何在使用过滤器输入时检查POST和GET数据?,php,post,optimization,get,filter-input,Php,Post,Optimization,Get,Filter Input,我想知道是否有可能获取一个变量,无论它是在POST还是get中,然后使用filter_input()对其进行清理 起初我认为,$var=filter\u input(input\u POST\u input\u GET,“var”,filter\u SANITIZE\u STRING)可能会起作用,但是它不会起作用,PHP手册规定只能传递一种类型的输入 我还尝试了INPUT\u REQUEST,但奇怪的是没有成功。函数会识别它(即,它不会抛出一个错误,说我在$input中输入了错误),但它不会得

我想知道是否有可能获取一个变量,无论它是在POST还是get中,然后使用filter_input()对其进行清理

起初我认为,
$var=filter\u input(input\u POST\u input\u GET,“var”,filter\u SANITIZE\u STRING)
可能会起作用,但是它不会起作用,PHP手册规定只能传递一种类型的输入

我还尝试了
INPUT\u REQUEST
,但奇怪的是没有成功。函数会识别它(即,它不会抛出一个错误,说我在$input中输入了错误),但它不会得到任何代码。是的,我知道不要在实时环境中使用
INPUT\u REQUEST
,我只是在测试它是否有效

目前我做了以下工作:

$var = filter_input(INPUT_POST, "var", FILTER_SANITIZE_STRING);
if(!$var) $var = filter_input(INPUT_GET, "var", FILTER_SANITIZE_STRING);

然而,对于PHP中的许多事情,通常有一种更简单的方法可以在一个命令中完成所有这些。我想知道这里是否是这样,我能把它们合并成一张支票吗?我在谷歌上进行了一次粗略的搜索,甚至找不到任何人之前尝试过的参考资料,更不用说解决方案了,所以现在我转向你们这些好人。

如果你们不知道自己的输入是在
GET
还是
POST
中,这被认为是不好的做法。你应该知道,而不是随便接受任何东西。

从我读到的内容来看,你可以将表单中的值
POST
更改为
GET
-这样你只需要接受
GET
-不确定我是否正确理解了它。

我认为没有比用代码创建自定义函数更好的方法了你已经提到:

function getPostOrGet($name) {

  $var = filter_input(INPUT_POST, $name, FILTER_SANITIZE_STRING);

  if(!$var) $var = filter_input(INPUT_GET, $name, FILTER_SANITIZE_STRING);

  return $var;

}
如果你认为这是正常的,你就不能使用
|
操作符,因为如果在这两个函数中都定义了,会发生什么呢


还要注意的是,由于这是一种不好的做法,它没有一种“简单”的方法。因此,如果您真的需要自定义函数,请使用它,如果可以,请仅使用正确的输入类型。

如果您正确地清理输入,我会亲自测试
过滤输入的结果,以
为null
,因为
如果(!$var)
条件可能由错误但存在的值触发,如
0

例如:

function getLatitude($name) {
  $var = filter_input(INPUT_POST, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
  if($var === null){
      $var = filter_input(INPUT_GET, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
  }
  return $var;
}

用通常的
$var
条件和
过滤器_清理_编号_浮动
,您将获得一个
null
值,而不是
0

到聚会时稍微晚了一点。我也有同样的问题。我对这种情况的解决方案如下:

$data = array_merge(filter_input_array(INPUT_POST), filter_input_array(INPUT_GET));
$var = $data["var"];
如果您需要在使用“过滤器\输入\阵列”中的选项之前进行清理:

例如:

$args = array(
    'var'   => FILTER_SANITIZE_STRING
);
并结合:

$data = array_merge(filter_input_array(INPUT_POST, $args), filter_input_array(INPUT_GET, $args));
$var = $data["var"];

这是一个老话题,但在某些情况下,它可能很方便

$var = filter_var($_REQUEST['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); 

您想“清理”字符串的目的是什么?确保GET变量中没有输入恶意代码,或者在POST中没有人篡改表单(很可能是隐藏变量)并在表单中放置恶意代码。-如前所述,第一个参数是常数之一,无数组,无| |子句。如果你想用一行代码,你必须创建一个用户函数来接受数组,foreach并将所有元素设置为第一个参数。然而,这似乎是一种不好的做法,因为您不知道自己的输入是什么。请定义“恶意代码”。你在说什么特定的代码?谷歌恶意PHP代码,你挑吧。大部分情况下,我同意这一点,我通常会坚持其中之一。我偶尔会遇到这样的情况,虽然我从表单向页面发布数据,但也希望用户能够使用可用的变量保存链接。使用post和GET类型更容易。所以你说“我知道我的用例不好,但我仍然希望它得到支持”。一点也不,我认为,在大多数情况下,这是一种不好的做法,不过,与大多数情况一样,这条规则也有例外。
$\u requeust
也包括cookie,因此有人可以使用任何输入设置名为
var
的cookie,并匹配它。此外,如果没有POST、GET或COOKIE匹配
var
@Styphon true,则会出错,但GET或POST也可以有任何类型的输入。如果您获得的帖子和cookie名称相同,则此解决方案不会在所有情况下都有效。但正如我所说,在某些情况下,这可能只是方便和容易的。