Obtenir des paramètres dans L'URL avec CodeIgniter

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

mais en ayant tout fait par la poste, ne vous fâchez-vous pas de renvoyer les demandes de données si jamais vous appuyez sur retour après la soumission d'un formulaire?

il m'ennuie, mais je ne suis pas sûr si je veux permettre obtenir purement pour cette raison.

Est-ce un gros problème de sécurité pour permettre d'OBTENIR les paramètres de trop?

46
demandé sur Jon Winstanley 2008-12-02 20:05:36

16 réponses

quand j'ai commencé à travailler avec CodeIgniter, le fait de ne pas utiliser GET m'a vraiment déconcerté. Mais ensuite j'ai réalisé que vous pouvez simuler des paramètres GET en manipulant L'URI en utilisant leClasse URI. C'est fantastique et ça rend vos URL plus belles.

Ou si vous avez vraiment besoin de commencer à travailler, vous pouvez mettre ceci dans votre contrôleur:

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

qui remettra les variables dans le tableau GET.

57
répondu Jelani Harris 2008-12-02 17:36:36

Cela a fonctionné pour moi :

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

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

13
répondu Roberto Gerola 2010-10-20 13:25:32

maintenant cela fonctionne bien 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; 
11
répondu almix 2012-08-01 18:49:52

cette fonction est identique à la fonction post, seule elle récupère les données get:

$this->input->get()

http://ellislab.com/codeigniter/user-guide/libraries/input.html

10
répondu Murtaza Baig 2016-01-12 19:06:13

il suffit de l'activer dans la configuration.php et vous pouvez utiliser $this->input->get('param_name'); pour obtenir les paramètres.

8
répondu Sumit 2012-11-09 07:00:50

parse_str($_SERVER['QUERY_STRING'],$_GET); Ça n'a marché que pour moi après que j'ai ajouté la ligne suivante à applications/config/config.php:

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

j'ai trouvé $ _GET params pas vraiment être nécessaire en CI, mais Facebook et d'autres sites dump obtenir params à la fin des liens qui serait 404 pour mon site CI!! En ajoutant la ligne ci-dessus dans config.php, ces pages travaillé. J'espère que cela aide les gens!

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

6
répondu Benjamin Sussman 2016-04-21 21:23:26

Vous pouvez activer les chaînes de requête si vraiment vous insistez. 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

cependant, apprendre à travailler avec des urls propres est une meilleure suggestion.

4
répondu Tomas 2011-11-27 21:43:11

"ne pas vous énerver par le ré-envoyer les demandes de données si jamais vous appuyez sur la touche de retour après la soumission d'un formulaire"

vous pouvez contourner cela en faisant une redirection de la page qui traite votre soumission de formulaire à la page de succès. la dernière "action" a été le chargement de la page de succès, pas la soumission du formulaire, ce qui signifie que si les utilisateurs font un F5 il va tout simplement recharger cette page et ne pas soumettre le formulaire à nouveau.

2
répondu stef 2009-08-13 09:12:20

si vous avez besoin du premier paramètre utilisez-le.

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

et votre besoin deuxième paramètre utilisez-le

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

faites en sorte que vos nombreux paramètres améliorent le paramètre

2
répondu Md.Jewel Mia 2016-01-12 19:06:33

allesklar: c'est un peu trompeur, car les scripts et les bots peuvent afficher des données presque aussi facilement qu'envoyer une requête normale. Ce N'est pas un secret, C'est une partie de HTTP.

1
répondu 2009-02-18 16:55:10

un peu hors sujet, mais je cherchais une fonction get dans CodeIgniter juste pour passer quelques variables entre les controllers et tomber sur Flashdata.

voir :http://codeigniter.com/user_guide/libraries/sessions.html

Flashdata vous permet de créer des données de session rapide qui ne seront disponibles que pour la prochaine requête du serveur, et qui seront ensuite automatiquement effacées.

1
répondu Rwahyudi 2010-01-03 03:00:28

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
répondu Brian Temecula 2010-07-31 18:02:33

mon paramètre est ?uid=4 et descendre avec:

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

wis

1
répondu Ks Sjkjs 2016-05-23 19:03:37

les paramètres GET sont mis en cache par le navigateur web, POST ne l'est pas. Ainsi, avec un POST, vous n'avez pas à vous soucier de la mise en cache, de sorte que c'est pourquoi il est généralement préféré.

0
répondu Nick Berardi 2008-12-02 17:13:18

Vous pouvez Essayer ce

$this->uri->segment('');
0
répondu Inspire Shahin 2014-09-30 15:47:30

encore plus facile:

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

ce plugin est assez cool.

0
répondu devpro 2016-01-12 19:07:10