2012-06-12 17 views
10

तो, थोड़ी देर के लिए मैं यह जांचने के लिए निम्नलिखित का उपयोग कर रहा हूं कि मेरा पोस्ट डेटा सेट किया गया है या नहीं।

if(! empty($_POST)) { } 

लेकिन हाल ही में मैं कह रही है कि इसके बाद के संस्करण एक "हैक" है और नीचे सही "बेहतर" तरीका है पदों की एक बहुत कुछ देख रहे थे।

if($_SERVER[ 'REQUEST_METHOD' ] === 'POST') { } 

हाल ही में मेरा मतलब है कि मैंने हाल ही में इसे पाया है। इस बाद की विधि पर चर्चा कर रहे सभी पद 200 9 से हैं। कोडिंग मानकों से थोड़ा पुराना है इसलिए मुझे इस विषय पर एक नई राय प्राप्त करने के लिए ठीक लगता है।

मुझे समझ में आया है कि दो विधियां अलग हैं। पहले को "हैक" माना जाता है जो सिर्फ जांच करता है कि पोस्ट सरणी सेट की गई है, जो पोस्ट अनुरोध होने पर होगा। दूसरा वास्तव में सर्वर को जांचता है कि कोई पोस्ट अनुरोध किया गया है या नहीं। मुझे लगता है कि दूसरा थोड़ा और सुरक्षित हो सकता है, लेकिन यदि जानकारी किसी भी तरह से साफ हो जाती है तो मुझे नहीं लगता कि यह कितना अंतर बनाता है।

मैं भी पदों को देखा है कि बाद में केवल पीएचपी संस्करणों में इस्तेमाल किया गया था < = 4 क्योंकि पीएचपी अभी भी इस बिंदु पर $_REQUEST वैश्विक उपयोग कर रहा था और इस तरह से इस्तेमाल किया पीएचपी कोडर था कुछ अनुरोध पैरामीटर के स्रोत का निर्धारण करने के लिए। मुझे यकीन नहीं है कि आखिरी बयान कितना सटीक है, क्योंकि पुराने पदों में प्रश्न उठाए जा रहे हैं मेरे जैसा ही हैं। वे पोस्ट वैश्विक का उपयोग करते हैं और अनुरोध नहीं करते हैं। हालांकि, यह किसी अन्य (2011) की तुलना में एक और हालिया पोस्ट है, और एक स्रोत से मैं विश्वास करने आया हूं। तो मुझे यकीन नहीं है कि इसका क्या बनाना है।

और क्या जब मिल के लिए जाँच करना है? मैंने कुछ स्थानों को देखा है कि सर्वर अनुरोध विधि इस उदाहरण में काम नहीं कर रही है, और मैं केवल यह मान सकता हूं कि ऐसा इसलिए है क्योंकि पोस्ट सुपरसीड प्राप्त करते हैं और अनुरोध विधि केवल एक पैरामीटर रख सकती है। तो यदि आपके पास दोनों पोस्ट हैं और डेटा प्राप्त करते हैं तो आप क्या करते हैं? इन पदों में से एक पर एक टिप्पणी पोस्ट के बजाय वैश्विक अनुरोध का उपयोग करने का सुझाव देती है और प्राप्त करती है, लेकिन मैं इस धारणा के तहत रहा हूं कि यह एक बुरा विचार है।

  • Source
  • Source जवाब टिप्पणियां (nickf) में

This सबसे हाल ही में स्रोत मैं मिल सकता है, और मैं प्रस्तुत करने से पहले पक्ष पर इसी तरह के सवाल के माध्यम से देख कर ऐसा किया। यह विशेष रूप से सबमिट मूल्य का उपयोग करने के बारे में पूछ रहा है यह जांचने के लिए कि क्या फॉर्म पास किया गया था, लेकिन यह अनुरोध विधि का भी उल्लेख करता है। ऐसा लगता है कि बाद में इसका उपयोग अभी भी सामान्य रूप से किया जा रहा है। तो क्या यह सलाह अभी भी मान्य है? अनुरोध विधि अभी भी सबसे अच्छा विकल्प जांच रहा है?

