【PHP】スーパーグローバル変数$_GET, $_POST

## $_GETとは

$_GETとは、**PHPの定義済み変数のひとつ**で、HTTP GETメソッドで送信され、URLパラメーターとして送られてきた値を取得する変数であり、連想配列で使用します。

つまり、**HTMLのフォームからGETリクエストされた値を取得したい場合に$_GETを使用します**。

## $_POSTとは

$_POSTとは、**PHPの定義済み変数のひとつ**で、HTTP POSTメソッドで送信された値を取得する変数であり、連想配列で使用します。

つまり、**HTMLのフォームからPOSTリクエストされた値を取得したい場合に$_POSTを使用します**。

## GETとPOSTの違い

大きな違いは、サーバーへの**リクエストパラメーターの送り方**が違います。

※リクエストパラメータとは、PCからサーバーに送るデータのことです。
  例) Webページに移動する際のページ情報
      ログイン画面のユーザー情報
      注文画面の個人情報

> 画面表示のために必要なパラメーター画面表示のために必要なパラメーターは「GET」 
> GET = データを取得する
> 例）表示したい商品や動画のID、ページ番号など

> ユーザーが画面に入力して送信するパラメーターは「POST」
> POST = データを送信する
> 例）ログインIDや個人情報など

## サンプル

**$_GET['key名']**

+ `<form>`タグを利用して HTTP GETメソッドを取得する。method="GET"とする。
  **`<form>`タグ内のname属性をキー値に設定**することで取得できる。
  

```php:test.html
<form action="get.php" method="GET">
   名前: <input type="text" name="name">
   ユーザ番号: <input type="number" name="number">
   <input type="submit" value="GET送信">
</form>
```

```php:get.php
<?php

if (isset($_GET['name']) && isset($_GET['number'])) {
   echo '名前とユーザー番号が入力されました。';
   echo '名前 : '.$_GET['name'];''
   echo 'ユーザー番号 : '.$_GET['number'];
}
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/23e8e6f9-00a7-e8aa-474a-14b75e19cbe4.png
">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/e09be2ca-f852-cd44-d759-3c959a8fd2ca.png
">

+  `<a>`タグを利用して HTTP GETメソッドを取得する。送信する値は`urlencode()`関数でエンコードしてないといけない。urlに直接クエリ文字列を書き込ムことで取得できる。

```php:test.html
// date, page をキー値に設定
<a href="get.php?date=<?php echo urlencode(time()) ?>&page=3">get.phpに遷移します</a>
```

```php:get.php
<?php

echo '現在日付 : '.date("Y/m/d", $_GET['date']).'<br>';
echo 'ページ番号 : '.$_GET['page'];
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/b1332098-e8e9-5823-e7e2-a229ea744092.png
">


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/83d839e5-991f-4e17-d34d-6b15dbc6aa42.png
">
<br>

**$_POST['key名']**

+ `<form>`タグを利用して HTTP POSTメソッドを取得する。method="POST"とする。
  **`<form>`タグ内のname属性をキー値に設定**することでデータを送信できる。

```test.html
  <form action="post.php" method="POST">
      ユーザー名 : <input type="text" name="username"><br>
      ユーザー番号 : <input type="number" name="usernumber"><br>
      メールアドレス : <input type="text" name="mail"><br>
      住所 : <input type="text" name="adress"><br>
      性別 : <input type="radio" name="gender" value="man">男
      <input type="radio" name="gender" value="woman">女<br>
      <input type="submit" value="送信">
    </form>
```

```php:post.php
   echo 'ユーザー名 : '.$_POST['username'];
   echo 'ユーザー番号 : '.$_POST['usernumber'];
   echo 'メールアドレス : '.$_POST['mail'];
   echo '住所 : '.$_POST['adress'];
if ($_POST['gender'] == 'man') {
   $gender = '男';
} else {
   $gender = '女';
}
   echo '性別 : '. $gender;
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/03373a57-952f-a749-00e8-4dad771a4b82.png
">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/495d4c83-ab31-6f8b-1cf7-d21769c9ce57.png
">

## 参考 

+ [PHP公式リファレンス $_GET](https://www.php.net/manual/ja/reserved.variables.get.php)
+ [PHP公式リファレンス $_POST](https://www.php.net/manual/ja/reserved.variables.post.php)
+ [PHP $_GET（ゲット変数）のすべて！【初心者向け基本】](https://wepicks.net/phpref-get/)
+ [PHP $_POST(ポスト変数)のすべて！【初心者向け基本】](https://wepicks.net/phpref-post/)
+ [GET／POSTの違い＆実際の使い分け方](https://blog.senseshare.jp/get-post-method.html)

<br>
著者: E.R (株式会社ウィズツーワン)