ch05 — HTML form を組み立てて受け取る
スライドで見るこの章を AI と学ぶ
演習問題の詳細
この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。
ドリル 01 — 登録フォームの HTML を出力する
問題
次の HTML を そっくりそのまま 出力する PHP を書いてください。
<form action="/register" method="post">
<input type="text" name="name">
<input type="email" name="email">
<button type="submit">送信</button>
</form>
各タグは 1 行ずつ echo すること (改行の入れ方も期待値に合わせる)。
このドリルでは標準入力は使いません。
期待される出力:
<form action="/register" method="post">
<input type="text" name="name">
<input type="email" name="email">
<button type="submit">送信</button>
</form>
ヒント
echo "<form action=\"/register\" method=\"post\">\n";
echo "<input type=\"text\" name=\"name\">\n";
// ...シングルクォート文字列を使えばエスケープが要らない:
echo '<form action="/register" method="post">' . "\n";🧪 ブラウザで試す
スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。
ドリル 02 — フォーム送信を受け取って結果を出力
問題
フォームから POST された name と email を受け取り、次の形式で出力する PHP を書いてください。
<p>登録しました: {name} ({email})</p>
{name} と {email} は htmlspecialchars でエスケープしてから 埋め込むこと (XSS 対策の練習)。
採点ランナーは CLI 直実行なので、冒頭で stdin の 1 行を parse_str で $_POST に展開 するスタブを置いてください。
このドリルの入力例:
name=太郎&email=taro@example.com
期待される出力:
<p>登録しました: 太郎 (taro@example.com)</p>
ヒント
$name = htmlspecialchars($_POST['name'] ?? '', ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_POST['email'] ?? '', ENT_QUOTES, 'UTF-8');
echo "<p>登録しました: {$name} ({$email})</p>\n";普通の文字 (太郎 / taro@example.com) は htmlspecialchars でも変化しないので、期待値はそのまま表示される。
試しに name=<script> を渡すと <script> にエスケープされて、ブラウザでもタグとして解釈されない安全な状態になることを php -r で確認しても良い。
本物の Web で確認したい場合
cd topics/web/ch05-html-form/drill/02-process-form/
php -S localhost:8000 answer.php
別ターミナルで:
curl -X POST -d "name=太郎&email=taro@example.com" http://localhost:8000/ 🧪 ブラウザで試す
スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。
演習問題(2問)
サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。
完了にすると進捗に反映されます