
【6日でできるPHP入門】POSTによるフォームの通信
ファイルのアップロード、ログイン認証、会員登録―これらの処理で送信される情報はユーザーの個人データや機密情報である場合が少なくありません。こうしたデータを URL に露出させず、安全かつ大容量で送る仕組みが HTTP POST メソッドです。ここでは HTML フォームに method="POST"
を指定したときのリクエストフローと、PHP 側での受け取り方をサンプル付きで解説します。

1.POST メソッドの基礎
1.1. GET と POST の比較
項目 | GET | POST |
---|---|---|
データの送信場所 | URL クエリ文字列 | HTTP ボディ |
最大サイズ | ブラウザ依存 (数 kB 程度) | 理論上無制限(設定値まで) |
キャッシュ対象 | される | されにくい |
主な用途 | 検索・一覧フィルタ | フォーム登録・機密データ転送 |
1.2. PHP スーパーグローバル
配列 | 説明 |
---|---|
$_POST | POST ボディのキー=値を連想配列で保持 |
$_GET | クエリ文字列のキー=値を保持 |
$_REQUEST | $_GET + $_POST + $_COOKIE の合成 |
2.実装サンプル
2.1. 送信フォーム ― contact_post.html
ファイル名: contact_post.html
<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>お問い合わせ (POST)</title></head>
<body>
<h1>お問い合わせフォーム</h1>
<form method="POST" action="contact_post.php">
<p><label>お名前<br>
<input type="text" name="username" placeholder="例)山田花子"></label></p>
<p><label>メールアドレス<br>
<input type="email" name="email" required></label></p>
<p><label>お問い合わせ内容<br>
<textarea name="message" rows="4" cols="40"></textarea></label></p>
<input type="submit" value="送信">
</form>
</body>
</html>
2.2. 受信スクリプト ― contact_post.php
ファイル名: contact_post.php
<?php
// サニタイズ関数
function h(string $s): string { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); }
?>
<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>送信内容の確認</title></head>
<body>
<h1>受信結果 (POST)</h1>
<table border="1" cellpadding="6">
<tr><th>お名前</th><td><?= h($_POST['username'] ?? '') ?></td></tr>
<tr><th>メール</th><td><?= h($_POST['email'] ?? '') ?></td></tr>
<tr><th>内容</th><td><?= nl2br(h($_POST['message'] ?? '')) ?></td></tr>
</table>
<p><a href="contact_post.html">フォームへ戻る</a></p>
</body>
</html>
2.3. 実行手順
1.URLに「http://localhost/contact_post.html」を入力します。
「お問い合わせフォーム」が表示されます。

2.次のように入力して「送信」ボタンをクリックします。
ここでは
お名前に「山田花子」
メールアドレスに「hanako@example.com」
お問い合わせ内容に「こんにちは!」を選択します。

3.受信結果 (POST)を確認します。

3.POST を使う理由とベストプラクティス
3.1. 利点
- URL に露出しない → パスワードや長文データに安全
- データ長制限が緩い → ファイルアップロード・JSON 送信に最適
- 検索エンジンのクロール対象外 → 機密ページのパラメータ隠蔽に有利
3.2. 注意点
リスク | 対策 |
---|---|
XSS | htmlspecialchars() で出力エスケープ |
CSRF | ワンタイムトークンをフォームに埋め込む |
迷惑ボット | reCAPTCHA・rate-limit |
まとめ
- POST メソッド は URL を汚さず大容量・機密データを送れるため、登録系フォームやアップロードで標準的に使用。
- PHP では
$_POST['キー名']
で値を参照し、出力前に必ずエスケープする。 - CSRF トークンや入力確認ページを導入すると、セキュリティとユーザー体験の両方が向上する。