PHP filter_var: как убедиться, что пользователь предоставляет правильные типы данных — только true или false

Я хочу сравнить два массива, один установлен по умолчанию, а другой вводится пользователем.

Когда я установил логическое значение только по умолчанию, я хочу убедиться, что пользователь не будет использовать строку или число. например, «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));

но этот код возвращает только «истина или ложь», даже если пользователь указывает правильный тип данных. Как я могу это исправить?


person laukok    schedule 17.09.2012    source источник


Ответы (1)


Хорошо, сначала вам нужно проверить, что $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));
person Rudu    schedule 17.09.2012
comment
Спасибо Руду за ответ! да это то что я хочу. Благодарю вас! :D - person laukok; 17.09.2012
comment
«если под пользователем вы не подразумеваете какого-то другого разработчика», да, я имел в виду других разработчиков. - person laukok; 17.09.2012