2008-12-02 18 views
46

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

लेकिन पोस्ट में सबकुछ करके, क्या आप कभी भी फॉर्म सबमिट करने के बाद वापस प्रेस अनुरोधों से नाराज नहीं होते हैं?

यह मुझे परेशान करता है, लेकिन मुझे यकीन नहीं है कि मैं इस कारण से पूरी तरह से जीईटी की अनुमति देना चाहता हूं।

क्या यह जीईटी पैरामीटर को भी अनुमति देने के लिए इतना बड़ा सुरक्षा मुद्दा है?

+0

कोडइग्निटर 2.x के रूप में, पैरा पैरा मीटर डिफ़ॉल्ट रूप से * सक्षम * हैं। –

उत्तर

56

जब मैंने पहली बार कोडइग्निटर के साथ काम करना शुरू किया, तो जीईटी का उपयोग न करने से मुझे वास्तव में भी फेंक दिया। लेकिन फिर मुझे एहसास हुआ कि आप अंतर्निहित URI Class का उपयोग कर यूआरआई में हेरफेर करके जीईटी पैरामीटर अनुकरण कर सकते हैं। यह शानदार है और यह आपके यूआरएल को बेहतर दिखता है।

या यदि आप वास्तव में काम कर आप अपने नियंत्रक में डाल सकता है हो जाता है की जरूरत है:

parse_str($_SERVER['QUERY_STRING'], $_GET); 

कौन सा चर प्राप्त सरणी में वापस डाल देंगे।

+1

हां - जिस तरह से कोडइग्निटर डिफ़ॉल्ट रूप से यूआरएल को संभालता है, यूआरआई अधिनियम में अतिरिक्त सेगमेंट आपके नियंत्रक विधियों के पैरामीटर के रूप में कार्य करता है। –

+11

यह विधि काम करती है यदि आप $ config ['uri_protocol'] = 'PATH_INFO'] पर स्विच करते हैं; अन्यथा? foo = bar और baz = meh/foo/baz में बदल जाएगा। –

+1

मैं एक फेसबुक ऐप बना रहा हूं और मैं ग्राफ एपीआई द्वारा समर्थित फेसबुक अपडेट की सदस्यता लेने की योजना बना रहा हूं। इसके लिए जीईटी पैरामीटर की आवश्यकता है। http: //developers.facebook।इस कोड के लिए कॉम/डॉक्स/संदर्भ/एपीआई/रीयलटाइम/ –

0

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

+0

लेकिन यदि आपको जीईटी की आवश्यकता है तो आपको जीईटी की आवश्यकता है, बुकमार्क करने योग्य लिंक, फ़ीड और इसी तरह के बारे में क्या? – Lorenzo

+0

ये सब ठीक हैं, लेकिन आपको यह समझना होगा कि यदि उचित शीर्षलेख जोड़े नहीं गए हैं तो ब्राउज़र उन GET अनुरोधों को कैश कर सकता है। –

+7

आईएमओ, जीईटी की अनुपस्थिति सीआई की सबसे बड़ी खामियों में से एक है। जीईटी HTTP का मूल पहलू है और तदनुसार उपयोग किया जाना चाहिए। कैशिंग एक * अच्छी * चीज है! – pbreitenbach

1

ऑलस्क्लर: यह थोड़ा भ्रामक है, क्योंकि स्क्रिप्ट और बॉट सामान्य अनुरोध भेजने के रूप में आसानी से डेटा पोस्ट कर सकते हैं। यह एक रहस्य नहीं है, यह HTTP का हिस्सा है।

0
भी आसान

:

curl -X POST -d "param=value&param2=value" http://example.com/form.cgi 

कि प्लगइन का बहुत अच्छा है, हालांकि।

2

"आप फिर से भेजने के डेटा अनुरोधों से नाराज नहीं मिलता है अगर कभी आप एक फार्म जमा करने के बाद वापस प्रेस"

आप इस के आसपास पृष्ठ जो आपके फ़ॉर्म जमा प्रक्रियाओं से रीडायरेक्ट करके प्राप्त कर सकते हैं सफलता पृष्ठ आखिरी "एक्शन" सफलता पृष्ठ की लोडिंग थी, फॉर्म सबमिशन नहीं, जिसका मतलब है कि यदि उपयोगकर्ता एफ 5 करते हैं तो यह उस पृष्ठ को फिर से लोड करेगा और फिर फॉर्म सबमिट नहीं करेगा।

+0

उत्कृष्ट, धन्यवाद! मैंने इसे बाद में पाया है, लेकिन हाँ, यह एक अच्छी टिप है। –

1

विषय से थोड़ा सा, लेकिन मैं नियंत्रक के बीच कुछ चर पारित करने और फ्लैशडाटा में आने के लिए कोडइग्निटर में एक फ़ंक्शन प्राप्त करने की तलाश में था।
देखें: http://codeigniter.com/user_guide/libraries/sessions.html
फ्लैशडाटा आपको एक त्वरित सत्र डेटा बनाने की अनुमति देता है जो केवल अगले सर्वर अनुरोध के लिए उपलब्ध होगा, और फिर स्वचालित रूप से साफ़ हो जाएगा।

6

parse_str($_SERVER['QUERY_STRING'],$_GET); ही मेरे लिए काम किया के बाद मैं/config/config.php आवेदन करने के लिए निम्न पंक्ति कहा:

