2011-09-15 15 views
13

उदाहरण के लिए, मैं एक डीबी में डेटा डालने के लिए $ _POST चर का उपयोग कर रहा हूं। इस क्वेरी से ठीक पहले मेरे पास कुछ परीक्षण हैं और यदि वे सच हैं तो मैं उस (छुपा) $ _POST मान को समायोजित करना चाहता हूं।

पूर्व।

if($baby_dragon_eats_children){ 
    $_POST['hidden_value'] = "grapes"; 
} 

_POST $ कर सकते हैं [ 'hidden_value'] एक नया मान सौंपा जा और फिर $ _POST के रूप में एक और कार्य करने के लिए पारित किया जाना है और नई $ _POST [ 'hidden_value'] का उपयोग कर सकेंगे?

धन्यवाद


$ _POST [ 'consolidate_answers']

  • यदि आप $ _POST आप दस्तावेज़ चाहिए करने के लिए एक मूल्य निर्दिष्ट बहुत स्पष्ट रूप से है, क्योंकि यह आम है और न ही विचार नहीं किया है "सर्वश्रेष्ठ प्रणालियां।
  • यदि आप PHP जैसे Suhosin Patch में से किसी एक्सटेंशन है ... यह ब्लॉक कर सकते हैं इस तरह के कार्यों ..
  • हैंडल अपनी खुद की सरणियों, $ _POST पर निर्भर नहीं है!
  • आईएफ होना चाहिए, $ _POST की प्रति बनाएं और उसके साथ काम करें।

उत्तर

23

आप $_POST पर मान असाइन कर सकते हैं, लेकिन यदि आप ऐसा करते हैं तो आपको असाइनमेंट के बिंदु और पहुंच के बाद बिंदु पर टिप्पणियों के साथ इसे बहुत स्पष्ट रूप से दस्तावेज करना चाहिए। $_POST मैन्युअल रूप से छेड़छाड़ करने वाले सुपरग्राबल में क्या है और यह कहां से आया है, भविष्य के प्रोग्रामर '(अपनी खुद की सहित) को तोड़ सकता है।

वहाँ अन्य विकल्प हैं, की तरह हो सकता है:

$my_post = $_POST; 
$my_post['hidden_value'] = 12345; 

// In a function: 
function func() { 
    // Emulate a superglobal 
    echo $GLOBALS['mypost']['hidden_value']; 
} 
+0

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

+0

@KRB, आप एक अलग मान का उपयोग नहीं कर रहे हैं - आप भविष्य में उपयोग के लिए '$ _POST'' $ my_post' के साथ बदल रहे हैं। मैं इसे '$ _POST' में हेरफेर करने के लिए खराब अभ्यास मानता हूं, हालांकि मैं इसे समय-समय पर स्वयं करने के लिए स्वीकार करता हूं। जब तक आप अपने इरादों को बहुत स्पष्ट रूप से टिप्पणी करते हैं, यह शायद ठीक है। –

+0

आपके इरादों पर टिप्पणी करने से वास्तव में कोड में अन्य स्थानों की सहायता नहीं की जाएगी, जिन्हें $ _POST चर की आवश्यकता होती है, जो उनके द्वारा लिखी जा सकती है या नहीं भी हो सकती है (या वह खुद को अपने डरावनी वैश्विक कुशलताओं को याद नहीं रख सकता)। –

11

$ _POST [ 'hidden_value'] एक नया मान सौंपा जा सकता है और उसके बाद $ _POST के रूप में एक और कार्य करने के लिए पारित किया और उपयोग कर सकेंगे जा नया $ _POST ['hidden_value']?

यह सामान्य PHP में हो सकता है।

हालांकि, Suhosin Patch जैसे एक्सटेंशन इसे अवरुद्ध कर सकते हैं।

इसके अलावा, यह सामान्य रूप से गलत लगता है। $_POST कच्चे, आने वाले POST डेटा को शामिल करने का इरादा है - कुछ भी नहीं। इसे आईएमओ संशोधित नहीं किया जाना चाहिए।

जाने का एक बेहतर तरीका डेटाबेस में किसी सरणी में डालने के लिए आपके द्वारा योजनाबद्ध सभी डेटा लाने के लिए होगा, और इसके बजाय उस सरणी में हेरफेर करें।

5

आप कर सकते हैं, यह काम करेगा, लेकिन नहीं।

$_POST की एक प्रति बनाएं, उस पर अपने परीक्षण करें और इसके बजाय संशोधित करें। उदाहरण के लिए।

$postdata = $_POST; 
if ($postdata['somevalue'] != 'someothervalue') $postdata['newvalue'] = 'anothervalue'; 
// ... 

आप में हेरफेर तो चर स्वतः निर्मित PHP द्वारा, यह शायद वापस आ जाएगा, चर डेटा आप इसे करने की उम्मीद नहीं रखता है पर बाद में आप परेशान करने के लिए।

1

एक विकल्प खोजें!

$ _POST चर की एक अलग जिम्मेदारी है। अपने वैश्विकता का दुरुपयोग मत करो।

मैं कहूंगा कि वैश्विकता को किसी भी तरह से दुरुपयोग न करें, भले ही इसका मतलब है कि आपके पास डिज़ाइन (या दिमाग में) बदलना है।

लेकिन यदि आप नहीं चुनते हैं, तो अपनी आवश्यकताओं के लिए समर्पित वैश्विक रजिस्ट्री बनाने पर विचार करें। भाषा निर्मित इंसिपेंट में हेरफेर न करें।

+0

मेरा प्रोफेसर हमेशा कहता है, "ग्लोबल वेरिएबल्स स्टिंक!"। अच्छा आदमी लगता है, सलाह के लिए धन्यवाद !! – KRB

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