PHP filter_var:如何确保用户提供正确的数据类型 - 仅限true或false

时间:2012-09-17 14:13:01

标签: php boolean php-5.3 filter-var

我想比较两个数组,一个是默认设置,另一个是用户输入。

当我只在默认值中设置一个布尔值时,我想确保用户不会使用字符串或数字。例如,'truex'或'1'是不可接受的。

以下是我的代码示例

$default = array(
    "randomise"     =>  false,
    "id"            =>  null
);

$config = array(
    "randomise"     =>  truex
);

function process_array($default,$config)
{
    # Loop the array.
    foreach($default as $key => $value)
    {

        if ((filter_var($default[$key], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL) && (filter_var($config[$key], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL)) 
        {
            return 'true or false only';
        }


    }

    # Return the result.
    return $array;
}

print_r(process_array($default,$config));

但是此代码仅返回'true或false',即使用户提供了正确的数据类型。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,您需要检查$config是否包含$default中的密钥。 [助攻:如果$config是用户提供的......他们永远不会用户提供这样的对象,也许你的意思是$config=array("randomize"=>"truex"); ..除非用户提供你的意思是其他开发者作为用户(不是网络用户))。

所有$config['id']中的第二个将始终在测试时失败(因为它不是布尔值)。

所以,我想猜测你在这里做什么,但我认为这就是你想要的......

$default = array("randomise"=>false,"id"=>null);
//Example input
$config = array("randomise"=>"truex");

function process_array($default,$config) {
   foreach($default as $key => $value) {
      if (is_bool($default[$key])
          && isset($config[$key])) {
         //Update the array with the filtered value
         $config[$key]=filter_var($config[$key],FILTER_VALIDATE_BOOLEAN, 
                                  FILTER_NULL_ON_FAILURE);
         if ($config[$key]===null)
            return '$key can be true or false only';
         }
      }
   }
    return $array;
}
print_r(process_array($default,$config));