フォームで値を送る
2014年5月20日:PHP
フォームに情報を記入して、その情報を処理したい場合がよくあります。例えば、ログイン画面なんかはそうですよね。ここでは、このフォームによる情報のやりとりを解説します。
GETメソッドによる送信
まず、情報を他のページに送る方法としてGETメソッドを紹介します。GETメソッドでは、URLの最後に
を追加して情報を送る方法です。例えば、
- name、山田太郎
- work、花屋
という変数と値の組を「http://yamada.com/test.php」へGETメソッドで送るなら
http://yamada.com/test.php?name=山田太郎&work=花屋
となります。
送った値をPHPで取得したい場合は、
により取得できます。例えば、以下の様なプログラム(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メソッドを知っている人は
- IDがyamada
- パスワードがtensai
とバレてしまいます。そして、himitsu.jpに勝手にログインされてしまいます。
これではまずいということで、対応策としてPOSTメソッドというものがあります。POSTメソッドを使えば、URLに表示させないで情報を送ることができます。 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を使うようにしましょう。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー