it-swarm.com.de

GET-Parameter in der URL mit CodeIgniter

Ich weiß, dass CodeIgniter GET-Parameter standardmäßig deaktiviert.

Aber wenn Sie alles in POST erledigen, ärgern Sie sich dann nicht über die erneuten Datenanfragen, wenn Sie nach dem Absenden eines Formulars auf "Zurück" klicken?

Es ärgert mich, aber ich bin mir nicht sicher, ob ich GET aus diesem Grund zulassen möchte.

Ist es ein so großes Sicherheitsproblem, auch GET-Parameter zuzulassen?

48
Jon Winstanley

Als ich anfing, mit CodeIgniter zu arbeiten, hat mich das Nichtverwenden von GET auch sehr abgelenkt. Aber dann wurde mir klar, dass Sie GET-Parameter simulieren können, indem Sie den URI mit dem eingebauten RI-Klasse bearbeiten. Es ist fantastisch und lässt Ihre URLs besser aussehen.

Oder wenn Sie wirklich brauchen, dass GETs funktionieren, können Sie dies in Ihren Controller einfügen:

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

Dadurch werden die Variablen wieder in das GET-Array eingefügt.

57
Jelani Harris

Das hat bei mir funktioniert:

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

$params Array enthält die Parameter, die nach dem? Charakter

13
Roberto Gerola

Ab CodeIgniter 2.1.0 funktioniert es nun einwandfrei

    //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; 
11
almix

Diese Funktion ist identisch mit der Post-Funktion, ruft nur Daten ab:

$this->input->get()

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

10
Murtaza Baig

Sie müssen es nur in der config.php aktivieren und können $this->input->get('param_name'); verwenden, um Parameter abzurufen.

8
Sumit

parse_str($_SERVER['QUERY_STRING'],$_GET); hat NUR für mich funktioniert, nachdem ich die folgende Zeile zu applications/config/config.php hinzugefügt habe:

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

Ich fand, dass $ _GET-Parameter in CI nicht wirklich notwendig sind, aber Facebook und andere Websites werfen GET-Parameter an das Ende von Links, die für meine CI-Site 404 wären !! Durch Hinzufügen der obigen Zeile in config.php funktionierten diese Seiten. Ich hoffe das hilft den Leuten!

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

6

Sie können Abfragezeichenfolgen aktivieren, wenn Sie wirklich darauf bestehen. In deiner config.php kannst du Query Strings aktivieren:

$config['enable_query_strings'] = TRUE;

Weitere Informationen finden Sie unten auf dieser Wiki-Seite: http://codeigniter.com/user_guide/general/urls.html

Das Erlernen der Arbeit mit sauberen URLs ist jedoch ein besserer Vorschlag.

4
Tomas

"Ärgern Sie sich nicht über das erneute Senden von Datenanforderungen, wenn Sie nach dem Absenden eines Formulars auf" Zurück "klicken."

sie können dies umgehen, indem Sie eine Weiterleitung von der Seite ausführen, die Ihre Formularübermittlung an die Erfolgsseite verarbeitet. Die letzte "Aktion" war das Laden der Erfolgsseite, nicht das Senden des Formulars. Wenn Benutzer ein F5 ausführen, wird diese Seite nur neu geladen und das Formular nicht erneut gesendet.

2
stef

Wenn Sie einen ersten Parameter benötigen, verwenden Sie diesen.

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

Und Ihr zweiter Parameter benötigt es

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

Haben Sie Ihre vielen Parameter Parameter verbessern

2
Md.Jewel Mia

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 */
1
Brian Temecula

Ein bisschen aus dem Thema, aber ich suchte nach einer Get-Funktion in CodeIgniter, um nur einige Variablen zwischen Controllern zu übergeben und auf Flashdata zu stoßen.
siehe: http://codeigniter.com/user_guide/libraries/sessions.html
Mit Flashdata können Sie schnelle Sitzungsdaten erstellen, die nur für die nächste Serveranforderung verfügbar sind und dann automatisch gelöscht werden.

1
Rwahyudi

mein parameter ist? uid = 4 und bekomme es mit:

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

wis

1
Ks Sjkjs

Tun Sie dies unten. Hat für mich gearbeitet. Ich habe Werte aus einem Auswahlfeld und einem anderen Textfeld entnommen. Dann auf Knopfdruck habe ich die gesamten Daten in Javascript-Funktion aufgenommen und mit Javascript umgeleitet.

//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;
        }
    });
});

Der obige Code hat bei mir funktioniert.

0
JD_bravo

GET-Parameter werden vom Webbrowser zwischengespeichert, POST nicht. Mit einem POST müssen Sie sich also keine Gedanken über das Caching machen wird normalerweise bevorzugt.

0
Nick Berardi

Sie können dies versuchen

$this->uri->segment('');
0
Inspire Shahin