【6日でできるPHP入門】GETによるフォームの通信

 ユーザーがフォームに入力した値をサーバーへ送る方法は大きく GET と POST の 2 種類があります。ここでは GET メソッド を中心に、URL へパラメータを付与してデータを送受信する仕組みと PHP での受け取り方を、動くサンプルコードを用いながら解説します。ブラウザにどのようなリクエストが送られ、サーバー側で $_GET 配列にどのように値が格納されるかをステップごとに確認しましょう。

1.GET 送信のしくみ

1.1. HTTP メソッドと GET の特徴

項目GETPOST
送信方法URL クエリ文字列に追加HTTP ボディに格納
最大長ブラウザ実装依存(2 kB〜8 kB 程度)ほぼ制限なし
ブラウザ履歴パラメータ付き URL が残る残らない
主な用途検索・一覧フィルタ登録・更新・ファイルアップ

1.2. フォームタグの基本属性

属性役割
action送信先スクリプトaction="receive_get.php"
methodメソッド指定method="GET"
nameパラメータ名<input name="email">

1.3. URL エンコードの流れ

  1. ブラウザが入力値を UTF-8 → パーセントエンコード
  2. ?name=%E9%AB%98%E6%A9%8B&age=20s のように連結
  3. サーバー側で自動的にデコード→ $_GET へ展開

2.サンプル実装で学ぶ

2.1. フォームページ ― form_get.html

ファイル名: form_get.html

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>GET 送信デモ</title></head>
<body>
<h1>お問い合わせフォーム (GET)</h1>

<form method="GET" action="receive_get.php">
  <p><label>メールアドレス
      <input type="email" name="email" placeholder="example@example.com">
  </label></p>

  <p><b>年代</b><br>
    <label><input type="radio" name="generation" value="10代">10代</label>
    <label><input type="radio" name="generation" value="20代" checked>20代</label>
    <label><input type="radio" name="generation" value="30代">30代</label>
  </p>

  <input type="submit" value="確認する">
</form>
</body>
</html>

2.2. 受信スクリプト ― receive_get.php

ファイル名: receive_get.php

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>入力内容の確認</title></head>
<body>
<h1>送信データの確認</h1>
<table border="1" cellpadding="6">
  <tr><th>メールアドレス</th><td><?= htmlspecialchars($_GET['email'] ?? '') ?></td></tr>
  <tr><th>年代</th><td><?= htmlspecialchars($_GET['generation'] ?? '') ?></td></tr>
</table>
<p><a href="form_get.html">フォームに戻る</a></p>
</body>
</html>
プログラムの意味
<?= htmlspecialchars($_GET['email'] ?? '') ?>

この一行は、URLのクエリパラメータ(email)で受け取った値を安全にHTML表示するためのものです。

各部分の説明

部分説明
<?= ... ?><?php echo ... ?> の省略形。
「値をHTMLに直接出力する」ための短縮記法です。
$_GET['email']URLのクエリパラメータで渡された email の値。
?? ''「Null合体演算子」
もし$_GET['email']が未定義(null)の場合、空文字''を使うという意味です。
htmlspecialchars(...)特殊文字(<, >, &, ", ' など)をHTMLエスケープします。
これによりXSS(クロスサイトスクリプティング)対策になります。

2.3. フロー解説

  1. <form>method="GET" が URL クエリとして送信することを指定。
  2. ブラウザは入力値を email=...&generation=... 形式で receive_get.php へリダイレクト。
  3. PHP は $_GET 連想配列を自動生成し、キーに name 属性が、値にユーザー入力が格納される。
  4. 出力時は htmlspecialchars() で XSS を防ぎつつ表示。

2.4. 実行手順

1.URLに「http://localhost/form_get.html」を入力します

「お問い合わせフォーム」が表示されます。

2.メールアドレスを入力し、年代を選択して「確認する」ボタンをクリックします。

ここでは
メールアドレスに「taro@example.com」
年代に「20代」を選択します。

3.実行例 URLを確認します。

http://localhost/receive_get.php?email=taro%40example.com&generation=20%E4%BB%A3

表示結果

3.GET と POST を選択する指針

3.1. GET を使うべきケース

  • 検索キーワードや一覧ページングなど “副作用のない” リクエスト
  • ブックマーク・共有したいクエリ
  • 軽量データ (数 kB 以下)

3.2. POST を選ぶケース

  • 会員登録・ログインなど 状態を変更 する操作
  • パスワード・ファイルアップロードなど 機密データ を送信
  • 文字数が多いフォーム

まとめ

  • GET 送信 は URL にパラメータを付与するため、ブラウザ履歴やブックマークで再利用しやすい反面、機密情報送信には不向き。
  • PHP では $_GET['キー名'] で即座に値を取得できる。表示時は htmlspecialchars() を忘れずに。
  • GET と POST を正しく使い分けることで、ユーザー体験とセキュリティを両立できる。