$config['uri_protocol'] = "PATH_INFO";

मैंने पाया $ _GET पैरामीटर नहीं वास्तव में सीआई में आवश्यक हो सकता है, लेकिन फेसबुक और अन्य साइटें लिंक के अंत तक पैरा प्राप्त करें जो मेरी सीआई साइट के लिए 404 होगी !! Config.php में उपरोक्त पंक्ति जोड़कर, उन पृष्ठों ने काम किया। मुझे आशा है कि इससे लोगों की मदद मिलेगी!

(http://www.maheshchari.com/work-to-get-method-on-codeigniter/ से)

1

MY_Input।php:

<?php 
// this class extension allows for $_GET access 
class MY_Input extends CI_input { 

    function _sanitize_globals() 
    { 
     // setting allow_get_array to true is the only real modification 
     $this->allow_get_array = TRUE; 

     parent::_sanitize_globals(); 
    } 

} 
/* End of file MY_Input.php */ 
/* Location: .application/libraries/MY_Input.php */ 

MY_URI.php:

<?php 
/* 
| this class extension allows for $_GET access by retaining the 
| standard functionality of allowing query strings to build the 
| URI String, but checks if enable_query_strings is TRUE 
*/ 
class MY_URI extends CI_URI{ 

    function _fetch_uri_string() 
    { 
     if (strtoupper($this->config->item('uri_protocol')) == 'AUTO') 
     { 
      // If the URL has a question mark then it's simplest to just 
      // build the URI string from the zero index of the $_GET array. 
      // This avoids having to deal with $_SERVER variables, which 
      // can be unreliable in some environments 
      // 
      // *** THE ONLY MODIFICATION (EXTENSION) TO THIS METHOD IS TO CHECK 
      //  IF enable_query_strings IS TRUE IN THE LINE BELOW *** 
      if ($this->config->item('enable_query_strings') === TRUE && is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') 
      { 
       $this->uri_string = key($_GET); 
       return; 
      } 

      // Is there a PATH_INFO variable? 
      // Note: some servers seem to have trouble with getenv() so we'll test it two ways 
      $path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO'); 
      if (trim($path, '/') != '' && $path != "/".SELF) 
      { 
       $this->uri_string = $path; 
       return; 
      } 

      // No PATH_INFO?... What about QUERY_STRING? 
      $path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING'); 
      if (trim($path, '/') != '') 
      { 
       $this->uri_string = $path; 
       return; 
      } 

      // No QUERY_STRING?... Maybe the ORIG_PATH_INFO variable exists? 
      $path = str_replace($_SERVER['SCRIPT_NAME'], '', (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : @getenv('ORIG_PATH_INFO')); 
      if (trim($path, '/') != '' && $path != "/".SELF) 
      { 
       // remove path and script information so we have good URI data 
       $this->uri_string = $path; 
       return; 
      } 

      // We've exhausted all our options... 
      $this->uri_string = ''; 
     } 
     else 
     { 
      $uri = strtoupper($this->config->item('uri_protocol')); 

      if ($uri == 'REQUEST_URI') 
      { 
       $this->uri_string = $this->_parse_request_uri(); 
       return; 
      } 

      $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri); 
     } 

     // If the URI contains only a slash we'll kill it 
     if ($this->uri_string == '/') 
     { 
      $this->uri_string = ''; 
     } 
    } 

} 
/* End of file MY_URI.php */ 
/* Location: .application/libraries/MY_URI.php */ 
+1

यह वास्तव में प्रश्न का उत्तर नहीं देता है –

13

यह मेरे लिए काम किया:

<?php 
$url = parse_url($_SERVER['REQUEST_URI']); 
parse_str($url['query'], $params); 
?> 

$params सरणी मापदंडों के बाद पारित कर दिया होता है? चरित्र

4

यदि आप वास्तव में जोर देते हैं तो आप क्वेरी स्ट्रिंग सक्षम कर सकते हैं। अपने config.php में आप क्वेरी स्ट्रिंग सक्षम कर सकते हैं:

$config['enable_query_strings'] = TRUE; 

अधिक जानकारी आप इस विकी पृष्ठ के तल पर देख सकते हैं के लिए: http://codeigniter.com/user_guide/general/urls.html

फिर भी, स्वच्छ यूआरएल के साथ काम करने में सीखने के लिए एक बेहतर है सुझाव।

11

अब यह CodeIgniter 2.1.0

//By default CodeIgniter enables access to the $_GET array. If for some 
    //reason you would like to disable it, set 'allow_get_array' to FALSE. 

$config['allow_get_array']  = TRUE; 
8

से ठीक काम करता है आप बस config.php में यह सक्षम करने की आवश्यकता है और आप $this->input->get('param_name'); का उपयोग पैरामीटर प्राप्त करने के लिए कर सकते हैं।

0

आप यदि यह

$this->uri->segment(''); 
1

कोशिश कर सकते हैं पहले पैरामीटर उपयोग करने के लिए अपने अपनी जरूरत यह। ?

$this->uid = $this->input->get('uid', TRUE); 
    echo $this->uid; 

:

$this->uri->segment('3'); 

और अपनी जरूरत दूसरा पैरामीटर इसका इस्तेमाल

$this->uri->segment('4'); 

अपने कई पैरामीटर बढ़ाने पैरामीटर

1

मेरी पैरामीटर है uid = 4 और के साथ इसे देख सकें बुद्धि