【サクッと解説】PHP HTMLフォームからのPOSTデータ受け取り方法

目次

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対策などの補助処理が不可欠です。単純な変数取得に見えても、セキュリティを意識した設計が求められます。

よかったらシェアしてね!
  • URLをコピーしました!
目次