PHP $_REQUEST
1. PHP $_REQUEST の概要
$_REQUEST スーパーグローバルには、送信されたフォームデータ、URLクエリ文字列、および HTTP クッキー(Cookie)のデータが含まれます。
換言すれば、$_REQUEST スーパーグローバルは、$_GET、$_POST、および $_COOKIE スーパーグローバルのデータを保持する配列です。
PHP のスーパーグローバルは組み込みの変数であり、すべてのスコープで常にアクセス可能です。
データの取得は、$_REQUEST キーワードに続けて、フォームフィールド名、クエリパラメータ名、またはクッキー名を指定して行います。
注意:$_REQUEST は異なるソース(GET、POST、および COOKIE)からのデータを統合するため、慎重に扱わないとセキュリティ上の脆弱性を招く可能性があります。そのため、$_REQUEST を使用するのは便利ではありますが、可能な限り、より具体的な $_GET、$_POST、$_COOKIE スーパーグローバルを使用することが推奨されます。
2. POST リクエストでの $_REQUEST の利用
ここでは、$_REQUEST スーパーグローバルを使用して、POST リクエスト経由で送信されたデータにアクセスする方法を確認します。
POST リクエストは通常、HTML フォームから送信されるデータです。
HTML フォームでは、method 属性を "post" に設定し、name 属性を持つ入力フィールドを含める必要があります。この name 属性が、PHP スクリプト内でデータにアクセスするための「キー」として使用されます。
以下は、HTML フォームの構成例です:
HTML ファイル:
<html>
<body>
<form method="post" action="demo_request.php">
名前: <input type="text" name="fname">
<input type="submit" value="送信">
</form>
</body>
</html>ユーザーが送信ボタンをクリックすると、フォームデータは <form> タグの action 属性で指定された PHP ファイルに送られます。
PHP ファイル内では、$_REQUEST 変数を使用して入力フィールドの値を取得できます。
PHP ファイル:
<?php
$name = htmlspecialchars($_REQUEST['fname']);
echo $name;
?> 注意: XSS(クロスサイトスクリプティング)攻撃などのセキュリティ脆弱性を防ぐため、$_REQUEST のようなスーパーグローバルから取得したデータを使用する前には、必ずバリデート(検証)とサニタイズ(無害化)を行ってください。上記の例で使用している htmlspecialchars() 関数はその一例です。より堅牢なフィルタリングを行うには、PHP のフィルタ関数(filter functions)を使用することをお勧めします。
2.1 同一ファイル内での処理例
以下の例では、HTML フォームと PHP コードを同じ PHP ファイル内に配置しています。
実行例:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
名前: <input type="text" name="fname">
<input type="submit" value="送信">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// $_REQUEST を使用して 'fname' フィールドの値を取得
$name = htmlspecialchars($_REQUEST['fname']);
if (empty($name)) {
echo "名前が入力されていません。";
} else {
echo "こんにちは、" . $name . " さん。";
}
}
?>
</body>
</html>3. GET リクエストでの $_REQUEST の利用
GET リクエストは、前述の例のように <form> 要素の method 属性を "get" に設定したフォーム送信によって発生します。
また、GET リクエストは URL クエリ文字列(URL アドレスに追加された情報)からのデータである場合もあります。
以下は、URL クエリパラメータを含む HTML リンクの例です。
URL クエリパラメータ付きの HTML リンク:
<html>
<body>
<a href="demo_phpfile.php?subject=PHP&web=Volardev.com">テスト $GET</a>
</body>
</html>ユーザーがこのリンクをクリックすると、クエリ文字列のデータが demo_phpfile.php に送信されます。
PHP ファイル内では、$_REQUEST 変数を使用してクエリ文字列の値を取得できます。
実行例(demo_phpfile.php):
<html>
<body>
<?php
// 本来は $_REQUEST['subject'] でも取得可能ですが、
// GET リクエストであることを明示する場合は $_GET を推奨します。
$subject = htmlspecialchars($_REQUEST['subject']);
$web = htmlspecialchars($_REQUEST['web']);
echo "$web で $subject を学習しましょう。";
?>
</body>
</html>