フォームで値を送る

 フォームに情報を記入して、その情報を処理したい場合がよくあります。例えば、ログイン画面なんかはそうですよね。ここでは、このフォームによる情報のやりとりを解説します。

GETメソッドによる送信

 まず、情報を他のページに送る方法としてGETメソッドを紹介します。GETメソッドでは、URLの最後に

URL?変数1=値1&変数2=値2&…

を追加して情報を送る方法です。例えば、

  1. name、山田太郎
  2. work、花屋

という変数と値の組を「http://yamada.com/test.php」へGETメソッドで送るなら

http://yamada.com/test.php?name=山田太郎&work=花屋

となります。

 送った値をPHPで取得したい場合は、

$_GET[‘変数’]

により取得できます。例えば、以下の様なプログラム(sample.php)を作ると

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>サンプル</title>
</head>
<body>
<form method="get" action="sample.php">
名前:
<input type="text" name="name" value="名前を記入" size="20"><br />
職業:
<input type="text" name="work" value="職業を記入" size="20"><br />
<input type="submit" />
</form>
<?php
$name = $_GET['name'];
$work = $_GET['work'];
echo '名前は'.$name.'で職業は'.$work.'ですね';
?>
</body>
</html>

名前と職業を入力して、送信を押せば、以下の様な文章がフォームの下に表示されます(ここでは、名前を山田太郎、職業をニートにしています)。

サンプル

今回GETメソッドを使用するので、formタグのmethodにはgetをいれています。そして、actionには、送信先のURLをいれます。

POSTメソッドによるデータ送信

GETメソッドで、データを送ればいいのですが、「URLに情報が残ってしまう」という問題があります。URLは履歴に残るのでもしも

http://himitsu.jp/index.html?id=yamada&password=tensai

という履歴があれば、GETメソッドを知っている人は

  1. IDがyamada
  2. パスワードがtensai

とバレてしまいます。そして、himitsu.jpに勝手にログインされてしまいます。

 これではまずいということで、対応策としてPOSTメソッドというものがあります。POSTメソッドを使えば、URLに表示させないで情報を送ることができます。 POSTで値を受け取るときは

$_POST[‘変数’]

とします。基本的にGETと同じです。以下のようにプログラムを組めば、先ほどの例と同じように動作します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>サンプル</title>
</head>
<body>
<form method="post" action="sample.php">
名前:
<input type="text" name="name" value="名前を記入" size="20"><br />
職業:
<input type="text" name="work" value="職業を記入" size="20"><br />
<input type="submit" />
</form>
<?php
$name = $_POST['name'];
$work = $_POST['work'];
echo '名前は'.$name.'で職業は'.$work.'ですね';
?>
</body>
</html>

GETと違ってURLになにも情報は残りません。以上から分かる通り、GETを使う利点はほとんどないので、基本的にPOSTを使うようにしましょう。

著者:安井 真人(やすい まさと)