---
# System prepended metadata

title: GETとPOST
tags: [ready for review]

---

###### tags: `ready for review`

# GETとPOST
私たちはよく「Webサイトへアクセスする」といいますが、よく見てみるとアクセスの目的がいろいろあります。
- Webサイトから情報を取得する（単なるページの参照、検索など）
- Webサイトへ情報を送る（会員登録、注文登録など）

それらのアクセスは、ある決め事にもとづいて通信が行われます。
その決め事をプロトコル（通信規約）といいます。ブラウザとユーザ間で利用するプロトコルはHTTPです。
HTTPには、アクセスする種類に応じてHTTPメソッドが決められています。
本章ではHTTPメソッド、その中でもGETやPOST、そしてPHPでの実装の仕方を学習します。
このGETやPOSTのことをHTTPメソッドと言います。
それでは早速、HTTPメソッドを用いたプログラムを記述していきましょう！

GitHubからクローンした`request_lesson`フォルダの中にあるindex.phpに以下のコードを記述してください。
```htmlmixed=
<form>
  <input type="text" name="name">
  <input type="password" name="password">
  <button>送信</button>
</form>
```
inputタグを使用するとサイト利用者が文字を入力できるテキストボックスが生成されます。

inputタグやtextareaタグをformタグで囲い、
送信ボタンを押すことで入力した内容を送信することできます。
name属性は入力された文字のキーとして送信されます。
例えば、`name="name"`のテキストボックスに`Mike`、`name="password"`のテキストボックスに`Hello PHP`と入力して送信ボタンを押します。
![inputタグとname属性](https://i.imgur.com/tEtbk8J.png)

すると、送信されてきた値はPHPの連想配列になっています。
```php=
[
  "name" => "Mike",
  "password" => "Hello PHP"
]
```
name属性は入力した内容を送信した後に識別するためにある、というイメージができればOKです。

次に、送信ボタンを押したらresult.phpに遷移するように設定していきます
formタグを利用して遷移させるにはaction属性を利用します。
今回はGETでリクエストしたいのでformタグにリクエストの指定も記述します。
```htmlmixed=
<form action="result.php" method="GET">
  <input type="text" name="name">
  <input type="password" name="password">
  <button>送信</button>
</form>
```
何も記述していない状態ですと遷移したことがわかりづらいので、result.phpに以下の内容を記述しましょう。
```htmlmixed=
<h1>
遷移完了
</h1>
```

左のテキストボックスに`Mike`、右のテキストボックスに`123456789`を入力し、送信ボタンを押してresult.phpの`遷移完了`が表示されるか確認してみてください。

:::info
送信ボタンを押してもうまくいかない場合は、action属性で指定したファイル名が合っていない可能性があります。
:::

`遷移完了`が表示されたらURLを確認してみてください。
末尾が`?name=Mike&passowrd=123456789`になっているかと思います。
![クエリ](https://i.imgur.com/jlt8cgr.png)

このように、formタグをGETでリクエストすると入力した内容が丸見えになります。
ただしこれはデメリットではありません。
検索機能を作成するときはformタグをGETでリクエストすることがよくあります。



それでは、result.phpに送られてきたデータを取得し、表示してみましょう。
result.phpを以下のように編集してください。
```htmlembedded=
<div>
  名前 : <?php echo $_GET["name"] ?>
</div>
<div>
  パスワード: <?php echo $_GET["password"] ?>
</div>
```
GETでリクエストされたときに送られてきたデータを取得するには`$_GET`を使用します。
$_GETの後に付いている[]の中にはname属性を文字列で記述します。

もう一度、テキストボックスに文字を入力して送信すると、result.phpで値を受け取り、表示できたかと思います。

今度はPOSTでリクエストするようにしてみます。
index.phpのメソッド部分のみ変更してください。
```htmlmixed=
<form action="result.php" method="POST">
  <input type="text" name="name">
  <input type="password" name="password">
  <button>送信</button>
</form>
```

POSTでリクエストした際に送られてきた値を取得するには`$_POST`を使用します。

result.phpを以下のように編集してください。
```htmlembedded=
<div>
  名前 : <?php echo $_POST["name"] ?>
</div>
<div>
  パスワード: <?php echo $_POST["password"] ?>
</div>
```

ここまでできたら先ほどと同様にテキストボックスに入力して送信してみましょう。

すると、今度はGETの時とは異なり、入力した内容がURLの末尾に含まれていません。
![クエリ](https://i.imgur.com/ZTTbARM.png)

このようにGETとPOSTには明確な違いがあります。

Webサイトから情報を取得するときは`GET`、Webサイトへ情報を送るときは`POST`を利用するので覚えておきましょう。


