【6日でできるPHP入門】GETとPOSTの違い
フォーム送信で最初に押さえておきたいのが GET と POST の使い分け です。どちらもブラウザからサーバーへデータを届ける手段ですが、データの送信場所・容量・安全性などが異なります。ここでは「いつ GET を選ぶか」「なぜ POST が推奨されるのか」を比較しながら、PHP での受け取り方法やバリデーションの実装例までを掘り下げて解説します。

1.HTTP メソッドの違いを俯瞰する
1.1. GET と POST の比較表
観点 | GET | POST |
---|---|---|
送信方法 | URL クエリに付与 | HTTP ボディに格納 |
最大サイズ* | 2–8 kB 程度 (ブラウザ依存) | 理論上無制限 (設定値まで) |
キャッシュ・履歴 | 残る | 残らない |
ブックマーク共有 | 可能 | 不可 |
セキュリティ | URL 露出あり | URL 露出なし |
PHP 配列 | $_GET | $_POST |
*Apache + Chrome の組み合わせで 2083 文字が事実上の上限と言われる。
1.2. 代表的な用途
- GET:: 検索パラメータ・ページネーション・絞り込み
- POST : 会員登録・ログイン・ファイルアップロード・大量テキスト送信
2.フォーム送信サンプルで体験する
2.1. GET 版 ― search.html
& result_get.php
ファイル名: search.html
<!-- search.html -->
<html lang="ja">
<head><meta charset="UTF-8"><title>検索フォーム (GET)</title></head>
<body>
<h1>検索フォーム</h1>
<form method="GET" action="result_get.php">
<input type="search" name="q" placeholder="キーワード">
<input type="submit" value="検索">
</form>
</body>
</html>
ファイル名: result_get.php
<!-- result_get.php -->
<?php
$q = htmlspecialchars($_GET['q'] ?? '');
echo "検索語:{$q}";
?>
実行手順
1.URLに「http://localhost/search.html」を入力します。
「お問い合わせフォーム」が表示されます。

2.次のように入力して「検索」ボタンをクリックします。
ここでは
テキストボックスに「PHP」と入力

3.URLを確認します。

URLが以下のようになっていることを確認します。
http://localhost/result_get.php?q=PHP
2.2. POST 版 ― login.html
& result_post.php
ファイル名: login.html
<!-- login.html -->
<html lang="ja">
<head><meta charset="UTF-8"><title>ログインフォーム (POST)</title></head>
<body>
<h1>ログインフォーム</h1>
<form method="POST" action="result_post.php">
<input type="text" name="user" placeholder="ユーザー名"><br>
<input type="password" name="pass" placeholder="パスワード"><br>
<input type="submit" value="ログイン">
</form>
</body>
</html>
ファイル名: result_post.php
<!-- result_post.php -->
<?php
function h($s){ return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); }
if (isset($_POST['user'], $_POST['pass'])) {
echo 'ユーザー名:'.h($_POST['user']).'<br>';
echo 'パスワード:'.str_repeat('●', strlen($_POST['pass']));
} else {
echo 'フォームからアクセスしてください。';
}
実行手順
1.URLに「http://localhost/login.html」を入力します。
「ログインフォーム」が表示されます。

2.次のように入力して「ログイン」ボタンをクリックします。
ここでは
ユーサー名に「PHP」
パスワードに「password」と入力

3.URLを確認します。

URLが以下のようになっていることを確認します。
http://localhost/result_post.php
URL は result_post.php
のみ。パラメータは露出しない。
2.3. 流れを確認
- ブラウザが
<form>
を解析し method を決定。 - GET → エンコード後クエリ文字列に連結。
POST → ボディ部へペイロードを格納。 - PHP は自動的に
$_GET
/$_POST
配列を生成。 - 受信値は
htmlspecialchars()
などで必ずサニタイズして出力。
3.実務での選択基準
3.1. GET を選ぶシナリオ
- 検索結果を URL として共有したい。
- RSS のページ番号、並び替えパラメータ
- デバッグ時にクエリを直接入力したい。
3.2. POST を選ぶシナリオ
- パスワードや個人情報を送る。
- 長文コメントや JSON データを送る。
- ファイルアップロード (
enctype="multipart/form-data"
) - CSRF トークンを含めたい場合(Cookie 同期型対策)
4.関連 PHP 関数とテクニック
関数/構文 | 目的 | 例 |
---|---|---|
isset() | 値が送られたか判定 | if (isset($_POST['token'])) { … } |
empty() | 空文字・0 ・null 判定 | if (empty($_GET['page'])) |
htmlspecialchars() | XSS 防止エスケープ | echo htmlspecialchars($str); |
filter_input() | フィルタ & サニタイズ | filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) |
preg_match() | 正規表現チェック | 郵便番号や電話番号バリデーション |
まとめ
- GET は軽量・再現性重視、POST は秘匿性・容量重視。
- 送信後の受け取りは
$_GET
/$_POST
― 違いはスーパーグローバル名のみ。 - いずれの場合も サニタイズとバリデーションは必須。
- 適切に使い分けることで、ユーザー体験・セキュリティ・パフォーマンスのバランスが取れる。