2016-09-20 13 views
7

Różne filter flags mogą być używane z funkcją PHP filter_input().Czy można łączyć flagi filtru PHP filter_input() z AND/OR?

Na przykład, jeśli chcę odzyskać wartość skalarnego pola POST, mogę użyć wartości domyślnej bez określania filtru. Lub, jeśli ja mam do czynienia z polem POST tablicy, chciałbym użyć odpowiedniego filtra:

$scalar = filter_input(INPUT_POST, 'field'); 
$array = filter_input(INPUT_POST, 'field', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); 

to możliwe, aby połączyć flagi filtrów albo AND lub OR? Na przykład, przy OR:

$value = filter_input(INPUT_POST, 'field', FILTER_DEFAULT, FILTER_REQUIRE_SCALAR || FILTER_REQUIRE_ARRAY); 

Możliwe zastosowanie tego będzie zapętlenie nad polami Post, z których niektóre mogą być tablicami. np

foreach ($fieldSet as $field) 
{ 
    $value = filter_input(INPUT_POST, $field, FILTER_DEFAULT, FILTER_REQUIRE_SCALAR || FILTER_REQUIRE_ARRAY); 
    ... 
} 
+0

http://php.net/manual/en/function.filter-input.php: "opcje: asocjacyjna tablica opcji lub bitowe przekształcanie flag." – CBroe

+0

Używanie operatora bitowego w 'FILTER_REQUIRE_SCALAR | FILTER_REQUIRE_ARRAY' na tablicy POST zwraca false. – reformed

+0

Cóż, należy się tego spodziewać, ponieważ nic nie jest skalarem _i_ tablicą w tym samym czasie. To, że możesz łączyć filtry _all_ w ten sposób, nie musi oznaczać, że każda kombinacja ma sens. – CBroe

Odpowiedz

0

Jak o nieco innym podejściu:

$filtered = array(); 
//loop through all the posted values 
foreach($_POST as $key => $value) { 
    //apply a different filter for arrays and scalars 
    if(is_array($value)) { 
    $filtered[$key] = filter_input(INPUT_POST, $key, {filters for array}); 
    } 
    else { 
    $filtered[$key] = filter_input(INPUT_POST, $key, {filters for scalar}); 
    } 
} 

Można również łączyć z tym zestawem filtrów na pola, jeśli chcesz, aby wykluczyć niczego innego, który został wysłany:

//define the filters 
$filters = array(
    'field1' => FILTER_DEFAULT | FILTER_REQUIRE_SCALAR, 
    'field2' => FILTER_DEFAULT | FILTER_REQUIRE_ARRAY, 
    ...etc 
); 

$filtered = array(); 
foreach($_POST as $key => $value) { 
    //only include a value if a filter definition exists for the key 
    if(array_key_exists($key, $filters)) { 
    $filtered[$key] = filter_input(INPUT_POST, $key, $filters[$key]); 
    } 
} 
Powiązane problemy