PHP | HTMLのフォームから送信する値を配列、多次元配列として送受信する方法

2023-10-12PHP フォーム,PHP

PHP | HTMLのフォームから送信する値を配列、多次元配列として送受信する方法

HTMLのフォームから送信する値を配列としてPHPに送信、受信する方法の紹介です。

フォームからのデータ送信(HTML)と受信(PHP)

フォームは以下の様に、名前や本文などの情報毎に「name」属性をPHPに送信した際の変数名と合わせて記述することも多いですが、送信する情報量が増えてくると各々、PHP側で $_GET または $_POST を指定していく処理の記述も増えていってしまいます。

※ PHP8から $_GET や $_POST でのパラメータ受け取りについて未定義エラーが発生するようになりましたので、対応した内容に修正しています。

<form action="" method="POST">
	<p><input type="text" name="name" size="25" value=""></p>
	<textarea name="text" cols="100" rows="5"></textarea></p>
	<p><input type="submit" value="送信"></p>
</form>
$data['name'] = filter_input(INPUT_POST, 'name');
$data['text'] = filter_input(INPUT_POST, 'text');

配列として送信(HTML)、受信(PHP)する方法

HTML側の「name」属性は、配列式に記述することが可能なので、[]で囲った中に配列のキー名を記述しておくことでひとつの変数名で複数のデータを送信することができます。

サンプルではdata[キー名]としていますので、PHP側では $_POST['data’] をひとつ記述するだけで複数のフォームデータを一括で受け取る事が可能になります。

注意点として、HTMLでのキー名はクォーテーションで囲わずに記述するという部分です。

※ PHP8から $_GET や $_POST でのパラメータ受け取りについて未定義エラーが発生するようになりましたので、対応した内容に修正しています。

<form action="" method="POST">
	<p><input type="text" name="data[name]" size="25" value=""></p>
	<textarea name="data[text]" cols="100" rows="5"></textarea></p>
	<p><input type="submit" value="送信"></p>
</form>
$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

連番、多次元配列として送信(HTML)、受信(PHP)する

また、HTML側のキー名を空にすることで、ひとつの「name」属性で複数の値を送信することも可能です。
例えばタグや趣味など複数の入力を求めるフォームの場合などに有効です。

以下サンプルの様に多次元配列として、データを送信することも可能となっています。

<form action="" method="POST">
	<p><input type="text" name="data[name]" size="25" value=""></p>
	<p><input type="text" name="data[tag][]" size="25" value=""></p>
	<p><input type="text" name="data[tag][]" size="25" value=""></p>
	<p><input type="text" name="data[tag][]" size="25" value=""></p>
	<textarea name="data[text]" cols="100" rows="5"></textarea></p>
	<p><input type="submit" value="送信"></p>
</form>
$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

PHP フォーム,PHP

Posted by Yousuke.U