Получить параметры в URL с помощью CodeIgniter

Я знаю, что codeIgniter отключает параметры GET по умолчанию.

но, имея все сделано в сообщении, вы не раздражаетесь на повторную отправку запросов данных, если когда-либо вы нажимаете назад после подачи формы?

Это раздражает меня, но я не уверен, хочу ли я позволить получить чисто по этой причине.

Это такая большая проблема безопасности, чтобы позволить получить параметры тоже?

16 ответов


когда я впервые начал работать с CodeIgniter, не используя GET действительно сбил меня. Но потом я понял, что вы можете имитировать параметры GET, манипулируя URI с помощью встроенного класс URI. Это фантастика,и это делает ваши URL-адреса лучше.

или если вам действительно нужна работа, вы можете поместить это в свой контроллер:

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

который вернет переменные обратно в массив 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; 

эта функция идентична функции post, только она извлекает данные get:

$this->input->get()

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


вам просто нужно включить его в конфиге.PHP и вы можете использовать $this->input->get('param_name'); для получения параметров.


parse_str($_SERVER['QUERY_STRING'],$_GET); Работал только после того, как я добавил следующую строку в applications/config/config.на PHP:

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

я обнаружил, что $_GET params на самом деле не нужны в CI, но Facebook и другие сайты дамп получают params до конца ссылок, которые будут 404 для моего сайта CI!! Добавив строку в config.php, эти страницы работали. Надеюсь, это поможет людям!

(от http://www.maheshchari.com/work-to-get-method-on-codeigniter/)


вы можете включить строки запроса, если вы настаиваете. В вашей конфигурации.PHP вы можете включить строки запроса:

$config['enable_query_strings'] = TRUE;

для получения дополнительной информации вы можете посмотреть в нижней части этой страницы Wiki: http://codeigniter.com/user_guide/general/urls.html

тем не менее, научиться работать с чистыми URL-адресами-лучшее предложение.


"Не раздражайтесь на повторную отправку запросов данных, если когда-либо вы нажмете назад после отправки формы"

вы можете обойти это, выполнив перенаправление со страницы, которая обрабатывает представление формы на страницу успеха. последним "действием" была загрузка страницы успеха, а не Отправка формы, что означает, что если пользователи сделают F5, он просто перезагрузит эту страницу и не отправит форму снова.


Если вам нужно использовать первый параметр.

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

и ваш второй параметр потребности использует его

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

имейте ваш много параметр увеличить параметр


allesklar: это немного вводит в заблуждение, так как скрипты и боты могут публиковать данные почти так же легко, как отправка обычного запроса. Это не секрет,это часть HTTP.


немного не по теме, но я искал функцию get в CodeIgniter, чтобы передать некоторые переменные между контроллерами и встретить 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;

wis


параметры GET кэшируются веб-браузером, POST-нет. Поэтому с сообщением вам не нужно беспокоиться о кэшировании, поэтому оно обычно предпочтительнее.


вы можете попробовать это

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

еще проще:

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

этот плагин довольно классный.