Domanda

So che codeIgniter disattiva i parametri GET per impostazione predefinita.

Ma avendo fatto tutto in POST, non ti irriti dalle richieste di re-invio dei dati se mai rispondi dopo l'invio di un modulo?

Mi dà fastidio, ma non sono sicuro di voler autorizzare GET esclusivamente per questo motivo.

È un problema di sicurezza così grande consentire anche i parametri GET?

È stato utile?

Soluzione

Quando ho iniziato a lavorare con CodeIgniter, non usare GET mi ha davvero buttato giù. Ma poi ho capito che puoi simulare i parametri GET manipolando l'URI usando il Classe URI . È fantastico e rende i tuoi URL più belli.

O se hai davvero bisogno che i GET funzionino puoi metterlo nel tuo controller:

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

Che riporterà le variabili nell'array GET.

Altri suggerimenti

Questo ha funzionato per me:

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

$params contiene i parametri passati dopo il? carattere

Ora funziona bene da 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; 

Questa funzione è identica alla funzione post, solo recupera i dati:

$this->input->get()

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

Devi semplicemente abilitarlo in config.php e puoi usare $this->input->get('param_name'); per ottenere i parametri.

parse_str($_SERVER['QUERY_STRING'],$_GET); Ha funzionato SOLO per me dopo aver aggiunto la seguente riga ad applicazioni / config / config.php:

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

Ho trovato $ _GET parametri non realmente necessari in CI, ma Facebook e altri siti scaricano parametri GET fino alla fine dei collegamenti che sarebbero 404 per il mio sito CI !! Aggiungendo la riga sopra in config.php, quelle pagine hanno funzionato. Spero che questo aiuti le persone!

(da http://www.maheshchari.com/ lavorare-to-get-metodo-on-CodeIgniter / )

Puoi abilitare le stringhe di query se insisti davvero. Nel tuo config.php puoi abilitare le stringhe di query:

$config['enable_query_strings'] = TRUE;

Per maggiori informazioni puoi consultare il fondo di questa pagina Wiki: http://codeigniter.com/user_guide/general/urls.html

Tuttavia, imparare a lavorare con URL puliti è un suggerimento migliore.

" non ti infastidire dalle richieste di re-invio dati se mai premi indietro dopo l'invio di un modulo "

puoi aggirare il problema facendo un reindirizzamento dalla pagina che elabora l'invio del modulo alla pagina di successo. l'ultimo " azione " è stato il caricamento della pagina di successo, non l'invio del modulo, il che significa che se gli utenti eseguono un F5 ricaricherà semplicemente quella pagina e non invierà più il modulo.

Se hai bisogno del primo parametro usalo.

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

E il tuo secondo parametro necessario lo usa

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

I tuoi numerosi parametri migliorano il parametro

allesklar: è un po 'fuorviante, dato che script e bot possono inviare i dati con la stessa facilità con cui si invia una normale richiesta. Non è un segreto, fa parte di HTTP.

Un po 'fuori tema, ma stavo cercando una funzione get in CodeIgniter solo per passare alcune variabili tra i controller e imbattermi in Flashdata.
vedi: http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata consente di creare una sessione rapida di dati che saranno disponibili solo per la successiva richiesta del server e verranno automaticamente cancellati.

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

il mio parametro è? uid = 4 e ottenerlo con:

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

WIS

I parametri GET vengono memorizzati nella cache dal browser Web, POST no. Quindi con un POST non devi preoccuparti della memorizzazione nella cache, quindi è di solito preferibile.

Puoi provare questo

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

Ancora più semplice:

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

quel plugin è piuttosto interessante però.

Procedi di seguito. Ha funzionato per me. Ho preso i valori da una casella di selezione e un'altra casella di testo. Quindi, facendo clic sul pulsante, ho preso tutti i dati nella funzione Javascript e reindirizzati utilizzando 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;
        }
    });
});

Il codice sopra ha funzionato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top