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

1.GET 送信のしくみ
1.1. HTTP メソッドと GET の特徴
項目 | GET | POST |
---|---|---|
送信方法 | URL クエリ文字列に追加 | HTTP ボディに格納 |
最大長 | ブラウザ実装依存(2 kB〜8 kB 程度) | ほぼ制限なし |
ブラウザ履歴 | パラメータ付き URL が残る | 残らない |
主な用途 | 検索・一覧フィルタ | 登録・更新・ファイルアップ |
1.2. フォームタグの基本属性
属性 | 役割 | 例 |
---|---|---|
action | 送信先スクリプト | action="receive_get.php" |
method | メソッド指定 | method="GET" |
name | パラメータ名 | <input name="email"> |
1.3. URL エンコードの流れ
- ブラウザが入力値を UTF-8 → パーセントエンコード
?name=%E9%AB%98%E6%A9%8B&age=20s
のように連結- サーバー側で自動的にデコード→
$_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. フロー解説
<form>
の method="GET" が URL クエリとして送信することを指定。- ブラウザは入力値を
email=...&generation=...
形式でreceive_get.php
へリダイレクト。 - PHP は
$_GET
連想配列を自動生成し、キーにname
属性が、値にユーザー入力が格納される。 - 出力時は
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 を正しく使い分けることで、ユーザー体験とセキュリティを両立できる。