49

我知道 codeIgniter 默认关闭 GET 参数。

但是,通过在 POST 中完成所有操作,如果您在表单提交后按回,您不会对重新发送数据请求感到恼火吗?

这让我很恼火,但我不确定我是否想纯粹出于这个原因允许 GET。

允许 GET 参数也有这么大的安全问题吗?

4

17 回答 17

59

当我第一次开始使用 CodeIgniter 时,不使用 GET 真的让我很失望。但后来我意识到你可以通过使用内置的URI Class操作 URI 来模拟 GET 参数。这太棒了,它使您的 URL 看起来更好。

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

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

这会将变量放回 GET 数组中。

于 2008-12-02T17:36:36.223 回答
19

此函数与 post 函数相同,只是它获取 get 数据:

$this->input->get()

https://www.codeigniter.com/user_guide/libraries/input.html

于 2013-07-05T14:27:17.450 回答
12

这对我有用:

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

$params数组包含在 ? 之后传递的参数 特点

于 2010-10-20T13:25:32.207 回答
10

现在从 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; 
于 2012-08-01T18:49:52.073 回答
8

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

于 2012-11-09T07:00:50.900 回答
7

如果您需要第一个参数,请使用它。

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

你需要第二个参数使用它

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

有你的许多参数增强参数

于 2015-06-01T09:53:28.220 回答
6

parse_str($_SERVER['QUERY_STRING'],$_GET); 仅在我将以下行添加到 applications/config/config.php 后才为我工作:

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

我发现 $_GET 参数在 CI 中并不是真正需要的,但是 Facebook 和其他网站将 GET 参数转储到链接的末尾,这对于我的 CI 站点来说是 404!通过在 config.php 中添加上面的行,这些页面就可以工作了。我希望这对人们有帮助!

(来自https://web.archive.org/web/20101227060818/http://www.maheshchari.com/work-to-get-method-on-codeigniter/

于 2010-06-24T18:33:26.113 回答
3

如果您真的坚持,您可以启用查询字符串。在您的 config.php 中,您可以启用查询字符串:

$config['enable_query_strings'] = TRUE;

有关更多信息,您可以查看此 Wiki 页面的底部: http: //codeigniter.com/user_guide/general/urls.html

不过,学习使用干净的 url 是一个更好的建议。

于 2011-11-27T21:43:11.713 回答
2

“如果您在提交表单后回击,您不会对重新发送数据请求感到恼火”

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

于 2009-08-13T09:12:20.387 回答
1

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

于 2009-02-18T16:55:10.020 回答
1

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

于 2010-01-03T03:00:28.293 回答
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 */
于 2010-07-31T18:02:33.603 回答
1

我的参数是 ?uid=4 并通过以下方式获取:

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

威斯

于 2016-05-23T19:03:37.420 回答
0

GET 参数由 Web 浏览器缓存,POST 不是。因此,使用 POST 您不必担心缓存,这就是通常首选它的原因。

于 2008-12-02T17:08:13.613 回答
0

更容易:

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

不过那个插件很酷。

于 2009-08-09T03:46:04.377 回答
0

你可以试试这个

$this->uri->segment('');
于 2014-09-30T15:47:30.823 回答
0

在下面执行此操作。为我工作。我从一个选择框和另一个文本框中获取值。然后在按钮单击时,我在 Javascript 函数中获取了整个数据并使用 javascript 进行了重定向。

//Search Form
$(document).ready (function($){
    $("#searchbtn").click(function showAlert(e){
        e.preventDefault();
        var cat = $('#category').val();
        var srch = $('#srch').val();

        if(srch==""){
            alert("Search is empty :(");
        }
        else{
            var url = baseurl+'categories/search/'+cat+'/'+srch;            
            window.location.href=url;
        }
    });
});

上面的代码对我有用。

于 2019-06-17T07:19:03.033 回答