Garugarion

【PHP】filter_inputの挙動について

phpでプログラミングをしていると、htmlでPOSTしたデータを使うことがよくあると思います。
$_POSTなどのスーパーグローバルな関数を使わずにデータを取得するfilter_inputの挙動と、スーパーグローバル関すを使用しない方がいい理由を記述します。

簡単にPOSTされたデータを取得する方法は

<?php
var_dump($_POST); //POSTされたデータが表示される

ですが、先日知ったのですが、この記述方法は推奨されていないようです。

推奨されていない理由は下記の通り

  • $_POSTや$_GETなどは、スーパーグローバル関数と呼ばれている。
  • これらのスーパーグローバル関数は書き換えが可能。
  • 処理しているプログラミングのなかで、意図せずに書き換えられてしまう場合がある。
    (フレームワークなどを使っている場合など、自分で全ソースを把握してない限り信用できない)

上記理由からHTTPヘッダーからデータを取得して表示する

<?php
filter_input();

を使った方がいいでしょう。

使い方

文字列として取得する場合と配列を取得する場合の2パターンを記述します。

通常の文字列を取得する場合

See the Pen gvoqOg by garugarion (@garugarion) on CodePen.

こんな感じだとdata=>’入力した値’
と言う感じでデータがPOSTされてくるので

<?php
var_dump(filter_input(INPUT_POST, 'data'));

// 結果↓
// '入力した値'

と言う結果になります。

配列を取得する場合

配列を取得するにはオプションで指定する必要があります。

See the Pen LQeavr by garugarion (@garugarion) on CodePen.

こんな感じだとdata=>’arr1’=>’入力した値’
と言う感じでデータがPOSTされてきます。
これを取り出すにはfilter_inputにオプションを指定する必要があります。

<?php
var_dump(filter_input(INPUT_POST,'arr1',FILTER_DEFAULT,FILTER_REQUIRE_ARRAY));

// 結果
// 'data'=>
//  'arr1'=>
//    '入力した値'

となります。

以上filter_inputを使用したデータ取得の方法でした。

コメントのこす

メールアドレスが公開されることはありません。

php