使用CodeIgniter在URL中获取参数

我知道CodeIgniter默认closuresGET参数。

但是,通过在POST中完成所有事情,如果您在表单提交之后按回来,您是否因为重新发送数据请求而感到恼火?

这让我很烦,但是我不确定是否因为这个原因纯粹允许GET。

允许GET参数也是一个很大的安全问题吗?

当我第一次开始使用CodeIgniter的时候,不使用GET也真的把我抛弃了。 但后来我意识到,你可以通过使用内置的URI类来操作URI来模拟GET参数。 这太棒了,这使得你的url看起来更好。

或者,如果您确实需要GET,您可以将其放入您的控制器中:

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

这将把variables放回到GET数组中。

这对我工作:

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

$params数组包含传递后的参数吗? 字符

现在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; 

你只需要在config.php中启用它,你可以使用$this->input->get('param_name'); 获取参数。

这个函数和post函数是一样的,只是它取得了获取数据:

 $this->input->get() 

http://ellislab.com/codeigniter/user-guide/libraries/input.html

parse_str($_SERVER['QUERY_STRING'],$_GET); 只有在为application / config / config.php添加了以下行后才工作:

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

我发现$ _GET params在CI中确实不是必须的,但Facebook和其他站点将GET PARAMS转储到404链接的末尾。 通过在config.php中添加上面的行,这些页面工作。 我希望这有助于人们!

(从http://www.maheshchari.com/work-to-get-method-on-codeigniter/

如果您确实坚持,您可以启用查询string。 在你的config.php中,你可以启用查询string:

 $config['enable_query_strings'] = TRUE; 

欲了解更多信息,你可以看看这个维基页面的底部: http : //codeigniter.com/user_guide/general/urls.html

尽pipe如此,学习使用干净的网站是一个更好的build议。

“如果您在表单提交后按回来,您不会因为重新发送数据请求而感到烦恼”

您可以通过从处理表单提交到成功页面的页面进行redirect来解决此问题。 最后一个“行动”是成功页面的加载,而不是表单提交,这意味着如果用户做了F5,它只会重新加载该页面,而不是再次提交表单。

allesklar:这有些误导,因为脚本和机器人可以像发送普通请求一样容易地发布数据。 这不是什么秘密,它是HTTP的一部分。

有一点点的话题,但我在CodeIgniter寻找一个get函数只是为了传递控制器之间的一些variables,并遇到Flashdata。
请参阅: http : //codeigniter.com/user_guide/libraries/sessions.html
Flashdata允许您创build快速会话数据,这些数据只能在下一个服务器请求中使用,然后自动清除。

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 */ 

如果你需要第一个参数使用它。

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

而你需要第二个参数使用它

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

有你的许多参数增强参数

GET参数由Web浏览器caching,POST不是。 所以用POST你不必担心caching,所以这就是为什么它通常是首选。

你可以试试这个

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

更简单:

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

该插件是非常酷虽然。

我的参数是?uid = 4并得到它:

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

WIS