प्रश्न:: चेक
if(isset($_POST['submit'])){
if(!(isset($_POST['userName']))){
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
इस के लिए
चाहे $ _POST मान खाली है।
अनुवाद: यह देखने के लिए जांचें कि कोई सरणी कुंजी/अनुक्रमणिका उसके साथ एक मूल्य है या नहीं।
उत्तर: सुरक्षा पर आपके जोर पर निर्भर करता है। मान्य इनपुट के रूप में क्या अनुमति है इस पर निर्भर करता है।
1. Some people say use empty().
पीएचपी मैनुअल से: "[खाली] कि क्या एक चर खाली माना जाता है एक चर खाली माना जाता है अगर यह मौजूद नहीं है या इसके मान FALSE के बराबर होती है, तो निर्धारित करता है।।" इस प्रकार निम्नलिखित खाली माना जाता है।
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
इन मूल्यों में से कोई भी अपने इनपुट नियंत्रण के लिए मान्य हैं, तो empty()
काम करेगा। यहां समस्या यह है कि empty()
बहुत व्यापक हो सकता है जो लगातार उपयोग किया जा सके (उसी तरह, उसी कारण से, $_POST
या $_GET
पर विभिन्न इनपुट नियंत्रण सबमिशन पर)। empty()
का एक अच्छा उपयोग यह जांचना है कि संपूर्ण सरणी खाली है (कोई तत्व नहीं है)।
2. Some people say use isset().
isset()
(एक भाषा निर्माण) isset($myArray)
में के रूप में पूरे सरणियों पर काम नहीं कर सकते। यह केवल चर और सरणी तत्व (अनुक्रमणिका/कुंजी के माध्यम से) पर संचालित हो सकता है: isset($var)
और isset($_POST['username'])
। isset()
भाषा निर्माण दो चीजें करता है। सबसे पहले यह देखने के लिए जांच करता है कि एक चर या सरणी अनुक्रमणिका/कुंजी के साथ एक मूल्य है या नहीं। दूसरा, यह सुनिश्चित करने के लिए जांच करता है कि मान PHP NULL मान के बराबर नहीं है।
संक्षेप में, सबसे सटीक चेक isset()
के साथ सबसे अच्छा किया जा सकता है, क्योंकि कुछ इनपुट नियंत्रण $ _POST के साथ भी पंजीकृत नहीं होते हैं जब उन्हें चयनित या चेक नहीं किया जाता है। मैंने कभी ऐसा फॉर्म ज्ञात नहीं किया है जो PHP NULL मान सबमिट करता है। मेरा कोई भी नहीं करता है, इसलिए मैं isset()
का उपयोग यह जांचने के लिए करता हूं कि $_POST
कुंजी के साथ कोई मूल्य नहीं है (और यह पूर्ण नहीं है)। isset()
की तुलना में बहुत कठोर परीक्षण खालीपन (आपके प्रश्न के अर्थ में) है।
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
आप एक अगर बयान में सच या झूठी के लिए कुछ भी है कि मूल्यांकन करता है परीक्षण कर सकते हैं। रिक्त सरणी झूठे का मूल्यांकन करती हैं और ऐसे चर को भी सेट करते हैं जो सेट नहीं हैं। वेरिएबल्स जिनमें PHP NULL मान शामिल है, भी गलत का मूल्यांकन करते हैं। दुर्भाग्य से इस मामले में, empty()
के साथ, कई और चीजें भी झूठी मूल्यांकन करती हैं: 1. खाली स्ट्रिंग '', शून्य (0), शून्य.जेरो (0.0), स्ट्रिंग शून्य '0', बूलियन झूठी, और कुछ खाली एक्सएमएल ऑब्जेक्ट्स
--Doyle, पीएचपी 5.3
शुरुआत अंत में, isset()
का उपयोग करें और अन्य परीक्षणों के साथ यह संयोजन पर विचार करें। उदाहरण:
सुपरग्लोबल स्क्रूनेस के कारण काम नहीं कर सकता है, लेकिन बिना किसी प्रश्न के अन्य सरणी के लिए काम करेगा।
if(is_array($_POST) && !empty($_POST))
{
//Now test for your successful controls in $_POST with isset()
}
यह भी काम करना चाहिए।
if(is_array($_POST) && $_POST)
{
//Now test for your successful controls in $_POST with isset()
//Always validate your input.
}
इसलिए, क्यों एक प्रमुख के साथ जुड़े एक मूल्य के लिए देखो इससे पहले कि आप भी लगता है कि $_POST
एक सरणी का प्रतिनिधित्व करता है और किसी भी मूल्यों में सभी (कुछ बहुत से लोगों को विचार करने के लिए असफल) में संग्रहीत किया गया है के लिए पता है? याद रखें, लोग वेब ब्राउज़र का उपयोग किये बिना आपके फॉर्म में डेटा भेज सकते हैं। आप एक दिन परीक्षण के बिंदु पर पहुंच सकते हैं कि $_POST
में केवल अनुमति कुंजी है, लेकिन यह बातचीत किसी अन्य दिन के लिए है।
उपयोगी संदर्भ:
PHP Manual: Type Testing Comparison Tables
इन्सेट वैल्यू चेक करता है यदि चर पहले ही सेट हो चुका है। हालांकि जब आप कोई फॉर्म सबमिट करते हैं तो एक चर स्ट्रिंग होगी। – miki725