Home > PHP > PHP - $_GET $_POST -

PHP - $_GET $_POST -

  • 2012-05-10 (Thu) 09:44
  • PHP
最近の天候は最悪みたいです。東日本は竜巻、雷雨、強風の被害が多数発生しているようです。この時期では珍しく強い寒気が北から降りてきて、南から暖かい空気が昇り、それらがぶつかる箇所で被害が発生しているようです。

地球温暖化・・という話は以前から聞いていますが、温暖化と言っても地球すべてが暖かくなるわけではなく、地球は絶えずバランスを維持しようとして、どこかが暑くなれば違うところは寒くなるというように、それらの差が激しい様子見たいです。
地球にやさしい行動をしたいものですね。

今回は、PHPでは必須となるグローバル変数の$_GETと$_POSTを紹介します。
第21回 $_GET $_POST
通常、ブラウザからの要求には2種類あります。ひとつがGETメソッド、もう一つがPOSTメソッドです。
ユーザの要求はブラウザのform要素で記述され、そのmethod属性の部分でどちらのメソッドを使用するかを指定しています。

PHPがフォームからの要求を受けた場合、GETメソッドで要求を受けたら$_GET変数、POSTメソッドで要求を受けたら$_POST変数に連想配列として格納されます。
配列のキーとしてはフォームの部品として使われているinput要素等の中に記述されたname属性の値が格納され、値として各部品のvalue属性の値を持ちます。

では、簡単なコードで動作を確認してみましょう。
通常はフォームのページと要求を処理するPHPのページを分けますが、ここでは1つにまとめています。
<form action="sample.php" method="get">
<input type="submit" name="Click" value="送信">
</form>
<?php
print $_GET["Click"];
?>

form要素内のmethod属性をgetに設定し、phpの出力には$_GET["Click"]としています。これをブラウザでレンダリングすると以下のようになり、単に「送信」ボタンが配置されているだけです。
20120510-p01.jpg
この「送信」ボタンをクリックすると、以下のような結果になります。
20120510-p02.jpg
結果を見ると、「送信」という文字が表示されます。これは、input要素のvalueの値をそのまま表示しています。このボタンのname属性を指定していますので、このボタンのvalue属性の値をそのままphpに渡して処理していることになります。
また、注目してもらいたいのがアドレス部分です。「sample.php?Click=送信」と表示され、どの値が渡されたのかが分かります。

では、これをPOSTメソッドに変えてみます。コードはほとんど同じで、method属性がpostになり、PHPがprint $_POST["Click"];に変わるだけです。
<form action="sample.php" method="post">
<input type="submit" name="Click" value="送信">
</form>
<?php
print $_POST["Click"];
?>

ブラウザでレンダリングした結果は、さきほどと全く同じです。「送信」ボタンをクリックした結果は以下のようになります。
20120510-p03.jpg
出力結果は全く同じですが、アドレス部分が異なります。GETと違って、アドレスの最後には何も表示されません。

ここで$_GETと$_POSTの違いは何かを説明します。まず、POST要求をするには明示的に宣言する必要があります。つまり、method属性を省略したらすべてGET要求になってしまうという事です。
HTMLはハイパーリンクを使ったものですが、このハイパーリンクをクリックした要求はGET要求です。要するに、一般的なサーバへの要求はGETとしてリクエストされます。
GET要求はユーザが意識しない場所で使われていて、特に宣言をしなくてもちゃんとサーバへ要求してくれます。

$_GETと$_POSTは送信方法が違うところがポイントです。この送信方法は全く異なる方法で行われていますが、ユーザが意識して使い分ける必要はありません。但し、以下のことだけを覚えておけば大丈夫でしょう。
・明示的に宣言していない場合は、GET要求となる。
・GET要求は、送信内容がURLとして渡される。
・GET要求は、送信できる情報量に制限がある。
・GET要求では、日本語などの全角文字を送信できないときもある。

以上のことを考慮すると、フォームで送信する場合はPOST要求の方がメリットが多いようです。
では、最後にユーザが入力したものがどのように反映されるかを簡単なコードで見てみましょう。
<form action="sample.php" method="get">
<input type="text" name="name" size="20" />
<input type="submit" value="送信">
</form>
<?php
if(empty($_GET)){
echo "入力されていません";
}else{
print "こんにちは!" . htmlspecialchars($_GET["name"]). "さん";
}
?>

ブラウザでレンダリングすると以下のようになります。
20120510-p04.jpg
入力欄に「Tanaka」と入力して、「送信」ボタンをクリックすると以下のように表示されます。
20120510-p05.jpg
ここでは、GET要求を行っているのでアドレスの部分も確認してください。

PHPは動的なHTMLを実現するプログラミング言語です。サーバとユーザの対話が成り立ち、ユーザの要求の違いによって、サーバがその要求によって処理を分けることができます。
フォームを使うという事は、GET要求するのかPOST要求をするのかを考えて作る必要があります。どちらを使えば良いかを考えてしまいますが、分からない時はPOST要求で間違いはないでしょう。ただし、POSTの場合は明示的に宣言してあげる必要があるので、必ずフォーム要素にmethod="post"と記述してください。
Comment Form
★下記に2つの英単語をスペースで区切って入力してください

Home > PHP > PHP - $_GET $_POST -

Search
Feeds

Page Top