はじめに
実務にて、HTML の form 要素から送信した入力値を PHP で取得する楽な方法を教えてくださいという質問があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。
検証環境
サンプル
解説
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>
以上です。
おわりに
サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。