+0

के संभावित डुप्लिकेट [isset ($ \ _ पोस्ट \ [ 'प्रस्तुत' \]) बनाम $ \ _ सर्वर \ [ 'अनुरोध \ _METHOD' \] == 'पोस्ट'] (http: // stackoverflow .com/प्रश्न/10943060/isset-postubmit-vs-serverrequest-method-post) –

उत्तर

10

हां, यह अभी भी वहां है, और यह अभी भी 100% विश्वसनीय है। उपयोगकर्ता के कनेक्शन द्वारा उपयोग की जाने वाली वास्तविक अनुरोध विधि के आधार पर $_SERVER["REQUEST_METHOD"] var PHP द्वारा स्वयं सेट किया गया है। कोई उपयोगकर्ता क्वेरी पैरामीटर में नहीं भेज सकता है या अन्यथा उस प्रकार के मूल्य को प्रभावित नहीं कर सकता है, अनुरोध के प्रकार को बदलकर।

आपका if(!$_POST) क्योंकि यह एक पोस्ट प्रदर्शन करने के लिए, लेकिन यह भर में किसी भी डेटा नहीं भेज, जैसे संभव है, विश्वसनीय नहीं है:

<form method="post"> 
<input type="submit" /> 
</form> 

सिर्फ इस तरह के एक खाली $ _POST सरणी का उत्पादन करेगा - कोई कर रहे हैं फॉर्म में फॉर्म तत्वों का नाम दिया गया है, इसलिए कोई डेटा नहीं भेजा जाएगा, फिर भी एक पोस्ट अभी भी किया जा सकता है।

मैं इस superglobal नहीं PHP4 के बारे में चिंता नहीं होगी। PHP 4 एक पत्थर युग संस्करण है, और कोड जो v4 का समर्थन करता है लेकिन v5 पर बनाया गया है, उस कोड पर काम करने वाले किसी भी व्यक्ति को दुःस्वप्न से पीड़ित होने वाली पिछली संगतता प्राप्त करने के लिए इतने सारे बदसूरत/घृणित हैक्स शामिल होंगे। PHP 4 को मृत माना जाना चाहिए और चला गया।

+0

तो फिर वे चर प्राप्त करने के लिए कैसे जांचेंगे? अनुरोध विधि पोस्ट होने के साथ आप प्राप्त करने के लिए इसे फिर से उपयोग नहीं कर सकते हैं। या यह सिर्फ इतना है कि पहले से अविश्वसनीय है इसलिए सबसे अच्छा किया जा सकता है यह सुनिश्चित करना है कि सरणी खाली नहीं है? बीटीडब्ल्यू: PHP4 पर वास्तव में चिंतित नहीं था, उस टिप्पणी का स्रोत समझा रहा था कि अनुरोध विधि के कारण के रूप में, जो स्पष्ट रूप से गलत है। – mseancole

+0

आपका क्या मतलब है, चर प्राप्त करने के लिए जांचें? यही कारण है कि पोस्ट के लिए '$ _GET' और' $ _POST' है ... –

+0

शायद एक चेकबॉक्स वाला एक फॉर्म एक और यथार्थवादी उदाहरण होगा जब आपको किसी पोस्ट का पता लगाने की आवश्यकता होती है, लेकिन * हो सकता है कि कोई मान न हो। – goat

5

मैं अनुरोध विधि की जांच के लिए हमेशा $_SERVER['REQUEST_METHOD']; चर का उपयोग करता हूं। यदि अनुरोध एक 'GET', 'HEAD', 'POST' या 'PUT के अनुरोध है

यह चर भी कहते हैं।

http://php.net/manual/en/reserved.variables.server.php

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