Pergunta

Eu sei que CodeIgniter desliga parâmetros GET por padrão.

Mas por ter tudo feito em POST, você não ficar irritado por solicitações de dados re-envio, se alguma vez você pressiona de volta depois de um envio de formulário?

Irrita-me, mas eu não tenho certeza se eu quero permitir que GET puramente por este motivo.

É um tal problema de segurança grande para permitir parâmetros GET também?

Foi útil?

Solução

Quando eu comecei a trabalhar com CodeIgniter, não usar GET realmente me jogou fora também. Mas então eu percebi que você pode simular parâmetros GET através da manipulação da URI usando o built-in URI Class . É fantástico e faz suas URLs olhar melhor.

Ou se você realmente necessidade GETs funcionando, você pode colocar isso em seu controlador:

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

O que vai colocar as variáveis ??de volta para a matriz GET.

Outras dicas

Isso funcionou para mim:

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

array $params contém os parâmetros passados ??após o? caráter

Agora ele funciona ok do 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; 

Esta função é idêntica à função post, só que busca obter dados:

$this->input->get()

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

Você simplesmente precisa habilitá-lo no config.php e você pode usar $this->input->get('param_name'); para obter parâmetros.

parse_str($_SERVER['QUERY_STRING'],$_GET); Só funcionou para mim depois de eu adicionei a seguinte linha para aplicações / config / config.php:

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

Eu encontrei $ _GET params não ser realmente necessário em CI, mas o Facebook e outros sites de despejar GET parâmetros para o final de links que 404 para o meu site CI !! Ao adicionar a linha acima em config.php, essas páginas trabalhou. Espero que isso ajude as pessoas!

(de http://www.maheshchari.com/ work-à-obter-método-on-codeigniter / )

Você pode ativar consulta cordas se você realmente insistir. Em seu config.php você pode ativar seqüências de consulta:

$config['enable_query_strings'] = TRUE;

Para mais informações você pode olhar para a parte inferior desta página Wiki: http://codeigniter.com/user_guide/general/urls.html

Ainda assim, aprender a trabalhar com urls limpas é uma sugestão melhor.

"Você não fica irritado com as solicitações de dados re-envio, se alguma vez você pressionar volta depois de um envio do formulário"

você pode contornar isso fazendo um redirecionamento da página que processa o envio do formulário para a página de sucesso. a última "ação" foi o carregamento da página de sucesso, não o envio do formulário, que significa que se os usuários fazem um F5 será apenas recarregar a página e não enviar o formulário novamente.

Se o seu a sua necessidade de primeiro uso parâmetro-lo.

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

E sua necessidade segundo uso parâmetro it

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

Tenha o seu muitos parâmetro melhorar parâmetro

allesklar: Isso é um pouco enganador, como scripts e bots pode postar dados quase tão facilmente quanto enviar um pedido normal. Não é um segredo, é parte de HTTP.

Um pouco fora do tópico, mas eu estava procurando por uma função get no CodeIgniter apenas para passar algumas variáveis ??entre controladores e nos deparamos com Flashdata.
ver: http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata permite que você crie um conjunto de dados sessão rápida que só estarão disponíveis para o próximo pedido do servidor, e depois são apagados automaticamente.

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 */

meu parâmetro é uid = 4 e obtê-lo com:?

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

wis

parâmetros GET são armazenados em cache pelo navegador da web, POST não é. Assim, com um POST você não precisa se preocupar com o armazenamento em cache, de modo que é por isso que é geralmente preferido.

Você pode tentar este

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

Mais fácil:

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

muito legal que plugin embora.

Faça isso abaixo. Trabalhou para mim. Tomei valores de uma caixa de seleção e outra caixa de texto. Em seguida, no botão clique Tomei todos os dados em função Javascript e redirecionada usando 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;
        }
    });
});

O código acima funcionou para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top