GET parâmetros na URL com CodeIgniter
-
22-07-2019 - |
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?
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()
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¶m2=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.