PHP でフォームデータを簡単に受け取る方法

はじめに

実務にて、HTML の form 要素から送信した入力値を PHP で取得する楽な方法を教えてくださいという質問があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。

検証環境

サンプル

  • GitHub

解説

PHP で、送信された <form> 要素のデータにアクセスするには スーパーグローバル$_GET$_POST を使います。

<form> 要素の method 属性が未指定、又は get の場合は、下記のように $_GET で取得できます。

<?php
$test = $_GET['test'] ?? '';

var_dump($test); // string(9) "テスト"
?>

<form>
  <p>
    テスト:<input type="text" name="test" value="テスト">
  </p>
  <button>送信する</button>
</form>

$_GET の右側にある ??null 合体演算子(Null Coalescing Operator)といって、PHP 7.0 の 新機能 として導入された三項演算子と isset の糖衣構文(シンタックスシュガー)です。

この演算子は、左辺の第 1 オペランドの値が null でない場合は、第 1 オペランドの値を返します。第 1 オペランドの値が null の場合は、右辺の第 2 オペランドの値を返します。

下記 2 つのコードは同じ意味です。

$test = $_GET['test'] ?? '';
if (isset($_GET['test'])) {
  $test = $_GET['test'];
} else {
  $test = '';
}

つまり、$_GET が null だったら空文字を代入するということですね。

前述したコードから null 合体演算子を削除して $_GET が存在しない場合の対策を怠ると、下記のように警告(warning)が発生します。

<?php
$test = $_GET['test'];

var_dump($test); // Warning: Undefined array key "test"
?>

<form>
  <p>
    テスト:<input type="text" name="test" value="テスト">
  </p>
  <button>送信する</button>
</form>

また、null 合体演算子は未定義の配列要素を指定しても、Notice: Undefined index が発生しないのでエラー回避に便利です。

<form> 要素の method 属性が post の場合は、下記のように $_POST で取得できます。

<?php
$test = $_POST['test'] ?? '';

var_dump($test); // string(9) "テスト"
?>

<form method="post">
  <p>
    POST メソッド:<input type="text" name="test" value="テスト">
  </p>
  <input type="submit" value="送信する">
</form>

以上です。

おわりに

サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。