0Pricing
PHP Academy · レッスン

GETとPOST:使い分け

PHPにおけるHTTP GETとPOSTの違いを理解します

「GETとPOST:使い分け」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

Web PHPにおけるHTTPメソッド

ブラウザーがHTMLフォームを送信するときは、GETまたはPOSTのHTTPメソッドを使用します。PHPでは、送信されたデータをスーパーグローバルから取得します:

  • $_GET — URLに追加されたデータ
  • $_POST — リクエストボディ内のデータ

GETメソッド

GETは、フォームデータをクエリ文字列のパラメーターとしてURLに追加します:

<!-- HTML form -->
<form method="GET" action="search.php">
    <input name="query" type="text">
    <button type="submit">Search</button>
</form>

<!-- URL becomes: search.php?query=php+tutorial -->

<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);

POSTメソッド

POSTはデータをHTTPリクエストボディで送信します。URLには表示されません:

<!-- HTML form -->
<form method="POST" action="login.php">
    <input name="email" type="email">
    <input name="password" type="password">
    <button type="submit">Log In</button>
</form>

<?php
$email    = $_POST['email']    ?? '';
$password = $_POST['password'] ?? '';

GETを使用する場面

次の場合はGETを使用します:

  • リクエストがべき等である(副作用がない)
  • 検索クエリ、フィルター、ページネーションなど、データをURLに含められる
  • ブックマークや共有が可能なURLにしたい
  • データが機密情報ではない

POSTを使用する場面

次の場合はPOSTを使用します:

  • リクエストによってサーバーの状態が変更される(作成、更新、削除)
  • パスワードや個人情報など、データが機密情報である
  • ファイルや長いテキストなど、大量のデータを送信する
  • ブラウザーやプロキシにデータをキャッシュさせたくない

GETの長さの制限

GETリクエストにはURLの長さ制限があります(実際には通常約2000文字です)。POSTには、サーバー設定を除けば実用上の制限はありません:

<?php
// php.ini settings for POST limits:
// post_max_size = 8M   (total POST body size)
// upload_max_filesize = 2M

// Check current limits at runtime:
echo ini_get('post_max_size');        // 8M
echo ini_get('upload_max_filesize');  // 2M

$_REQUESTスーパーグローバル

$_REQUESTは$_GET、$_POST、$_COOKIEを統合します。便利ですが、データの取得元が分かりにくくなります:

<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';

// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
    'GET'  => $_GET['name']  ?? '',
    'POST' => $_POST['name'] ?? '',
    default => '',
};

リクエストメソッドの確認

フォームデータを処理する前に、必ずリクエストメソッドを確認します:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    if (!empty($name)) {
        echo 'Hello, ' . htmlspecialchars($name);
    }
} else {
    // Show empty form
}

HTTPSとデータセキュリティ

POSTを使用しても、HTTPSを使用しなければデータは平文で見える状態です。主なセキュリティルールは次のとおりです:

  • 本番環境では必ずHTTPSを使用する
  • GETでパスワードを送信しない
  • HTTP経由のPOSTも安全ではない。HTTPSはボディも暗号化する

POST後のリダイレクト(PRGパターン)

POSTが成功した後、GETリクエストにリダイレクトして、更新時の二重送信を防ぎます:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Process the form...
    $id = saveToDatabase($_POST);
    
    // Post-Redirect-Get (PRG) pattern
    header('Location: /success.php?id=' . $id);
    exit;
}

ファイルアップロード用のマルチパートフォーム

ファイルをアップロードするには、フォームでPOSTとenctype="multipart/form-data"を使用する必要があります:

<!-- Required for file uploads -->
<form method="POST" action="upload.php"
      enctype="multipart/form-data">
    <input type="file" name="avatar">
    <button type="submit">Upload</button>
</form>

<?php
$file = $_FILES['avatar'];
echo $file['name'];  // original filename

確認問題

ユーザー名とパスワードを含むログインフォームを送信するとき、どのHTTPメソッドを使用すべきですか:

まとめ: GETとPOSTの比較

主な違い:

  • GET — URL内、ブックマーク可能、副作用なし、サイズ制限あり
  • POST — ボディ内、機密データに適する、URLの長さ制限なし
  • GETとPOSTの両方のデータを保護するため、必ずHTTPSを使用する
  • 処理する前に$_SERVER['REQUEST_METHOD']を確認する
  • PRGパターンを適用してPOSTの二重送信を防ぐ

よくある質問

「GETとPOST:使い分け」レッスンは無料ですか?

はい。「GETとPOST:使い分け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「GETとPOST:使い分け」で何を学びますか?

PHPにおけるHTTP GETとPOSTの違いを理解します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「GETとPOST:使い分け」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. GETとPOST:使い分け
  2. スーパーグローバルでフォームデータを読み取る
  3. 入力値のバリデーション手法
  4. ユーザー入力のサニタイズ
← PHP Academyに戻る