2014-11-21 11 views
6

Ich möchte eine saubere, elegante Möglichkeit haben, eine Variable auf einen GET - Parameter zu setzen, wenn der Parameter gesetzt ist (und numerisch) und auf 0 (oder einige andere Standard), wenn es nicht festgelegt ist.php - filter_input - auf Standardwert gesetzt, wenn die GET - Taste nicht gesetzt ist

Im Moment habe ich:

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

Ich habe versucht, eine Callback-Funktion, die 0 zurück, wenn der Wert null oder nicht numerisch ist, aber wenn die GET-Parameter ‚id‘ nicht gesetzt ist, der Rückruf gewonnen werde nicht einmal aufgerufen - es setzt $get_id auf null.

Keine große Sache, die else-Anweisung aufzunehmen, dachte nur, dass ich einige Funktionalität von filter_input verpassen könnte.

+0

Gib mir etwas mehr klare Erklärung –

Antwort

14

Die Funktion filter_input akzeptiert einen options Parameter. Jeder Filter akzeptiert verschiedene Optionen. Zum Beispiel kann der FILTER_VALIDATE_INT Filter default, min_range und max_range Optionen as described here akzeptieren.

$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. Das habe ich vermisst. Standardschlüssel im Optionsfeld. Vielen Dank! – tangopianist

3

Sie Standardoption verwenden können, um dies zu erreichen, wenn Wert nicht, dann werden Standardwert erhalten zuweisen, Beispiel gegeben, wie unten

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

filter_input() liest nicht von der _POST/_GET/_COOKIE/_SERVER/_ENV

Sie können eine Klasse verwenden, um dies zu erreichen. [HINWEIS: - dies ist nur ein Beispiel]

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

hier wird Wert oder Standardeinstellung zurück, hier ist es Null.

+2

Warum nicht einfach zurückgeben '$ valid' in Ihrer if-Anweisung, da Sie bereits den gültigen Wert in diesem Fall extrahiert haben, oder gibt es einen Grund, warum ich bin fehle? (relativ neu zu PHP) – Levon

+0

Sie brauchen das wenn überhaupt nicht, wenn gültig ist "wahr", dann geben Sie '$ _GET [$ id]' zurück, was dasselbe ist wie '$ valid', weil filter_input den Wert zurückgibt, wenn es ist gültig. Im anderen Fall geben Sie '$ valid' zurück. Sie sind also immer dasselbe wie '$ valid'. – PhoneixS

Verwandte Themen