GETメソッドでのデータ受け取りに続き、HTTPのPOSTメソッドでもデータを受け取っていきます。POSTでは、HTTP通信のボディ部にデータが存在するため、URLにはデータは含まれません。

PHPでのPOSTデータの受け取り

1年以内に更新されました。
更新日 : 2019年03月18日

GETメソッドでのデータ受け取りに続き、HTTPのPOSTメソッドでもデータを受け取っていきます。POSTでは、HTTP通信のボディ部にデータが存在するため、URLにはデータは含まれません。

PHPでのPOSTデータの受け取り

フォームの作成

まずはPOSTデータを送る側のHTMLを作成していきましょう。これは単純なHTMLのみで作成可能です。

formタグの利用についてはHTMLのformタグを参照してください。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>POSTデータ送信テスト</title>
</head>
<body>
	<form action="/PHP/tax-included-price.php" method="POST">
		<ul>
			<li><label>単価:<input type="number" name="unit_price"></label></li>
			<li><label>個数:<input type="number" name="quantity"></label></li>
		</ul>
		<label><button type="submit">税込み価格を計算する</button></label>
	</form>
</body>
</html>

FormタグでPOSTメソッドを指定、送信先は/PHP/tax-included-price.phpとなっています。

formタグの中も確認していきましょう。

  • ulタグはUnordered listの略です。つまり順序なしリストを定義するHTMLです。
  • liタグはList Itemの略です。ulタグ内のリストを羅列するために使用するHTMLタグです。
  • inputタグで記入するエリアを作成します。type属性にnumberを指定することで数字を記入する欄を作成できます。type属性には様々なものがあります。
  • labelタグでinputタグを囲っています。inputなどの入力欄のラベルとして機能します。inputタグを囲うことで、「単価:」や「個数:」の部分をクリックしても、inputにフォーカスされます。
  • 最後にbuttonタグです。type属性をsubmitにすることで送信ボタンを作成できます。

Form内の入力欄で一番重要なのは、inputタグにあるname属性です。name属性に任意で指定した名前が、そのフォームの名前(キー名)として送信されます。この名前を利用してPHPでそれぞれ取得していくことになります。

フォームデータの受け取り

上記のHTMLではフォームデータは/PHP/tax-included-price.phpに送信されます。ではこのPHPを作成して、フォームデータを受け取り、税込価格を表示してみましょう。

<?php

$unit_price = 0;
$quantity = 0;
if(is_numeric($_POST["unit_price"])) {
	$unit_price = $_POST["unit_price"];
}
if(is_numeric($_POST["quantity"])) {
	$quantity = $_POST["quantity"];
}

$total_price = floor($unit_price * $quantity * 1.08);

echo "合計金額は税込みで{$total_price}円です。";

今回はis_numericという関数を使用しています。これは引数に与えられたデータが数字または数値形式の文字列かどうかを判定してくれます。厳密にはこれだけだと正しくありませんが(小数点もOK、マイナスなどもOKになってしまう)、今回は細かいことは気にしません。

また、floor関数では、小数点以下の数字を切り捨てて整数にしてくれます。

切り捨てて計算した税込価格を表示しているだけです。

今回のメインであるPOSTデータの受け取りは、$_POSTです。$_GETと似てますね。

HTMLのname属性に指定した名前がキー名として配列で$_POSTに自動的に入ってきます。あとは入力値のチェックなどを行い、データを扱うことができます。

まとめ

HTTPのPOSTデータの受け取りについて学びました。ポイントは以下の2点です。

  • $_POSTを利用することでPOSTデータを受け取ることができる
  • HTMLのname属性が$_POSTの連想配列のキー名として格納されている

実際にはPOSTデータは偽装や異なるデータを送ることが可能なため、入力値のチェックはもう少し厳密に行わなければ行けません。入力値チェックに関しては改めて記事にしたいと思います。


タグ