【问题标题】:why does filter_input() return NULL when I manually assign value to $_POST array?当我手动为 $_POST 数组赋值时,为什么 filter_input() 返回 NULL?
【发布时间】:2012-04-29 09:25:22
【问题描述】:

我正在做一些关于数据验证的练习,并决定搞乱filter_input() 函数。当我尝试运行此代码时:

$_POST['var'] = 10;

$filtered = filter_input(INPUT_POST, 'var', FILTER_VALIDATE_FLOAT);

var_dump($filtered);

var_dump($filtered) 返回 NULL。我知道如果通过提交表单为$_POST['var'] 分配了一个值,则代码可以工作,但我只是想知道为什么手动为$_POST[] 数组分配一个值不会返回float(10)

【问题讨论】:

  • 7 年过去了,PHP 仍然没有用filter_input() 修复这个错误。因此,如果未设置,我最终会使用filter_var(@$_POST['var']) 来使Undefined index: var PHP 通知静音,filter_input() 会为您处理。令人失望。

标签: php filter validation


【解决方案1】:

filter_input() 不会从 _POST/_GET/_COOKIE/_SERVER/_ENV 超全局数组中读取。它分别从这些值的原始来源读取(也用于填充超全局变量)。

【讨论】:

  • 我可以直接访问原始资源吗?
  • @user 如果你想使用INPUT_POST,它会专门验证发布的数据。如果你想验证你设置的其他数据,不要使用INPUT_POST
  • @deceze 通过 POST 的 XMLHttpRequests 怎么样?这些数据也是“POSTed”(smh),但 filter_input 方法找不到数据。这是为什么呢?
  • @doABarrelRoll721 您是否偶然发布了 JSON?
  • @deceze $.ajax({ type: 'POST', ..... 但没关系。我想到了。我现在使用的是 filter_var。
【解决方案2】:

这是因为INPUT_POST 作用于原始 POST 值,在您的脚本中对其进行修改无效。 但是,如果您想过滤该 var,您可以使用:

filter_var($_POST['var'], FILTER_VALIDATE_FLOAT);

【讨论】:

    【解决方案3】:

    如果要设置默认输入值和过滤器,请使用filter_var。因为 filter_input 不过滤超全局变量的当前值。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2016-12-28
      • 2023-01-19
      相关资源
      最近更新 更多