我知道 codeIgniter 默认关闭 GET 参数。
但是,通过在 POST 中完成所有操作,如果您在表单提交后按回,您不会对重新发送数据请求感到恼火吗?
这让我很恼火,但我不确定我是否想纯粹出于这个原因允许 GET。
允许 GET 参数也有这么大的安全问题吗?
我知道 codeIgniter 默认关闭 GET 参数。
但是,通过在 POST 中完成所有操作,如果您在表单提交后按回,您不会对重新发送数据请求感到恼火吗?
这让我很恼火,但我不确定我是否想纯粹出于这个原因允许 GET。
允许 GET 参数也有这么大的安全问题吗?
当我第一次开始使用 CodeIgniter 时,不使用 GET 真的让我很失望。但后来我意识到你可以通过使用内置的URI Class操作 URI 来模拟 GET 参数。这太棒了,它使您的 URL 看起来更好。
或者,如果您真的需要 GET 工作,您可以将其放入您的控制器中:
parse_str($_SERVER['QUERY_STRING'], $_GET);
这会将变量放回 GET 数组中。
此函数与 post 函数相同,只是它获取 get 数据:
$this->input->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');
来获取参数。
如果您需要第一个参数,请使用它。
$this->uri->segment('3');
你需要第二个参数使用它
$this->uri->segment('4');
有你的许多参数增强参数
parse_str($_SERVER['QUERY_STRING'],$_GET);
仅在我将以下行添加到 applications/config/config.php 后才为我工作:
$config['uri_protocol'] = "PATH_INFO";
我发现 $_GET 参数在 CI 中并不是真正需要的,但是 Facebook 和其他网站将 GET 参数转储到链接的末尾,这对于我的 CI 站点来说是 404!通过在 config.php 中添加上面的行,这些页面就可以工作了。我希望这对人们有帮助!
如果您真的坚持,您可以启用查询字符串。在您的 config.php 中,您可以启用查询字符串:
$config['enable_query_strings'] = TRUE;
有关更多信息,您可以查看此 Wiki 页面的底部: http: //codeigniter.com/user_guide/general/urls.html
不过,学习使用干净的 url 是一个更好的建议。
“如果您在提交表单后回击,您不会对重新发送数据请求感到恼火”
您可以通过从处理表单提交的页面重定向到成功页面来解决此问题。最后一个“动作”是加载成功页面,而不是表单提交,这意味着如果用户执行 F5,它只会重新加载该页面而不会再次提交表单。
allesklar:这有点误导,因为脚本和机器人可以像发送普通请求一样轻松地发布数据。这不是秘密,它是 HTTP 的一部分。
有点跑题了,但我一直在 CodeIgniter 中寻找一个 get 函数,只是为了在控制器之间传递一些变量并遇到 Flashdata。
请参阅:http
:
//codeigniter.com/user_guide/libraries/sessions.html Flashdata 允许您创建仅可用于下一个服务器请求的快速会话数据,然后自动清除。
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 */
我的参数是 ?uid=4 并通过以下方式获取:
$this->uid = $this->input->get('uid', TRUE);
echo $this->uid;
威斯
GET 参数由 Web 浏览器缓存,POST 不是。因此,使用 POST 您不必担心缓存,这就是通常首选它的原因。
更容易:
curl -X POST -d "param=value¶m2=value" http://example.com/form.cgi
不过那个插件很酷。
你可以试试这个
$this->uri->segment('');
在下面执行此操作。为我工作。我从一个选择框和另一个文本框中获取值。然后在按钮单击时,我在 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;
}
});
});
上面的代码对我有用。