GETパラメータの使い方について

同じページを表示させたいけれど、違うカテゴリでController内の処理を使い分けたい時がありました。

例えばViewはこんな感じです。

HTML
<ul class="list-disc">
    <li><a href="fruit.php" class="text-blue-500">りんご</a></li>
    <li><a href="fruit.php" class="text-blue-500">みかん</a></li>
    <li><a href="fruit.php" class="text-blue-500">バナナ</a></li>
</ul>

そんな時はGETパラメータを使って処理を記述していくのがベストということに気が付きました。

目次

Viewで「GETパラメータ」を記述する

HTML
<ul class="list-disc">
    <li><a href="fruit.php?type=ringo" class="text-blue-500">りんご</a></li>
    <li><a href="fruit.php?type=mikan" class="text-blue-500">みかん</a></li>
    <li><a href="fruit.php?type=banana" class="text-blue-500">バナナ</a></li>
</ul>

上記で言うと、fruit.phpの後に「?type=〇〇」と付いていますね。

phpの後に「?」を付けるとGETパラメータとして受け取ることが出来るようです。

もし、複数のGETパラメータを受け取りたい場合は下記のようにパラメータ間に「&」を付ければ送信されました。

HTML
<ul class="list-disc">
    <li><a href="fruit.php?type=ringo&color=red" class="text-blue-500">りんご</a></li>
    <li><a href="fruit.php?type=mikan&color=orange" class="text-blue-500">みかん</a></li>
    <li><a href="fruit.php?type=banana&color=yellow" class="text-blue-500">バナナ</a></li>
</ul>

ControllerでGETパラメータを受け取る

先ほど「?type=〇〇」で受け取ったGETパラメータは $_GET_「’type’」; と書きます。

この $_GET[‘type’] の中身がクリックされた<a>タグに応じて、 ringo、mikan、banana が入っています。

その受け取ったGETパラメータをパラメータ別に処理を書いてViewを表示させます。

PHP
public function fruit()
{
  $type = $_GET['type'];

  switch ($type) {
      case 'ringo':
          ...
          break;
      case 'mikan':
          ...
          break;
      case 'banana':
          ...
          break;
      default:
          ...
  }
  require __DIR__ . '/../Views/fruit.php';
}

また、GETパラメータが空の場合、下記のように書くこともできるようです。

PHP
// パラメータが空の場合、「ringo」を変数に入れる
$type = $_GET['type'] ?? 'ringo';

URL直打ち対策

URLを直打ちされてしまった時等、GETパラメータが予期しないものが入力されてしまった場合等のために対策を行うことにしました。

その前にURL直打ちってどういうことって言ったら<a>タグをクリックせずに、

下記のようなURLを直接書いてアクセスしてしまうことです。

上記でいうと &type=suika の部分です。

suika はControllerの処理に書いていないよ!という事態が発生することも考えられます。

という感じで、勝手に許可していないGETパラメータをURLから指定してアクセスされるのを阻止する処理を書きます。

許可するGETパラメータを配列として持たせて、受け取ったGETパラメータがその配列内にあるかどうかを確かめるために

in_array()関数を使ってチェックします。

PHP
  $allowedTypes = ['ringo', 'mikan', 'banana'];  // 許可するGETパラメータの配列
  
  $type = $_GET['type'] ?? 'ringo';
  
  // 不正な type が来た場合
  if (!in_array($type, $allowedTypes, true)) {
    $type = 'ringo';  // デフォルトに戻す
  }

デフォルトに戻すのではなく、元のページにリダイレクトしてしまうのも1つの手です。

(個人的にはこれが一番好き)

PHP
  // 不正な type が来た場合
  if (!in_array($type, $allowedTypes, true)) {
    header('Location: /index.php');
    exit;
  }

不正なURLとしてはじいてしまいたい場合は404としてしまうこともアリです。

PHP
  if (!in_array($type, $allowedTypes, true)) {
    http_response_code(404);
    require __DIR__ . '/../Views/errors/404.php';
    exit;
  }

今回のまとめ

今回はGETパラメータについて調べました。

<a href=”×××.php?〇〇=△△“>×××</a>

の下線を引いた部分がGETパラメータとしてControllerに送信される。

△△は $_GET[‘〇〇’]; から取り出すことが出来る

URL直打ち対策は、許可するGETパラメータを配列に入れて、in_array()関数で比較する

参考になれば嬉しいです!

  • URLをコピーしました!
目次