PHP

PHP フォームやURLのパラメータから値を取得する$_GETの使い方

2016/11/14

フォームやURLのパラメータから値を取得する「$_GET」の使い方を見ていきます。

HTMLのフォーム

下記のようなシンプルなフォームを作成します。

<form action="" method="get">
  <p><input type="text" name="first_name"></p>
  <p><input type="text" name="last_name"></p>
  <p><input type="submit" value="送信"></p>
</form>

「action」には送信先のファイルを指定します。今回は空にして自分自身にしています。
「method」を get とすることで送信先のファイルで $_GET を使用して値を受け取ることができます。

$_GETで受け取る

送信された値は$_GETに配列で入ってきます。キーはinputのname属性の値です。
下記のように表示することができます。(下記のままではセキュリティ的に良くないので気をつけて下さい)

<?php
echo $_GET["first_name"];
echo $_GET["last_name"];
?>

URLを確認してみると、inputに入力した値が「example.php?first_name=値&last_name=値」のように表示されていると思います。formタグのmethod属性をgetにして送信すると、URLにパラメータとして表示され、それを$_GETで受け取ることができます。

実はURLにパラメータが表示されていればフォームで送信しなくても$_GETで受け取ることができます。
下記のようなリンクを作成するとフォームで送信された時と同じく$_GETで受け取ることができます。

<a href="example.php?first_name=値&last_name=値">リンク</a>

通常フォームで値を送信する場合は、POSTを使用すると思いますので$_GETを使用する場合は上記のようにリンクを使用することが多いでしょう。

簡単な例

ページ遷移に使うことも多いので、簡単な例を作成してみました。

<?php

$totalPage = 10;
if (
  isset($_GET["page"]) &&
  $_GET["page"] > 0 &&
  $_GET["page"] <= $totalPage
) {
  $page = (int)$_GET["page"];
} else {
  $page = 1;
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>サンプル</title>
</head>
<body>
  <p>現在 <?php echo $page; ?> ページ目です。</p>

  <p>
    <?php if ($page > 1) : ?>
      <a href="?page=<?php echo ($page - 1); ?>">前のページへ</a>
    <?php endif; ?>
    <?php if ($page < $totalPage) : ?>
      <a href="?page=<?php echo ($page + 1); ?>">次のページへ</a>
    <?php endif; ?>
  </p>

</body>
</html>

» 実行結果

上限を10ページに設定して、ページ遷移を行う例です。
URLのパラペータの変化を確認してください。

最後に・・・

同じようにフォームで送信した値を受け取る「$_POST」については「フォームから値を取得する$_POSTの使い方」をご覧ください。

また、上のページ遷移の例では「(int)$_GET["page"]」として受け取った値を数値にキャスト(変換)しているので不要でしたが、文字列を表示する際は必ずエスケープ処理を行う必要があります。エスケープについては「エスケープ処理のためのhtmlspecialcharsの使い方」の記事をご覧ください。

もう少し実用的なページングを「PHP $_GETを使用してページング(ページネーション・ページ送り)を作ってみる」の記事で紹介していますので、こちらもご覧ください。

-PHP