2014-11-21 14 views
6

Chciałbym mieć czysty, elegancki sposób na ustawienie zmiennej na GET, jeśli parametr jest ustawiony (i numeryczny) oraz na 0 (lub inne domyślne), jeśli nie jest ustawione.php - filter_input - ustawiona na wartość domyślną, jeśli klawisz GET nie jest ustawiony

Teraz mam:

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; } 

Próbowałem przy użyciu funkcji zwrotnej, która zwraca 0, jeśli wartość jest null lub nie numerycznej, ale jeśli parametr GET „id” nie jest ustawiona, won zwrotna nawet nazywane - po prostu ustawia $get_id na wartość null.

To nie jest wielka sprawa, aby dołączyć oświadczenie else, tylko pomyślałem, że mogę przegapić jakąś funkcjonalność filter_input.

+0

Daj mi trochę więcej jasne wyjaśnienie –

Odpowiedz

14

Funkcja filter_input akceptuje parametr options. Każdy filtr akceptuje różne opcje. Na przykład filtr FILTER_VALIDATE_INT może akceptować default, min_range i max_range opcje as described here.

$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 
+1

bingo. Tego właśnie mi brakowało. klucz domyślny w tablicy opcji. Dzięki! – tangopianist

3

Można użyć domyślnej opcji, aby osiągnąć to, jeśli wartość nie jest ustawiona, a następnie wartość domyślna będzie wyznaczać przykład, jak podano poniżej

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

filter_input() nie czytać z _POST/_GET/_COOKIE/_SERVER/_ENV

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

Możesz użyć niektórych klas, aby to osiągnąć. [UWAGA: - to tylko przykład]

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'); 

tutaj powróci wartość lub domyślne, tu jest zero.

+2

Dlaczego nie po prostu wrócić '$ valid' w if-oświadczenie skoro już wydobyte poprawną wartość w tym przypadku, czy jest jakiś powód mi brakuje? (stosunkowo nowy w PHP) – Levon

+0

Nie potrzebujesz, jeśli w ogóle, jeśli poprawna jest "prawda", to zwracasz '$ _GET [$ id]', który jest taki sam jak '$ valid', ponieważ filter_input zwraca wartość, jeśli jest ważny. W innym przypadku zwracasz '$ valid'. Więc zwracasz zawsze to samo, co '$ valid'. – PhoneixS

Powiązane problemy