# GETとPOSTのデータ送信

## クライアントからサーバーへのデータ送信

ここまでは、サーバー上にコンテンツを置いて、それをウェブブラウザで取得する方法を見てきた。しかし、逆にウェブブラウザからサーバーへデータを送る必要がある場合もある。

ログインページを考えてみよう。ユーザー名とパスワードを入力すると、そのデータをサーバーに送信しなければならない。サーバーはデータベースを確認して、ユーザー名とパスワードが一致すればブラウザにログインを認識させる。

ウェブ開発では、クライアントからサーバーへデータを送る方法が2つある。GETとPOSTだ

### GET

GETは短い文字列や値を送るときに使う。GETの値をクライアントからサーバーへ渡すには、以下のようにURLの末尾に書く。

`http://www.mywebsite.co.jp/mypage.php<strong><span style="color: rgb(35, 111, 161);">?</span><span style="color: rgb(186, 55, 42);">変数A=値A</span><span style="color: rgb(35, 111, 161);">;</span><span style="color: rgb(22, 145, 121);">変数B=値B</span></strong> ...`

URLの末尾に「**<span style="color: rgb(35, 111, 161);">?</span>**」を付けて、その後がGETの値であることを示す。そして、各値のペアを「**<span style="color: rgb(35, 111, 161);">;</span>**」（セミコロン）で区切って渡す。

例えば、Googleで「大原学園」を検索したいとする。Googleにアクセスして検索語を入力してもいいが、単純に次のようにすることもできる

`https://www.google.com/search?<span style="color: rgb(186, 55, 42);"><strong>q=大原学園</strong></span>`

ここでは、「q」（query、つまり検索）という1つの値として「大原学園」をGoogleに渡している。

PHPでは、$\_GETという特別なグローバル連想配列を通してGETパラメータを取得できる。以下の演習をやってみよう。

```php
<?php
	// get_example.phpで保存してください
    
	// "name"のパラメータが設定されている？
	if (!isset($_GET["name"]))
	{	
		print("お名前を教えてください");
	}
      
	else
	{
		$name = $_GET["name"];
		print("こんにちは、" . $name . "さん。");
	}
?>
```

ここでisset()は、そのGET変数が存在するかどうかをチェックしている。では、ブラウザを開いて次を試してみてください。

`http://localhost/get_example.php?name=一郎`

![image.png](https://class.illogic.games/uploads/images/gallery/2026-09/scaled-1680-/xE6image.png)

見ての通り、変数「name」が正しく読み込まれて表示されている。今度はURLに2つ目のパラメータ「age」（年齢）を追加してみよう。

```php
<?php
	// get_example.phpで保存してください
    
	// "name"のパラメータが設定されている？年齢も？
	if (!isset($_GET["name"]) || !isset($_GET["age"]))
	{	
		print("お名前と年齢を教えてください");
	}
	
	else
	{
		$name = $_GET["name"];
		print("こんにちは、" . $name . "さん。");
		
		$beerOk = $_GET["age"] >= 20;
		if ($beerOk)
			print("ビールはいかがでしょうか？");
		else
			print("コーラを飲みませんか？");
	}
?>
```

そして次を試してみてください。

`http://localhost/get_example.php?name=一郎&age=19`

![image.png](https://class.illogic.games/uploads/images/gallery/2026-09/scaled-1680-/zBVimage.png)

ちょっとした遊びとして、今度はパラメータを何も渡さずに試してみよう。

`http://localhost/get_example.php`

どうなるか見てみてください。

### POST

POSTもブラウザにデータを送るもう一つの方法だ。画像やテキストファイルのような、文字列ではない情報を送るときによく使われる（例えば、Instagramの投稿に画像を添付するとき、それはPOSTで送信されている）。POSTは小さなパラメータを送るのにも使われるが、URLには表示されないので、ユーザーが直接それを編集できないという特徴がある。

POSTのデータはURLに表示されないため、サーバーへデータを送るには特別な方法が必要になる。ブラウザがPOSTでサーバーへデータを送れるように「HTMLフォーム」を作る必要がある。まずは、先ほどの例と同じ2つのパラメータを持つ、シンプルなHTMLフォームを作ってみよう。

```html
<!-- post_form.html として保存してください -->
<meta charset="utf-8">
<form action="get_example.php" method="get">
	<input type="text" name="name" value="一郎">
	<input type="text" name="age" value="19">
	<input type="submit">
</form>
```

これはフォームのごくシンプルな例だ。1行ずつ見ていこう。

<table border="1" id="bkmrk-%3Cmeta-charset%3D%22utf-8" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>コード</td><td>説明</td></tr><tr><td>```html
<meta charset="utf-8">
```

</td><td>文字コードを設定している。漢字やかなを使うためUTF-8を使用している</td></tr><tr><td>```html
<form action="get_example.php" method="get">
```

</td><td>フォームの開始。フォームが送信されると、値はGETモードで`get_example.php` に送られる</td></tr><tr><td>```html
<input type="text" name="name" value="一郎">
<input type="text" name="age" value="19">
```

</td><td>`get_example.php`へ2つのテキスト変数（「name」と「age」）を送る。

デフォルト値は「一郎」と「19」

</td></tr><tr><td>```html
<input type="submit">
```

</td><td>送信ボタンを表示する。このボタンを押すと値が `get_example.php` に送られる

</td></tr><tr><td>```html
</form>
```

</td><td>フォームの終了

</td></tr></tbody></table>

ブラウザで `http://localhost/post_form.html` を開いて、送信ボタンを押してみてください。

![image.png](https://class.illogic.games/uploads/images/gallery/2026-09/scaled-1680-/teQimage.png)

見ての通り、これは同じパラメータをURL経由（GETモード）で渡しているだけだ。今度はこれをPOSTに切り替えてみよう。まず、フォームの中の

```html
<form action="get_example.php" method="get">
```

を

```html
<form action="post_example.php" method="post">
```

に置き換えてください。

次にPHPスクリプトを編集して、`$_GET` の代わりに `$_POST` から読み込むようにする必要がある。`get_example.php` をコピーして `post_example.php` という名前に変更し、次のようにしよう。

```php
<?php
	// post_example.phpで保存してください
    
	// "name"のパラメータが設定されている？年齢も？
	if (!isset($_POST["name"]) || !isset($_POST["age"]))
	{	
		print("お名前と年齢を教えてください");
	}
	
	else
	{
		$name = $_POST["name"];
		print("こんにちは、" . $name . "さん。");
		
		$beerOk = $_POST["age"] >= 20;
		if ($beerOk)
			print("ビールはいかがでしょうか？");
		else
			print("コーラを飲みませんか？");
	}
?>
```

そしたらフォームを再読み込みして、もう一度試してみてください。見ての通り、今度はURLにパラメータが表示されていない。

[![image.png](https://class.illogic.games/uploads/images/gallery/2026-09/scaled-1680-/YPhimage.png)](https://class.illogic.games/uploads/images/gallery/2026-09/YPhimage.png)

## ブラウザだけじゃない！

ここまではブラウザを使ってサーバーへデータを送るテストをしてきた。これはとてもよくある使い方だけど、それだけではない。どんなアプリケーションでも、GETとPOSTを使ってウェブサーバーにデータを送ることができる。Unityの授業では、`UnityWebRequest` クラスを使って自分のUnityゲームからPHPサーバーへデータを送る方法を後で学ぶ。