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?
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.
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
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;
Diese Funktion ist identisch mit der Post-Funktion, ruft nur Daten ab:
$this->input->get()
Sie müssen es nur in der config.php aktivieren und können $this->input->get('param_name');
verwenden, um Parameter abzurufen.
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/ )
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.
"Ä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.
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
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 */
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.
mein parameter ist? uid = 4 und bekomme es mit:
$this->uid = $this->input->get('uid', TRUE);
echo $this->uid;
wis
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.
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.
Sie können dies versuchen
$this->uri->segment('');