【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攻撃を防ぐことができます。