CodeIgniter の get_numeric_input()
混合get_numeric_input ( string $name [, bool $required = True [, string $source = "GET" [, bool *$xss_clean* = True ]]] )
以下は、GET 変数と POST 変数が存在し、数値であるかどうかを確認するのにうんざりしていたので作成した関数です。
redirect("original_page.php?error=1");
これは、元のページにエラーを渡すために使用できるため、主にエラーまたはステータス メッセージを処理するときに使用されました。元のページではif (isset($error)) { … }
、値に応じてメッセージを表示するだけで済みました。ただし、セキュリティ上の理由から、これらの変数をビューに送信する前にチェックする必要がありました。このプロセスは非常に反復的で退屈なものであることが判明しました。
以下のこの関数は、wwwroot/application/system/core/Input.php
次のように使用します。
例 1:
function index() {
if ($error = $this->input->get_numeric_input('error', True, "GET", True)) {
$data['error'] = $error;
}
}
この例で$_GET['error']
は、 が設定と数値の両方である場合$data['error']
、その値に設定されます。設定されていないか数値でない場合、スクリプトは終了します。
例 2:
function index() {
if ($error = $this->input->get_numeric_input('error', False, "POST", True)) {
$data['error'] = $error;
}
}
この例で$_POST['error']
は、 が設定と数値の両方である場合$data['error']
、その値に設定されます。設定されていないか数値でない場合は、続行され、$data 配列に値は設定されません。
最初の引数は、チェックする変数名です。2 番目の変数は、チェックが必要かどうかを示すブール値です。これを TRUE に設定すると、変数が設定されていない場合、または変数が数値でない場合、エラーが表示され、スクリプトがすぐに終了します。False に設定すると、単純に False が返され、スクリプトは次に進みます。3 番目の変数は POST または GET のいずれかで、関数が $_GET または $_POST 配列で変数を検索するかどうかを決定します。最後に、4 番目の変数は、返されたときに値が XSS_CLEAN になるかどうかを示しました。
注: 2 番目、3 番目、および 4 番目の引数はいずれもオプションであり、デフォルトはそれぞれ True、"GET"、および True です。
コードは次のとおりです。
function get_numeric_input($name, $required = True, $source = "GET", $xss_clean = True) {
if ($source === "GET") {
if ($this->get($name, $xss_clean)) {
if (is_numeric($this->get($name, $xss_clean))) {
return $this->get($name, $xss_clean);
} else {
if ($required) {
show_error("$source variable $name is not numeric!");
log_message('error', "$source variable $name is not numeric!");
return False;
} else {
return False;
}
}
} else {
if ($required) {
show_error("$source variable $name is not set!");
log_message('error', "$source variable $name is not set!");
return False;
} else {
return False;
}
}
} elseif ($source === "POST") {
if ($this->post($name, $xss_clean)) {
if (is_numeric($this->post($name, $xss_clean))) {
return $this->post($name, $xss_clean);
} else {
if ($required) {
show_error("$source variable $name is not numeric!");
log_message('error', "$source variable $name is not numeric!");
return False;
} else {
return False;
}
}
} else {
if ($required) {
show_error("$source variable $name is not set!");
log_message('error', "$source variable $name is not set!");
return False;
} else {
return False;
}
}
}
}