2014-11-21 8 views
6

यदि पैरामीटर सेट (और संख्यात्मक) सेट किया गया है, और 0 (या 0) या एक चरम पर एक वैरिएबल सेट करने के लिए एक साफ, सुरुचिपूर्ण तरीका है, कुछ अन्य डिफ़ॉल्ट) अगर यह सेट नहीं है।php - filter_input - जीईटी कुंजी सेट नहीं होने पर डिफ़ॉल्ट मान पर सेट करें

अभी मेरे पास है:

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 को शून्य पर सेट करता है।

अन्य कथन को शामिल करने का कोई बड़ा सौदा नहीं, बस सोचा कि मैं filter_input की कुछ कार्यक्षमता पर अनुपलब्ध हो सकता हूं।

+0

मुझे कुछ अधिक स्पष्ट विवरण –

उत्तर

14

filter_input फ़ंक्शन options पैरामीटर स्वीकार करता है। प्रत्येक फ़िल्टर अलग-अलग विकल्पों को स्वीकार करता है। उदाहरण के लिए, FILTER_VALIDATE_INT फ़िल्टर default, min_range और max_range विकल्प 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

बिंगो। यही वह चीज है जिसे मैं याद कर रहा था। विकल्प सरणी में डिफ़ॉल्ट कुंजी। धन्यवाद! – tangopianist

3

आप इस लक्ष्य को हासिल करने के लिए, मान सेट नहीं है, तो डिफ़ॉल्ट विकल्प का उपयोग कर सकते हैं तो डिफ़ॉल्ट मान असाइन करते हैं, उदाहरण के लिए नीचे दिए गए

$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'); 
यहाँ

मूल्य या डिफ़ॉल्ट वापस आ जाएगी, यहाँ यह शून्य है - [नोट यह सिर्फ एक उदाहरण है]।

+2

दें क्यों बस '$ valid' अपने अगर-बयान में वापस नहीं, या वहाँ एक कारण मैं याद कर रहा हूँ है? (अपेक्षाकृत नया PHP) – Levon

+0

यदि आपको "सत्य" मान्य है तो आपको इसकी आवश्यकता नहीं है, तो आप '$ _GET [$ id] 'वापस लौटाते हैं जो' मान्य' के समान है क्योंकि filter_input मान वापस लौटाता है वैध। अन्य मामले में आप '$ मान्य 'वापस आते हैं। तो आप हमेशा '$ मान्य 'के समान वापस आते हैं। – PhoneixS

संबंधित मुद्दे