2016-07-14 77 views
4

验证用户输入时使用这两个函数之一有什么区别?严格地说,关于函数调用,不需要改变$ _POST数组。输入数据验证时filter_var和filter_input之间的区别

$ result = filter_var($ _ POST ['user_input'],FILTER_VALIDATE_INT);

VS

$结果= filter_input(INPUT_POST, 'USER_INPUT',FILTER_VALIDATE_INT);

或者上述两个调用没有区别,甚至不是表现明智,而只是一个偏好问题?

PS:我知道在SO - Differences between filter_var and filter_input上有类似的问题 - 但只是说明应如何调用2个方法,而不是实际的区别。

+0

我不认为有这样的区别,'filter_input'设计简单采取一个输入作为参数,'filter_var'将采取变量,因此它更通用的基准柱(我会去检查文档并作出回应) – RDardelet

回答

0

如果请求主体完全不包含参数user_input$_POST['user_input']将触发通知,filter_input(INPUT_POST, 'user_input', ..)不会。

+0

是的,所以'$ _POST'应该先检查isset()',如果缺少赋值给'$ result = null;'实例,而'filter_input'会在这种情况下直接返回'null'。 否则,如果参数设置,没有区别? –

+0

是的,如果参数存在,则没有区别。不同之处在于'filter_input'透明地处理了缺少输入的情况。 – deceze

3

从我读上php.net,

filter_var只会在你的代码中的任何变量的工作,当你使用它,它会在那一刻检查值。

filter_input值将检查原始值您输入的,这意味着如果你改变$_POST['something'],该filter_input(INPUT-POST, "something", FILTER)将执行你改变它收到了价值进行检查。 当未设置值时,它似乎也不会触发执行E_NOTICE

php.net

+0

而不是“filter_var(...)将执行检查之前,它已经有的值”,你的意思是'filter_input',不是?这就是为什么我提到'$ _POST'数组不需要改变,所以基本上这种差异仍然如前面提到的@deceze:通知被触发。 –

+0

对不起,我现在正在编辑:D 尽管如此,如果您的代码在可以改变$ _POST/GET ...变量的CMS或框架之后执行,访问原始输入仍然非常有用。 – RDardelet