【PHP】$_REQUESTでフォームの送信データやURLのクエリパラメータ、Cookieの値をまとめて取得【基本と応用例】
- $_REQUESTとは?
- $_REQUESTの仕組み
- GET・POST・COOKIEとの違い
- フォームデータの受け取り
- URLパラメータの取得
- Cookieの取得
- $_REQUESTを使う際のセキュリティリスク
- $_REQUESTの適切な使い方
$_REQUESTとは?
PHPの `$_REQUEST` は、スーパーグローバル変数の1つで、フォームの送信データやURLのクエリパラメータ、Cookieの値をまとめて取得できる便利な変数です。
$_REQUESTの仕組み
`$_REQUEST` は `$_GET`、`$_POST`、`$_COOKIE` の値を統合した配列であり、以下のようにアクセスできます。
<?php echo $_REQUEST["username"]; ?>
このコードは、GETまたはPOSTまたはCOOKIEのいずれかで `username` が送信されていれば取得できます。
GET・POST・COOKIEとの違い
`$_REQUEST` は `$_GET`、`$_POST`、`$_COOKIE` のすべてを含むため、どの送信方法で受け取ったのか明確に区別することができません。
<?php echo $_GET["username"]; // URLパラメータで受け取る echo $_POST["username"]; // フォームのPOSTデータで受け取る echo $_COOKIE["username"]; // Cookieデータで受け取る ?>
フォームデータの受け取り
`$_REQUEST` を使うと、GETでもPOSTでも受け取れるため、統一的にフォーム処理ができます。
<form method="post" action="process.php"> 名前: <input type="text" name="name"> <input type="submit"> </form>
`process.php` でデータを受け取る方法:
<?php echo "入力された名前: " . $_REQUEST["name"]; ?>
URLパラメータの取得
URLのクエリパラメータも `$_REQUEST` で取得できます。
例: example.com/page.php?user=John
<?php echo "ユーザー名: " . $_REQUEST["user"]; ?>
Cookieの取得
Cookieに保存された値も `$_REQUEST` を使って取得可能です。
<?php setcookie("theme", "dark", time() + 3600); echo "選択されたテーマ: " . $_REQUEST["theme"]; ?>
$_REQUESTを使う際のセキュリティリスク
`$_REQUEST` はどこからのデータかを区別しないため、意図しないデータを受け取る可能性があります。
- 意図しないデータの取得
- CSRF(クロスサイトリクエストフォージェリ)攻撃
- SQLインジェクションのリスク
例えば、意図せず `$_COOKIE` の値を `$_POST` と同じものとして処理してしまうと、セキュリティの問題が生じる可能性があります。
$_REQUESTの適切な使い方
安全に使用するためには、明確に `$_GET` や `$_POST` を使用することが推奨されます。
<?php // 明示的に GET か POST かを指定する $name = isset($_POST["name"]) ? $_POST["name"] : ""; echo "入力された名前: " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>
また、`htmlspecialchars()` を使ってエスケープ処理をすることで、XSS攻撃を防ぐことができます。