目次
1. 本記事のポイント
- PHPでHTMLフォームから送信されたPOSTデータを安全に受け取る方法を解説
- $_POSTの基本仕様と使い方、バリデーションの必要性に触れる
- フォーム送信処理の典型的な実装パターンを紹介
2. PHPでHTMLフォームからのPOSTデータを受け取るとは?
PHPでは、HTMLのform要素から送信されたPOSTリクエストを、$_POST
というスーパーグローバル変数を使って受け取ることができます。これは、HTTPメソッドとしてPOST
を指定したフォームから送られてくるデータを格納する連想配列です。
典型的には、ユーザーがフォームに入力した値(例:名前やメールアドレスなど)をサーバーサイドで処理するために使用されます。
実務では、データベースへの登録、バリデーションやCSRF対策、ファイルアップロードといった処理の入り口として使われる重要な機能です。単純な変数取得に見えますが、セキュリティや意図しない挙動を防ぐための配慮が欠かせません。
3. 詳細解説
最も基本的なPOSTデータの受け取り
フォームから送信された名前とメールアドレスを受け取り、画面に出力する簡単な例です。
HTML
<!-- form.html -->
<form action="submit.php" method="post">
<input type="text" name="username">
<input type="email" name="email">
<input type="submit" value="送信">
</form>
PHP
// submit.php
// フォームから送られたPOSTデータを受け取る
$username = $_POST['username'];
$email = $_POST['email'];
// 簡易的に画面出力(実務ではXSS対策が必要)
echo "名前: " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . "<br>";
echo "メール: " . htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
存在チェックと空判定を加えるパターン
POSTされたキーが存在しない場合のエラーを防ぎます。実務では必須の対策です。
PHP
// POSTキーが存在するかを確認
if (isset($_POST['username']) && isset($_POST['email'])) {
$username = trim($_POST['username']);
$email = trim($_POST['email']);
if ($username === '' || $email === '') {
echo "入力値が不足しています。";
} else {
echo "名前: " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . "<br>";
echo "メール: " . htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
}
} else {
echo "フォームデータが送信されていません。";
}
CSRFトークンによるPOST正当性の検証
実務環境では、フォーム送信が意図した操作かどうかを検証する必要があります。
PHP
// フォーム埋め込み(例)
session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;
HTML
<form method="post" action="submit.php">
<input type="hidden" name="token" value="<?= htmlspecialchars($token) ?>">
<input type="text" name="username">
<input type="submit">
</form>
PHP
// submit.php
session_start();
if (!isset($_POST['token'], $_SESSION['token']) || $_POST['token'] !== $_SESSION['token']) {
die('不正なリクエストです');
}
4. よくあるミス・誤解・落とし穴
$_POSTの直接使用によるXSSリスク
HTMLに出力する際にエスケープ処理を行わないと、ユーザーが悪意のあるスクリプトを埋め込むことができます。必ずhtmlspecialchars()
を使用してください。
未定義キー参照によるWarning
$_POST['key']
で未定義のキーを参照すると、PHP Warningが発生します。isset()
による事前確認が有効です。
method=”get”と”post”の混同
formタグのmethod属性が”get”になっていると、$_POST
ではデータを取得できません。受け取る側との整合性に注意しましょう。
5. まとめ
PHPでは、HTMLフォームからのPOSTデータを$_POST
変数で受け取ります。実務で使用するには、バリデーション、エスケープ、CSRF対策などの補助処理が不可欠です。単純な変数取得に見えても、セキュリティを意識した設計が求められます。