LoginSignup
1
0

More than 1 year has passed since last update.

[php] filter_input って便利

Last updated at Posted at 2022-04-12

filter_input 使ってみた

PHP5系で書かれたコードってPHP8にすると結構、変数の未定義や値が空って事でエラー出ちゃいますよね。

こんな時、isset の様なチェックをしてくれて、更にバリデーションも行ってくれる filter_input は超便利。

今回、PHP5.6で動いてたツールのコードを PHP8で動く様にして欲しいと頼まれました。

まぁ何年も前に書かれた様で、こんな感じ↓

$flg = $_GET["flg"];
$status = (!isset($flg) && $flg == '') ? 0 : $flg;

if ($status !== 0) {
    何かの処理;
}

当然、PHP8になると $_GET["flg"] が空だと、そんなキーはない!と怒られますよね。

Warning: Undefined array key "flg" in Your Path

エラー回避する為には、$_GET["flg"] に値が入ってるか isset したり、値のチェックしたりと少々面倒。

あと、

  • $_GET["flg"] にどんな値が入るか明確でない。
  • バリデーションもしていない。
  • $status が 0 以外に処理とか曖昧すぎ。

など、この5行だけでも改善点がありあり。

filter_input 使いましょ

確認したところ、$_GET["flg"] は 0 か 1 しか送られてこない事が分かったので、

$range  = ['min_range' => 0, 'max_range' => 1, 'default' => 0];
$status = filter_input(INPUT_GET, 'flg', FILTER_VALIDATE_INT, ['options' => $range]);

if ($status === 1) {
    何かの処理;
}

これで解決!

[説明]

  • filter_input :

  HTTP通信のGETやPOSTで送信されたデータを検証したり、処理するための関数です。

filter_input について

  • FILTER_VALIDATE_INT :

  検証フィルタ。値が整数であるかどうか検証します。

その他の検証フィルタ

  • オプション min_range, max_range, default :

  オプションを設定する事で、取得する値の範囲と初期値が設定出来ます。


今回の場合、GETデータで送られて来た flg は 0 か 1 が送られてくる、というのが分かります。
それ以外の数値は初期値の 0 が返されます。

また、それ以外に英字や日本語など数値以外のものが送られてきても初期値の 0 を返します。

わざわざ、is_int とか is_numeric とか 0 or 1 みたいなチェックしなくてもいいですね。

まとめ

他に用意されている 検証フィルタ では、ドメインかどうか、Emailかどうか、IPアドレスかどうか、などの検証も可能です。

filter_input 積極的に使っていきましょー。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0