2012-02-06 13 views
19
if(isset($_POST['submit'])) { 
    if(!isset($_POST['userName'])) { 
     $username = 'Anonymous'; 
    }  
    else $username = $_POST['userName']; 
} 

मुझे $username "बेनामी" नहीं मिल सकता है? यह या तो खाली है या $_POST['userName'] का मान है।

+1

इन्सेट वैल्यू चेक करता है यदि चर पहले ही सेट हो चुका है। हालांकि जब आप कोई फॉर्म सबमिट करते हैं तो एक चर स्ट्रिंग होगी। – miki725

उत्तर

35

isset() वैरिएबल शुरू होने पर सत्य वापस आ जाएगा। यदि आपके पास name मान userName पर सेट फ़ील्ड फ़ील्ड है, तो जब यह फॉर्म सबमिट किया जाता है तो मान हमेशा "सेट" होगा, हालांकि इसमें कोई डेटा नहीं हो सकता है।

इसके बजाय, trim() स्ट्रिंग और इसकी लंबाई

if("" == trim($_POST['userName'])){ 
    $username = 'Anonymous'; 
}  
+0

क्या ग्लोबल वैरिएबल का उपयोग सीधे स्वच्छता या उनसे बचने के लिए सुरक्षित है? उपर्युक्त उदाहरण में –

+3

@edwardtorvalds वेरिएबल का तुलना करने के अलावा किसी और का उपयोग नहीं किया जा रहा है। यदि यह संदर्भ बदल रहा था (यानी आउटपुट एचटीएमएल/जेएसओएन, डेटास्टोर क्वेरी आदि में उपयोग किया जाता है) तो इसे अविश्वसनीय माना जाना चाहिए और संदर्भ-उचित तरीके से निपटाया जाना चाहिए। – Andy

35

तो प्रपत्र सफलतापूर्वक सबमिट किया गया परीक्षण, $_POST['userName'] हमेशा की तरह, सेट किया जाना चाहिए, हालांकि यह एक खाली स्ट्रिंग, जिसमें से बिल्कुल भी सेट नहीं किया जा रहा अलग है हो सकती है । इसके बजाय जाँच अगर यह है या नहीं, कुंजी आप हैश (या साहचर्य सरणी) में जाँच कर रहे हैं "सेट" है empty()

if(isset($_POST['submit'])){ 

    if(empty($_POST['userName'])){ 
     $username = 'Anonymous'; 
    }  
    else $username = $_POST['userName']; 
} 
+3

+1 पूर्णता के लिए, http://php.net/empty देखें जिसे "खाली" माना जाता है। – deceze

0

isset परीक्षण कर रहा है है। इस संदर्भ में सेट का मतलब है कि अगर यह मान जानता है। कुछ भी मूल्य नहीं है। तो इसे एक खाली स्ट्रिंग के रूप में परिभाषित किया जाता है।

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

7

की जांच करने के लिए बराबर है मूल्य, उपयोग पर ध्यान दिए बिना:

if (array_key_exists('userName', $_POST)) {} 

संपत्ति अगर जाँच करने के लिए सेट किया गया है (संपत्ति मौजूद है और मूल्य null या false नहीं है), का उपयोग करें: यदि गुण सेट और नहीं है खाली

if (isset($_POST['userName'])) {} 

देखने (नहीं एक खाली स्ट्रिंग, 0 (पूर्णांक), 0.0 (नाव), 012,(स्ट्रिंग), null, false या [] (खाली सरणी)), उपयोग:

if (!empty($_POST['userName'])) {} 
1

बदलें इस:

if(!empty($_POST['userName'])){ 
    $username = $_POST['userName']; 
} 

if(empty($_POST['userName'])){ 
    $username = 'Anonymous'; 
} 
+0

आप इसे अपने लिए बाहर करना चाहते हैं – jprofitt

+0

हाँ अच्छी कॉल खाली होनी चाहिए()। –

3

प्रश्न:: चेक

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

1

मैं इन उपयोग के मामलों

$username = trim($_POST['userName'])?:'Anonymous'; 

यह उपयोग के मामले आप कुछ त्रुटि लॉगिंग रहे हैं के लिए है, इसलिए बंद है के लिए एक सरल एक पंक्ति comparisant का उपयोग करेंगे आपको चेतावनी नहीं मिलती है कि चर प्रारंभ नहीं किया गया है।

$username = trim(isset($_POST['userName'])?$_POST['userName']:'')?:'Anonymous'; 

यह एक चेक को लागू करता है, तो $_POST चर सेट है:

इस पागल संस्करण है। इसे एक्सेस करने से पहले।

+0

यदि मान "0" है, तो चर पूर्ण होगा। इसका प्रयोग न करें। – Erikas

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