PHP-値を受け取る場合に$_GETや$_POSTではなくfilter_inputを使用する

記事の要約

PHPで値を受け取る場合に $_GET や $_POST ではなく filter_input を使用する方法です。
対象となる要素を特定するために input の name に sample を設定しています。


PHP

<?php

// 対象となる要素 <input type="text" name="sample" />
$sample = filter_input( INPUT_GET, "aaa" ); // $_GET[sample]
$sample = filter_input( INPUT_POST, "bbb" ); // $_POST[sample]

filter_input を使用をおすすめする理由

filter_input を使用することをおすすめする理由は下記のとおりです。

  • パラメータである sample が存在しなかった場合に Notice(警告) が発生するため
  • $_GET や $_POST のようなスーパーグローバル変数はスクリプト内で改ざんされる場合もあるため、

直接アクセスするよりラッパー関数を経由して間接的にアクセスした方が安全なため

filter_input を使用しない場合の例($_POST)

<?php

// 対象となる要素 <input type="text" name="sample" />
if (!isset($_POST[sample])) {
	$sample = null;
} elseif (!is_string($_POST[sample])) {
	$sample = false;
} else {
	$sample = $_POST[sample];
}

php.net

(PHP 5 >= 5.2.0, PHP 7)
filter_input — 指定した名前の変数を外部から受け取り、オプションでそれをフィルタリングする

filter_input

スーパーグローバル — すべてのスコープで使用できる組み込みの変数

スーパーグローバル