Параметры GET в URL с помощью CodeIgniter
Я знаю, что codeIgniter отключает параметры GET по умолчанию.
Но если все сделано в POST, разве вас не раздражает запрос на повторную передачу данных, если вы когда-либо нажимаете обратно после отправки формы?
Меня это раздражает, но я не уверен, хочу ли я разрешить GET исключительно по этой причине.
Является ли такой большой проблемой безопасности также возможность установки параметров GET?
Ответы
Ответ 1
Когда я впервые начал работать с CodeIgniter, не используя GET, я тоже отбросил меня. Но потом я понял, что вы можете имитировать параметры GET, манипулируя URI, используя встроенный URI Class. Это фантастика, и это делает ваши URL-адреса выглядеть лучше.
Или, если вам действительно нужна работа GET, вы можете поместить это в свой контроллер:
parse_str($_SERVER['QUERY_STRING'], $_GET);
Который вернет переменные в массив GET.
Ответ 2
Это сработало для меня:
<?php
$url = parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'], $params);
?>
$params
массив содержит параметры, переданные после? символ
Ответ 3
Теперь он работает нормально с 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;
Ответ 4
Эта функция идентична функции post, только она получает данные:
$this->input->get()
https://www.codeigniter.com/user_guide/libraries/input.html
Ответ 5
Вам просто нужно включить его в config.php, и вы можете использовать $this->input->get('param_name');
для получения параметров.
Ответ 6
parse_str($_SERVER['QUERY_STRING'],$_GET);
ТОЛЬКО работал у меня после того, как я добавил следующую строку в application/config/config.php:
$config['uri_protocol'] = "PATH_INFO";
Я нашел параметры $_GET, которые действительно не нужны в CI, но Facebook и другие сайты сбрасывают параметры GET до конца ссылок, которые будут 404 для моего сайта CI! Добавив строку в config.php, эти страницы работали. Надеюсь, это поможет людям!
(из http://www.maheshchari.com/work-to-get-method-on-codeigniter/)
Ответ 7
Вы можете включить строки запроса, если вы действительно настаиваете.
В вашем config.php вы можете включить строки запроса:
$config['enable_query_strings'] = TRUE;
Для получения дополнительной информации вы можете посмотреть нижнюю часть этой страницы Wiki:
http://codeigniter.com/user_guide/general/urls.html
Тем не менее, обучение работе с чистыми URL-адресами - лучшее предложение.
Ответ 8
"не раздражайтесь повторными запросами данных, если вы когда-либо нажимаете назад после отправки формы?
вы можете обойти это, сделав переадресацию со страницы, которая обрабатывает отправку формы на страницу успеха. последним "действием" была загрузка страницы успеха, а не подача формы, а это означает, что если пользователи выполняют F5, она просто перезагрузит эту страницу и не отправит форму еще раз.
Ответ 9
Если ваша потребность в первом параметре использует его.
$this->uri->segment('3');
И ваш второй параметр использует его
$this->uri->segment('4');
У вас есть несколько параметров улучшения параметра
Ответ 10
allesklar: Это немного вводит в заблуждение, так как скрипты и боты могут получать данные POST почти так же легко, как отправка обычного запроса. Это не секрет, это часть HTTP.
Ответ 11
Немного из темы, но я искал функцию get в CodeIgniter, чтобы передать некоторые переменные между контроллерами и встретить Flashdata.
см. http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata позволяет создавать быстрые данные сеанса, которые будут доступны только для следующего запроса сервера, и затем автоматически очищаются.
Ответ 12
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 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 */
Ответ 13
мой параметр равен? uid = 4 и получает его с помощью:
$this->uid = $this->input->get('uid', TRUE);
echo $this->uid;
И
Ответ 14
Параметры GET кэшируются веб-браузером, POST - нет. Таким образом, с помощью POST вам не нужно беспокоиться о кешировании, поэтому, как правило, это предпочтительнее.
Ответ 15
Еще проще:
curl -X POST -d "param=value¶m2=value" http://example.com/form.cgi
этот плагин довольно крут, хотя.
Ответ 16
Вы можете попробовать это
$this->uri->segment('');
Ответ 17
Сделайте это ниже. Работал на меня. Я взял значения из поля выбора и другого текстового поля. Затем по нажатию кнопки я взял все данные в функции 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;
}
});
});
Приведенный выше код работал для меня.