PHPのGET送信とは?URLで値を渡し詳細ページを作成する方法

ブログやECサイトで記事や商品の一覧から一つをクリックすると、そのアイテム専用の詳細ページに移動します。このとき、Webアプリケーションはどのようにして「どのアイテムの詳細ページを表示すべきか」を判断しているのでしょうか。

その鍵を握るのが、URLを使ってデータをPHPスクリプトに渡す「GET送信」という仕組みです。

この記事では、GET送信の基本である「クエリ文字列」を理解し、PHPの$_GETを使って値を受け取り、動的な詳細ページを作成する準備をする方法を解説します。


目次

1. URLでデータを渡す仕組み「クエリ文字列」

GET送信では、URLの末尾に「クエリ文字列(Query String)」と呼ばれる特別な形式のテキストを追加して、データを送ります。

URLの構造: http://example.com/detail.php?id=5

このURLは、detail.phpというファイルに対して、「idという名前(キー)で5という値(バリュー)を渡します」という意味になります。

  • ? (クエスチョンマーク): URLのパス部分とクエリ文字列を区切る記号です。
  • id=5 (キーと値のペア): キー=値の形式でデータを指定します。
  • & (アンパサンド): 複数のデータを渡したい場合に、ペアとペアの間を&で繋ぎます。(例: detail.php?id=5&page=1

この方法は、主にページの内容を特定するための情報(商品ID、記事IDなど)を渡すのに使われます。URLにデータが表示されるため、パスワードなどの機密情報を送るのには適していません。


2. 一覧ページから詳細ページへのリンクを作成する

GET送信は、一覧表示ページで各項目に詳細ページへのリンクを設置する際によく利用されます。データベースから取得した各レコードのユニークなIDをURLに含めることで、リンク先を動的に生成します。

list.phpforeachループ内のサンプルコード:

<tbody>
    <?php foreach ($reviews as $review): ?>
        <tr>
            <td>
                <a href="detail.php?id=<?php echo htmlspecialchars($review['id'], ENT_QUOTES, 'UTF-8'); ?>">
                    <?php echo htmlspecialchars($review['book_title'], ENT_QUOTES, 'UTF-8'); ?>
                </a>
            </td>
            <td><?php echo htmlspecialchars($review['rating'], ENT_QUOTES, 'UTF-8'); ?></td>
        </tr>
    <?php endforeach; ?>
</tbody>

このコードでは、reviewsテーブルの各レコードのidhref属性の中に埋め込んでいます。もしid1のレコードならリンクはdetail.php?id=1に、id2ならdetail.php?id=2というように、レコードごとに異なるリンクが自動的に生成されます。


3. PHPでURLの値を受け取る$_GET

リンク先のPHPファイル(この例ではdetail.php)では、URL経由で渡されたデータを$_GETという特別な変数を使って受け取ります。

$_GETは、PHPが自動的に用意してくれる連想配列で、クエリ文字列のキーがそのまま配列のキーになります。

detail.phpの基本的なコード:

<?php
// $_GET の中身をデバッグ目的で確認したい場合
// print_r($_GET);

// URLから'id'というキーで渡された値を取得
$id = $_GET['id'];

echo "あなたがクリックしたレビューのIDは、「" . htmlspecialchars($id, ENT_QUOTES, 'UTF-8') . "」です。";

// この後、このIDを使ってデータベースを検索し、詳細情報を取得する処理に続く
?>

http://example.com/detail.php?id=5というURLにアクセスすると、$_GET['id']の中には5という値が格納されています。


【重要】GETパラメータのバリデーション

$_GETで受け取る値は、URLを直接書き換えることで誰でも簡単に変更できてしまいます。そのため、$_GETから受け取った値は絶対に信用せず、必ずチェック(バリデーション)を行う必要があります。

例えば、idとして数字を期待しているのに、?id=abcのように不正な値を渡されると、データベース検索時にエラーが発生する可能性があります。

安全な値の受け取り方:

<?php
// 1. 'id'がURLに含まれているか、空でないかを確認
if (!isset($_GET['id']) || $_GET['id'] === '') {
    echo "IDが指定されていません。";
    exit(); // 処理を中断
}

// 2. 'id'が本当に数字であるかを確認
if (!ctype_digit($_GET['id'])) {
    echo "IDは半角数字で指定してください。";
    exit(); // 処理を中断
}

// バリデーションを通過した、安全なID
$id = (int)$_GET['id']; // 念のため整数型に変換

echo "ID: " . $id . " のレビュー詳細を表示します。";
// この$idを使ってデータベースを検索する
?>

このように、「①存在チェック」と「②形式チェック」を行うことで、予期せぬエラーやセキュリティリスクを大幅に減らすことができます。

まとめ

  • URLの?以降にキー=値の形式でデータを付加し、PHPに値を渡す方法をGET送信という。
  • 一覧ページの各項目から詳細ページへリンクする際に、レコードのIDをGETで渡すのが一般的な手法。
  • PHP側では、**$_GET**という連想配列でURLのデータを受け取る。
  • $_GETで受け取った値は、必ずバリデーションを行ってから利用する

この仕組みをマスターすれば、特定の情報だけを動的に表示する「詳細ページ」を自由に作成できるようになり、Webアプリケーション開発の幅が大きく広がります。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次