概要

URL の末尾に付く ?name=太郎&age=20 の部分を クエリ文字列 と呼ぶ。Web で最もよく使われる「ブラウザからサーバーへ値を渡す方法」で、PHP では $_GET 連想配列 から取り出せる。$_GET['name']'太郎'$_GET['age']'20' というシンプルな関係。

ここで必ずぶつかるのが キーが無かったときの Warning?name=太郎 しか無いのに $_GET['age'] を読むと未定義キーで警告が出る。これを防ぐのが null 合体演算子 ?? で、$_GET['age'] ?? '不明' と書けば「無ければ '不明'」になる。Web で値を受け取る全場面で使うイディオム。

採点ランナーは CLI なので、$_GETstdin から parse_str で組み立てるスタブ が冒頭に入っている。parse_str('name=太郎&age=20', $_GET) の 1 行で文字列を配列に展開する関数。php -S で動かすときはブラウザの URL に ?name=... を付けるだけで $_GET に勝手に入ってくる。

学習目標

ドリル

no 内容
01 name=太郎 を受け取り "こんにちは、太郎さん" を出力
02 name=太郎&age=20 を受け取り "太郎 (20歳)" を出力

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

cd topics/web/ch03-get-params/drill/01-get-name/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/?name=太郎 を開く (URL に ?name=... を付けるのを忘れない)。

演習: ドリル 01 — `$_GET['name']` で挨拶

問題

$_GET['name'] を受け取り、"こんにちは、{name}さん" を 1 行出力する PHP を書いてください。

採点ランナーは CLI 直実行なので、answer.php の冒頭で 標準入力の 1 行をクエリ文字列として parse_str$_GET に展開 してください (スタブはコードに含めて構いません)。

このドリルの入力例 (tests/input.txt):

name=太郎

期待される出力:

こんにちは、太郎さん

ヒント

$query = trim(fgets(STDIN) ?: '');
parse_str($query, $_GET);
$name = $_GET['name'] ?? 'guest';
echo "こんにちは、{$name}さん\n";

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

cd topics/web/ch03-get-params/drill/01-get-name/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/?name=太郎 を開く。

演習: ドリル 02 — `$_GET` で複数キーを受け取る

問題

$_GET['name']$_GET['age'] を受け取り、"{name} ({age}歳)" を 1 行出力する PHP を書いてください。

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

このドリルの入力例:

name=太郎&age=20

期待される出力:

太郎 (20歳)

ヒント

$name = $_GET['name'] ?? '名無し';
$age  = $_GET['age']  ?? '?';
echo "{$name} ({$age}歳)\n";

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

cd topics/web/ch03-get-params/drill/02-get-multi/
php -S localhost:8000 answer.php

ブラウザで http://localhost:8000/?name=太郎&age=20 を開く。

この章を AI に聞く

  1. 「ch03 — `$_GET` でクエリ文字列を受け取る」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch03 — `$_GET` でクエリ文字列を受け取る」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch03 — `$_GET` でクエリ文字列を受け取る」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

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

ch03 — `$_GET` でクエリ文字列を受け取る」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE