使用CodeIgniter在URL中获取参数

时间:2008-12-02 17:05:37

标签: html codeigniter post get

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

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

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

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

17 个答案:

答案 0 :(得分:57)

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

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

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

将变量放回GET数组中。

答案 1 :(得分:13)

这对我有用:

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

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

答案 2 :(得分: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; 

答案 3 :(得分:10)

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

$this->input->get()

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

答案 4 :(得分:8)

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

答案 5 :(得分:6)

parse_str($_SERVER['QUERY_STRING'],$_GET); 在将以下行添加到applications / config / config.php之后,仅对我有用:

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

我发现$ _GET params在CI中并不是真的必要,但Facebook和其他网站将GET参数转换为链接的末尾,这对于我的CI网站来说是404!通过在config.php中添加上面的行,这些页面起作用了。我希望这有助于人们!

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

答案 6 :(得分:4)

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

$config['enable_query_strings'] = TRUE;

有关详细信息,请查看此Wiki页面的底部: http://codeigniter.com/user_guide/general/urls.html

尽管如此,学会使用干净的网址是一个更好的建议。

答案 7 :(得分:2)

“如果您在提交表单后再次按下,请不要因重新发送数据请求而烦恼”

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

答案 8 :(得分:2)

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

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

你需要第二个参数使用它

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

有许多参数增强参数

答案 9 :(得分:1)

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

答案 10 :(得分:1)

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

答案 11 :(得分: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 */

答案 12 :(得分:1)

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

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

WIS

答案 13 :(得分:0)

更容易:

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

该插件非常酷。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

你可以试试这个

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

答案 16 :(得分: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;
        }
    });
});

上面的代码对我有用。