Question

Je sais que codeIgniter désactive les paramètres GET par défaut.

Mais en ayant tout fait dans POST, ne vous ennuyez pas par les demandes de ré-envoi de données si vous appuyez de nouveau après la soumission d'un formulaire?

Cela me gêne, mais je ne suis pas sûr de vouloir autoriser GET uniquement pour cette raison.

Autoriser les paramètres GET est-il un problème de sécurité si important?

Était-ce utile?

La solution

Lorsque j'ai commencé à travailler avec CodeIgniter, le fait de ne pas utiliser GET m'a vraiment jeté à l'eau. Mais ensuite, j'ai réalisé que vous pouvez simuler des paramètres GET en manipulant l'URI à l'aide de la . C’est fantastique et cela donne une meilleure apparence à vos URL.

Si vous avez vraiment besoin que GET fonctionne, vous pouvez le mettre dans votre contrôleur:

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

Qui replacera les variables dans le tableau GET.

Autres conseils

Cela a fonctionné pour moi:

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

$params tableau contient les paramètres passés après le? caractère

Cela fonctionne maintenant à partir de 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; 

Vous devez simplement l'activer dans le fichier config.php et vous pouvez utiliser $this->input->get('param_name'); pour obtenir les paramètres.

parse_str($_SERVER['QUERY_STRING'],$_GET); SEULEMENT travaillé pour moi après avoir ajouté la ligne suivante à applications / config / config.php:

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

J'ai trouvé que les paramètres $ _GET n'étaient pas vraiment nécessaires dans CI, mais Facebook et d'autres sites dumpaient les paramètres GET jusqu'à la fin des liens, ce qui ferait 404 pour mon site CI! En ajoutant la ligne ci-dessus dans config.php, ces pages ont fonctionné. J'espère que cela aide les gens!

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

Vous pouvez activer les chaînes de requête si vous insistez vraiment. Dans votre config.php, vous pouvez activer les chaînes de requête:

$config['enable_query_strings'] = TRUE;

Pour plus d'informations, vous pouvez regarder au bas de cette page Wiki: http://codeigniter.com/user_guide/general/urls.html

Néanmoins, apprendre à travailler avec des URL propres est une meilleure suggestion.

& "; ne vous ennuyez pas par les demandes de réenvoi de données si vous appuyez de nouveau après la soumission d'un formulaire &";

vous pouvez contourner ce problème en effectuant une redirection à partir de la page qui traite la soumission de votre formulaire vers la page de réussite. la dernière " action " s’agissait du chargement de la page de réussite, et non de la soumission du formulaire, ce qui signifie que si les utilisateurs font un F5, ils rechargeront simplement cette page et ne soumettront plus le formulaire.

Si vous avez besoin de votre premier paramètre, utilisez-le.

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

Et votre deuxième paramètre, utilisez-le

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

Demandez à vos nombreux paramètres d’améliorer le paramètre

allesklar: Cela est légèrement trompeur, car les scripts et les robots peuvent POST données aussi facilement que l’envoi d’une requête normale. Ce n'est pas un secret, cela fait partie de HTTP.

Un peu hors de propos, mais je cherchais une fonction get dans CodeIgniter pour passer des variables entre contrôleurs et rencontrer Flashdata.
voir: http://codeigniter.com/user_guide/libraries/sessions.html .
Flashdata vous permet de créer rapidement des données de session qui ne seront disponibles que pour la prochaine demande de serveur, puis seront automatiquement effacées.

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

mon paramètre est uid = 4 et le faire avec:

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

wis

Les paramètres GET sont mis en cache par le navigateur Web, pas le POST. Donc, avec un POST, vous n'avez pas à vous soucier de la mise en cache, c'est pourquoi il est généralement préféré.

Vous pouvez essayer ceci

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

Encore plus facile:

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

ce plugin est plutôt cool cependant.

Faites ceci ci-dessous. Travaillé pour moi J'ai pris les valeurs d'une zone de sélection et d'une autre zone de texte. Ensuite, lors d’un clic sur un bouton, j’ai récupéré toutes les données de la fonction Javascript et redirigé à l’aide de 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;
        }
    });
});

Le code ci-dessus a fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top