CodeIgniterはデフォルトでGETパラメーターをオフにすることを知っています。
しかし、すべてをPOSTで行うことで、フォームの送信後にデータを再度押しても、データの再送信要求に悩まされませんか?
それは私を困らせますが、この理由で純粋にGETを許可したいかどうかはわかりません。
GETパラメーターも許可することは、非常に大きなセキュリティ上の問題ですか?
CodeIgniterを初めて使い始めたとき、GETを使用しなかったので、本当に気が散りました。しかし、組み込みの RI Class を使用してURIを操作することで、GETパラメーターをシミュレートできることに気付きました。それは素晴らしいですし、それはあなたのURLが良く見えるようにします。
または、GETが本当に機能する必要がある場合は、これをコントローラーに入れることができます。
parse_str($_SERVER['QUERY_STRING'], $_GET);
これにより、変数がGET配列に戻されます。
これは私のために働いた:
<?php
$url = parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'], $params);
?>
$params
配列には、?の後に渡されるパラメーターが含まれます。キャラクター
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;
この関数はpost関数と同じですが、取得データを取得するだけです:
$this->input->get()
Config.phpで有効にするだけで、$this->input->get('param_name');
を使用してパラメーターを取得できます。
parse_str($_SERVER['QUERY_STRING'],$_GET);
は、applications/config/config.phpに次の行を追加した後にのみ機能しました。
$config['uri_protocol'] = "PATH_INFO";
CIでは$ _GET paramsは本当に必要ないことがわかりましたが、Facebookや他のサイトはGET paramsをリンクの最後にダンプします。これはCIサイトで404になります!! config.phpに上記の行を追加することで、これらのページは機能しました。これが人々の役に立つことを願っています!
( http://www.maheshchari.com/work-to-get-method-on-codeigniter/ から)
本当に主張する場合は、クエリ文字列を有効にできます。 config.phpでクエリ文字列を有効にできます:
$config['enable_query_strings'] = TRUE;
詳細については、このWikiページの下部をご覧ください。 http://codeigniter.com/user_guide/general/urls.html
それでも、きれいなURLで作業することを学ぶことは、より良い提案です。
「フォームの送信後に押し戻されたとしても、データの再送信リクエストに悩まされないでください」
フォーム送信を処理するページから成功ページへのリダイレクトを行うことで、これを回避できます。最後の「アクション」は、フォーム送信ではなく成功ページの読み込みでした。つまり、ユーザーがF5キーを押すと、そのページが再読み込みされ、フォームは再度送信されません。
最初のパラメーターが必要な場合は、それを使用します。
$this->uri->segment('3');
そして、あなたの必要な2番目のパラメータはそれを使用します
$this->uri->segment('4');
多くのパラメーターでパラメーターを強化する
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 */
少し話題から外れていますが、コントローラー間でいくつかの変数を渡し、Flashdataに出くわすためだけに、CodeIgniterのget関数を探していました。
参照: http://codeigniter.com/user_guide/libraries/sessions.html
Flashdataを使用すると、次のサーバーリクエストでのみ使用できるクイックセッションデータを作成し、自動的にクリアできます。
私のパラメータは?uid = 4であり、それを取得します:
$this->uid = $this->input->get('uid', TRUE);
echo $this->uid;
知恵
これを以下で行います。私のために働いた。選択ボックスと別のテキストボックスから値を取得しました。次に、ボタンをクリックして、JavaScript関数でデータ全体を取得し、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;
}
});
});
上記のコードは私のために働いた。
GETパラメーターは、Webブラウザーによってキャッシュされます。POSTはそうではありません。したがって、POST通常は好まれます。
これを試すことができます
$this->uri->segment('');