【サクッと解説】PHP $_GETと$_POSTの違いと使い方

目次

1. 本記事のポイント

  • PHPのスーパーグローバル変数 $_GET と $_POST の基本的な違いを解説
  • 利用シーンの設計判断やセキュリティ上の注意点を明示
  • 実行可能なコード例付きで使い方を解説

2. PHPの $_GET と $_POST とは?

PHPでは、HTTPリクエストから受け取ったデータを扱うために、いくつかのスーパーグローバル変数が提供されています。その中でも代表的なものが $_GET$_POST です。

$_GET はURLのクエリ文字列からデータを取得する配列です。ユーザーがブラウザのアドレスバーに入力するか、リンクのパラメータとして渡された値が格納されます。一方、$_POST はフォーム送信などで、リクエストボディに含まれるデータを受け取る配列です。

実務では、ユーザーの操作に応じて情報を渡したり、フォームデータを安全に送信する場面で使われます。設計上、情報の秘匿性や送信サイズ制限なども考慮する必要があります。

3. 詳細解説

GETリクエストで値を取得する例

URLのクエリパラメータを使って値を取得する典型的なパターンです。

PHP
// URL例: http://example.com/index.php?user=tanaka
$user = $_GET['user'];
echo "ユーザー名: $user";
// 出力: ユーザー名: tanaka

GETはURLに値が見えるため、検索条件やページ番号などの非機密データに適します。ブックマーク可能という利点もあります。

POSTリクエストでフォーム送信を受け取る例

フォーム経由で送信されたデータを受け取る方法です。

PHP
// HTMLフォーム(method="post")から送信されたと仮定
$name = $_POST['name'];
echo "こんにちは、$name さん";
// 入力: name=山田 -> 出力: こんにちは、山田 さん

POSTはURLに値が表示されず、送信サイズも大きいため、パスワードや長文データなどに適しています。

GETとPOSTを同時に扱う例

用途に応じてGETとPOSTの両方を使い分けることもあります。

PHP
$mode = $_GET['mode'] ?? 'default';
$id = $_POST['id'] ?? null;
echo "モード: $mode, ID: $id";

?? 演算子を使うことで、存在しないキーによるエラーを防ぎつつ、デフォルト値を設定できます。

GETとPOSTの選定基準

  • クエリパラメータを共有・保存したい → GET
  • 機密性の高いデータやフォーム送信 → POST
  • 冪等性が必要な処理(再読み込みで副作用なし)→ GET
  • データ変更を伴う処理(登録・更新など)→ POST

HTTPの設計思想としても、GETは「取得」、POSTは「送信・変更」を前提としています。

4. よくあるミス・誤解・落とし穴

  • GETでパスワードを送信:URLにパラメータが露出するため、セキュリティ的に重大な問題になります
  • キーの存在チェックを怠る:未定義キーにアクセスすると警告が出るため、isset()?? での対処が必要です
  • フォームのmethod指定ミス:HTMLフォームの method 属性がGETになっていると、POSTデータが送られません
  • POSTサイズ制限の未確認post_max_sizeupload_max_filesize を超えると空の配列が返される場合があります

PHPの設定やWebサーバーの制限も踏まえて、用途に応じた安全な使い方が求められます。

5. まとめ

PHPの $_GET$_POST は、HTTPリクエストに含まれるデータを扱う基本的な手段です。

GETはURLパラメータを通じて非機密な情報を、POSTはフォーム送信などで機密性のあるデータを扱う用途に適しています。それぞれの特性を理解し、目的に応じて使い分けることが、セキュアで意図通りの実装につながります。

よかったらシェアしてね!
  • URLをコピーしました!
目次