2014-11-21 31 views
6

Mi piacerebbe avere un modo pulito ed elegante per impostare una variabile su un parametro GET se tale parametro è impostato (e numerico), e su 0 (o qualche altra impostazione predefinita) se non è impostata.php - filter_input - impostato sul valore predefinito se il tasto GET non impostato

In questo momento ho:

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

Ho provato ad utilizzare una funzione di callback che restituisce 0 se il valore è nullo o non è numerico, ma se il parametro GET 'id' non è impostato, la richiamata won può anche essere chiamato - imposta semplicemente $get_id su null.

Non è un grosso problema includere la dichiarazione else, ho pensato che potrei perdere alcune funzionalità di filter_input.

+0

Dammi un po 'spiegazione più chiara –

risposta

14

La funzione filter_input accetta un parametro options. Ogni filtro accetta diverse opzioni. Ad esempio, il filtro FILTER_VALIDATE_INT può accettare default, min_range e max_range opzioni 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

tombola. Questa è la cosa che mi mancava. chiave predefinita nell'array delle opzioni. Grazie! – tangopianist

3

È possibile utilizzare l'opzione predefinita per raggiungere questo obiettivo, se il valore non è impostato allora il valore di default otterrà assegnare, ad esempio non legge dal _POST, come indicato di seguito

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

filter_input()/_GET/_COOKIE/_SERVER/_ENV

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

È possibile utilizzare alcune classi per ottenere questo. [NOTA: - questo è solo un esempio]

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

qui il valore di default o tornerà, qui è pari a zero.

+2

Perché non semplicemente restituire '$ valid' in se-economico in quanto è già stato estratto il valore valido in questo caso, o c'è una ragione che mi manca? (relativamente nuovo a PHP) – Levon

+0

Non hai bisogno del if, se è valido "true" restituisci "$ _GET [$ id]" che è lo stesso di "$ valido" perché filter_input restituisce il valore se è valido. Nel caso in cui si restituisce '$ valido'. Quindi si ritorna sempre uguale a '$ valido'. – PhoneixS

Problemi correlati