2010-04-19 16 views
7

सेट हो सकता है या नहीं भी हो सकता है यदि आप 'get' चर के मान को पढ़ने का प्रयास करते हैं, तो क्या होता है यदि URL में कहा गया चर सेट नहीं किया गया था। उदाहरण: आप पृष्ठ test.php का अनुरोध करते हैं, उस फ़ाइल में यह $_GET['message'] के मान को पढ़ने का प्रयास करता है। इस मामले में क्या होता है? खुराक मूल्य सिर्फ '' के रूप में वापस आ गया है?PHP पढ़ने 'प्राप्त' चर जो

इसका मतलब यह है कि अगर मैं हमेशा एक मूल्य की उम्मीद कर रहा हूँ दर्ज किए जाने की, और कहा कि मैं तो बस की तरह

$foo = $_GET['bar']; 
if($foo == ''){ 
    // Handle my 'error' 
} 
else 
{ 
    // $foo should now have a value that I can work with 
} 

कुछ कर सकते हैं '' के एक मूल्य स्वीकार करने के लिए कृपया ध्यान रखें मैं जानता हूँ कि तैयार नहीं हूँ कि मैं isset($_GET['bar']) का उपयोग कर सकता हूं लेकिन मैं सिर्फ यह नहीं जानना चाहता कि यह सेट है या नहीं, मुझे परवाह नहीं है कि यह है या नहीं, मुझे बस परवाह है कि उसके पास एक मूल्य है जो केवल एक खाली स्ट्रिंग से अधिक है।

+0

ओह से मिलेगा, मैं क्या मैं अपने टैग करने के लिए किया है: पीआई लिखने के लिए '$ _GET' – thecoshman

उत्तर

7

हैं ("त्रिगुट ऑपरेटर" के लिए नीचे स्क्रॉल) केवल उस डिफ़ॉल्ट मान की जगह चाहते हैं यदि आप वास्तव में मूल्य निर्धारित करते हैं तो आप परवाह नहीं करते हैं, आप इसका उपयोग कर सकते हैं:

if (empty($_GET['bar'])) 
    // value is null, false, 0, '0' or an empty string (including whitespace). 
+0

मेरा मानना ​​है कि यह मेरी आवश्यकताओं के लिए एकदम सही समाधान है। तो अगर यह '$ _GET [' bar '] 'पहले स्थान पर भी सेट नहीं किया गया था तो यह कोई त्रुटि उत्पन्न नहीं करेगा। – thecoshman

+0

मुझे लगता है कि यह इंगित करना महत्वपूर्ण है कि यह स्ट्रिंग '0'' खाली होने पर विचार करेगा। यदि आप इसे लोड करने के लिए पृष्ठों के लिए आईडी के रूप में उपयोग करते हैं तो इससे आपको समस्याएं हो सकती हैं। मुझे विश्वास है कि अधिकांश डेटाबेस 1 – thecoshman

+0

पर आईडी कॉलम के लिए ऑटो-नंबर शुरू करते हैं, फिर भी उत्तर में कहा गया। – elias

0

अगर मैं सही ढंग से समझ यह है:

$foo = $_GET['bar']; 
if ((!isset($foo)) || $foo == '') { 
//GET veriable not set, error 
} 
else { 
// GET veriable set, code here. 
} 
+0

की कोशिश की लेकिन इस कोड में , मुझे अभी भी जांचना होगा कि '$ foo == '' मैं कोशिश करना चाहता हूं और इसे एक ही बार में करना चाहता हूं। – thecoshman

6

आप कोशिश करते हैं और एक सरणी आइटम जो मौजूद नहीं है तक पहुंचते हैं तो परिणाम null हो जाएगा।

$foo = $_GET['bar']; //$foo is now null 

यह ध्यान देने योग्य है कि यदि आप सख्त comparsion === से कमजोर comparison operator== उपयोग कर रहे हैं बल्कि, तो '' अशक्त माना जाएगा लायक है।

उपर्युक्त कोड के साथ नकारात्मकता यह है कि जब आप उस इंडेक्स के साथ सरणी तक पहुंचते हैं तो यह एक नोटिस उत्पन्न करेगा जो मौजूद नहीं है जो थोड़ा गन्दा है।

इसलिए आपको यह जांचना चाहिए कि मान को एक चर में निहित मान निर्दिष्ट करने से पहले सेट किया गया है या नहीं।

if (!isset($_GET['bar'])){ 
    //handle error or assign default value to $foo 
}else{ 
    $foo = $_GET['bar']; 
} 

आप कोई डिफ़ॉल्ट मान के लिए, और $ _GET मूल्य मौजूद है यदि आप उपयोग कर सकते हैं conditional operator

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value'; 
1

यहां मैं यह कैसे करता हूं।

$foo = (isset($_GET['bar'])) ? $_GET['bar'] : false; 

if(false === $foo){ 
    die('no Foo for your Bar'); 
} 

एक पक्ष के रूप में, आप शायद कभी नहीं एक सच्चे बूलियन मान $ _GET

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