概要

GET が「URL に値が乗る通信」だったのに対し、POST はリクエスト本文 (Body) に値が乗る通信<form method="post"> で送信ボタンを押すと、ブラウザは値を URL ではなく Body に詰めてサーバーに送る。PHP では $_POST 連想配列 から取り出す。使い方は $_GET とほぼ同じ。

使い分けの基準はシンプルに 取得 → GET / 送信・更新 → POST。検索結果のように何度開いても結果が変わらないものは GET、ログインやコメント投稿のように「サーバーに記録させる」操作は POST、と分けるのが Web の作法。GET は履歴やブックマークに URL ごと残るので、パスワード送信に GET を使うのは事故のもと。

POST の Body のフォーマットは application/x-www-form-urlencoded (普通のテキストフォーム) と multipart/form-data (ファイル添付があるとき) の 2 種類。普段のフォームは前者で、Body に key=value&key=value の文字列が乗っているだけ。後者はファイルアップロードを扱う file-io/ch06 で再登場する。

学習目標

ドリル

no 内容
01 message=Hello を受け取り "受信: Hello" を出力
02 name=太郎&email=taro@example.com を受け取り "登録: 太郎 / taro@example.com" を出力

本物の Web で確認したい場合

POST はブラウザのアドレスバーから送れないので、フォーム送信か curl を使う:

cd topics/web/ch04-post-params/drill/01-post-message/
php -S localhost:8000 answer.php

別ターミナルで:

curl -X POST -d "message=Hello" http://localhost:8000/

演習: ドリル 01 — `$_POST['message']` を受信して表示

問題

$_POST['message'] を受け取り、"受信: {message}" を 1 行出力する PHP を書いてください。

採点ランナーは CLI 直実行なので、冒頭で stdin の 1 行を parse_str$_POST に展開 するスタブを置いてください。

このドリルの入力例:

message=Hello

期待される出力:

受信: Hello

ヒント

$query = trim(fgets(STDIN) ?: '');
parse_str($query, $_POST);
$msg = $_POST['message'] ?? '';
echo "受信: {$msg}\n";

演習: ドリル 02 — `$_POST` で複数フィールド (登録フォームの受け口)

問題

$_POST['name']$_POST['email'] を受け取り、"登録: {name} / {email}" を 1 行出力する PHP を書いてください。

採点ランナーは CLI 直実行なので、冒頭で stdin の 1 行を parse_str$_POST に展開 するスタブを置いてください。

このドリルの入力例:

name=太郎&email=taro@example.com

期待される出力:

登録: 太郎 / taro@example.com

ヒント

$name  = $_POST['name']  ?? '';
$email = $_POST['email'] ?? '';
echo "登録: {$name} / {$email}\n";

@ などの記号も parse_str がよしなに扱ってくれる (URL エンコードされていれば自動でデコード)。

この章を AI に聞く

  1. 「ch04 — `$_POST` でフォームデータを受け取る」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch04 — `$_POST` でフォームデータを受け取る」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch04 — `$_POST` でフォームデータを受け取る」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch04 — `$_POST` でフォームデータを受け取る」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE