使用变量将值传递给filter_input()

时间:2014-01-08 12:39:52

标签: php filter-input

任何人都可以解释一下,为什么我会收到非常奇怪的警告:

filter_input() expects parameter 1 to be long, string given

执行代码时,这是我班级的一部分,看起来非常好:

public static function Input($type, $data, $filter = 'FILTER_SANITIZE_SPECIAL_CHARS')
  {
    $type = 'INPUT_' . $type;
    return filter_input($type, $data, $filter);
  }

如果我将其更改为,例如:

return filter_input(INPUT_POST, $data, $filter);

然后警告转到:

filter_input() expects parameter 3 to be long

如果我使用的话,一切正常:

return filter_input(INPUT_POST, $data, FILTER_SANITIZE_SPECIAL_CHARS);


我在说明PHP: filter_input - Manual时已经意识到:

  

描述

mixed filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
  

参数

type
   One of INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV.


问题:

  1. 为什么在手册filter_input ( int $type ,中说 - 当 INPUT_GET INPUT_POST INTEGERS 时都没有。
  2. 有没有办法使用变量将值传递给filter_input

3 个答案:

答案 0 :(得分:7)

你应该使用constants。这些常量具有整数值。所以文档完全正确,INPUT_GET是一个整数。试试var_dump(INPUT_GET)

如果您需要从字符串中获取常量值,请使用constant()

echo constant('INPUT_' . $type);

答案 1 :(得分:1)

这里的问题。当你将'INPUT'连接到变量时,它变成了一个字符串,参见example:

echo $type = 'INPUT_' . 'POST'; // give you a string INPUT_POST

echo INPUT_POST; //give you 0

这就是原因:

filter_input() expects parameter 1 to be long, string given

答案 2 :(得分:0)

INPUT_POSTINPUT_GET的定义如下:

/**
 * POST variables.
 * @link http://www.php.net/manual/en/filter.constants.php
 */
define ('INPUT_POST', 0);

/**
 * GET variables.
 * @link http://www.php.net/manual/en/filter.constants.php
 */
define ('INPUT_GET', 1);