概要
URL の末尾に付く ?name=太郎&age=20 の部分を クエリ文字列 と呼ぶ。Web で最もよく使われる「ブラウザからサーバーへ値を渡す方法」で、PHP では $_GET 連想配列 から取り出せる。$_GET['name'] で '太郎'、$_GET['age'] で '20' というシンプルな関係。
ここで必ずぶつかるのが キーが無かったときの Warning。?name=太郎 しか無いのに $_GET['age'] を読むと未定義キーで警告が出る。これを防ぐのが null 合体演算子 ?? で、$_GET['age'] ?? '不明' と書けば「無ければ '不明'」になる。Web で値を受け取る全場面で使うイディオム。
採点ランナーは CLI なので、$_GET を stdin から parse_str で組み立てるスタブ が冒頭に入っている。parse_str('name=太郎&age=20', $_GET) の 1 行で文字列を配列に展開する関数。php -S で動かすときはブラウザの URL に ?name=... を付けるだけで $_GET に勝手に入ってくる。
学習目標
- URL の
?key=value&key2=value2を$_GET連想配列で受け取れる $_GET['key'] ?? 'default'で 欠落に強い コードを書ける- 採点用に stdin から query string を
parse_strで$_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 を開く。