filter_input — установить значение по умолчанию, если ключ GET не установлен

Я хотел бы иметь чистый, элегантный способ установить переменную для параметра GET, если указанный параметр установлен (и числовой), и 0 (или какой-либо другой по умолчанию), если он не установлен.

Прямо сейчас у меня есть:

if (($get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
$opened_staff['id'] = $get_id;
// some database queries etc.
} else { $opened_staff['id'] = 0; }

Я попытался использовать функцию обратного вызова, которая возвращает 0, если значение равно нулю или не является числовым, но если параметр GET ‘id’ не установлен, обратный вызов даже не вызывается — он просто устанавливает $get_id к нулю.

Нет ничего страшного в том, чтобы включить оператор else, просто подумал, что я могу упустить некоторые функции filter_input,

7

Решение

filter_input функция принимает options параметр. Каждый фильтр принимает различные параметры. Например, FILTER_VALIDATE_INT фильтр может принять default, min_range а также max_range опции как описано здесь.

$get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array("options" => array(
"default" => 0,
"min_range" => 0
)));
var_dump($get_id);

// $get_id = 0 when id is not present in query string, not an integer or negative
// $get_id = <that integer> otherwise
15

Другие решения

Вы можете использовать опцию по умолчанию для достижения этой цели. Если значение не установлено, то значение по умолчанию будет присвоено, например, как показано ниже

$options = array( 'options' => array('default'=> 0) );
$valid = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options);

filter_input () не читает из _POST / _GET / _COOKIE / _SERVER / _ENV

$opened_staff['id'] = 0;
if($valid){
$opened_staff['id'] = $_GET['id'];
}

Вы можете использовать некоторый класс для достижения этого. [НОТА:- это всего лишь пример]

class RequestFilter{
public static function get_filter_int($id){

$options = array( 'options' => array('default'=> 0) );
$valid = filter_input(INPUT_GET, $id, FILTER_VALIDATE_INT, $options);

if($valid){
return $_GET[$id]; // Value will return
}

return $valid; // Default will return
}
}

$opened_staff['id'] = RequestFilter::get_filter_int('id');

здесь будет возвращено значение или значение по умолчанию, здесь оно равно нулю.

3

По вопросам рекламы [email protected]