GETとPOSTのデータ送信
クライアントからサーバーへのデータ送信
ここまでは、サーバー上にコンテンツを置いて、それをウェブブラウザで取得する方法を見てきた。しかし、逆にウェブブラウザからサーバーへデータを送る必要がある場合もある。
ログインページを考えてみよう。ユーザー名とパスワードを入力すると、そのデータをサーバーに送信しなければならない。サーバーはデータベースを確認して、ユーザー名とパスワードが一致すればブラウザにログインを認識させる。
ウェブ開発では、クライアントからサーバーへデータを送る方法が2つある。GETとPOSTだ
GET
GETは短い文字列や値を送るときに使う。GETの値をクライアントからサーバーへ渡すには、以下のようにURLの末尾に書く。
http://www.mywebsite.co.jp/mypage.php?変数A=値A;変数B=値B ...
URLの末尾に「?」を付けて、その後がGETの値であることを示す。そして、各値のペアを「;」(セミコロン)で区切って渡す。
例えば、Googleで「大原学園」を検索したいとする。Googleにアクセスして検索語を入力してもいいが、単純に次のようにすることもできる
https://www.google.com/search?q=大原学園
ここでは、「q」(query、つまり検索)という1つの値として「大原学園」をGoogleに渡している。
PHPでは、$_GETという特別なグローバル連想配列を通してGETパラメータを取得できる。以下の演習をやってみよう。
<?php
// get_example.phpで保存してください
// "name"のパラメータが設定されている?
if (!isset($_GET["name"]))
{
print("お名前を教えてください");
}
else
{
$name = $_GET["name"];
print("こんにちは、" . $name . "さん。");
}
?>
ここでisset()は、そのGET変数が存在するかどうかをチェックしている。では、ブラウザを開いて次を試してみてください。
http://localhost/get_example.php?name=一郎

見ての通り、変数「name」が正しく読み込まれて表示されている。今度はURLに2つ目のパラメータ「age」(年齢)を追加してみよう。
<?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

ちょっとした遊びとして、今度はパラメータを何も渡さずに試してみよう。
http://localhost/get_example.php
どうなるか見てみてください。
POST
POSTもブラウザにデータを送るもう一つの方法だ。画像やテキストファイルのような、文字列ではない情報を送るときによく使われる(例えば、Instagramの投稿に画像を添付するとき、それはPOSTで送信されている)。POSTは小さなパラメータを送るのにも使われるが、URLには表示されないので、ユーザーが直接それを編集できないという特徴がある。
POSTのデータはURLに表示されないため、サーバーへデータを送るには特別な方法が必要になる。ブラウザがPOSTでサーバーへデータを送れるように「HTMLフォーム」を作る必要がある。まずは、先ほどの例と同じ2つのパラメータを持つ、シンプルな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行ずつ見ていこう。
| コード | 説明 |
|
文字コードを設定している。漢字やかなを使うためUTF-8を使用している |
|
フォームの開始。フォームが送信されると、値はGETモードでget_example.php に送られる |
|
デフォルト値は「一郎」と「19」 |
|
送信ボタンを表示する。このボタンを押すと値が |
|
フォームの終了 |
ブラウザで http://localhost/post_form.html を開いて、送信ボタンを押してみてください。

見ての通り、これは同じパラメータをURL経由(GETモード)で渡しているだけだ。今度はこれをPOSTに切り替えてみよう。まず、フォームの中の
<form action="get_example.php" method="get">
を
<form action="post_example.php" method="post">
に置き換えてください。
次にPHPスクリプトを編集して、$_GET の代わりに $_POST から読み込むようにする必要がある。get_example.php をコピーして post_example.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にパラメータが表示されていない。
ブラウザだけじゃない!
ここまではブラウザを使ってサーバーへデータを送るテストをしてきた。これはとてもよくある使い方だけど、それだけではない。どんなアプリケーションでも、GETとPOSTを使ってウェブサーバーにデータを送ることができる。Unityの授業では、UnityWebRequest クラスを使って自分のUnityゲームからPHPサーバーへデータを送る方法を後で学ぶ。

No comments to display
No comments to display