※この記事は「2021年5月2日」に更新しました。
前回は、関数について書きました。
今回は POST と GET について。
HTTP(S)はクライアントがサーバーに対してアクセスを要求するところから全てが始まります。
クライアントがリクエストするわけですが、そのとき GET と POST があります。
GET はデータの取得命令、POST はデータの送信命令です。
よくあるお問合せフォームなどの画面遷移だと以下の通りです。
入力画面 → 確認画面 → 送信完了画面
この流れで言えば、例えば、入力画面から確認画面へデータを渡すのは POST を使うということは想像できると思うのですが。
実は GET でもデータを渡すことができます。
しかし、今回の例だと GET でデータを渡すということはありません。
POST を使います。
POST によるデータの受け渡し
まずは、簡単なフォームの入力画面を制作してみます。
post.html ファイルとして下記をソースに埋め込みましょう(この入力画面は、HTMLファイルです)。
<form action="post.php" method="post"> 名前 : <input type="text" name="name" /><br /> <input type="submit" name="submit" value="送信" /> </form>
フォームの入力画面を制作するには、<form>タグを使います。
ここで method属性 が post になっていることに注目してください。
action属性 が post.php になっています。
続いて、受け取る側の post.php ファイルを制作してみます。
<?php $name = htmlspecialchars($_POST['name'], ENT_QUOTES); echo "あなたの名前は" . $name . "ですね。"; ?>
まず、htmlspecialchars関数(内部関数)についてですが、これはセキュリティの観点からエラーが起こらないような文字列として変換しています。
ENT_QUOTES は、第2引数です。
実体参照という言葉をご存知でしょうか?
HTML文書で意味のある特殊記号は、HTMLの記号として認識されてしまうと表示がおかしくなります。
そのために、特殊記号をブラウザに表示させたいときに実体参照というものを使います。
続いて $_POST[‘name’] についてですが。
以前、変数宣言と定数のときにお話した、定義済み変数というのを覚えていますでしょうか?
実は、この $_POST[‘name’] は、定義済み変数なのです。
連想配列で、先程の post で送ったデータを <input>タグの name属性の値をキー(添字)として、入力した値を要素に格納してくれるのです。
非常に便利です。
そして、echo で $name に格納された文字列が出力されるというわけです。
GET によるデータの受け渡し
実は GET でもデータを渡すことができます。
試してみましょう。
まずは先程の post.html の <form>タグ の method属性 を get に変更しましょう。
<form action="post.php" method="get"> 名前 : <input type="text" name="name" /><br /> <input type="submit" name="submit" value="送信" /> </form>
続いて post.php ファイルの $_POST[‘name’] 部分を変更します。
<?php $name = htmlspecialchars($_GET['name'], ENT_QUOTES); echo "あなたの名前は" . $name . "ですね。"; ?>
この $_GET[‘name’] も定義済み変数です。
get で送ったデータを <input>タグの name属性の値をキー(添字)として、入力した値を要素に格納してくれます。
こう見るとあまり変わらないような気がするのですが、最大の違いは URL です。
post.html で 送信 を押したときに URL が以下のようになります。
http(s)://〇〇〇/post.php?name=入力した名前&submit…
URL の後ろにデータが付加されているのです。
post.php の後ろの一つ目が ?(クエスチョン)で二つ目以降が &(アンパサンド)となっているところがポイントです。
おそらく動的なホームページを移動していると、このような表記を見たことがあるのではないでしょうか?
しかし、今回のような場合だと URL 部分に入力内容が丸見えになります。
当然、ブラウザの履歴として URL が残るので、このような方法で送信するようなページは誰も使いたくなくなります。
以上のことから、今回のような場合は POST を使うのです。
最後に
いかがでしょうか。
今回の記事は、PHP を勉強する気がないという方でも HTTP(S)のやり取りがどのようにされているかわかるので、参考になるかと思います。
定義済み変数の連想配列があらかじめ用意されていて、データを格納してくれるのは、非常に便利です。
あとは name属性 の値を自分で決めていけばいいのですから。
次回は、クッキーとセッションについてです。
まだ、勉強始めたばかりで偉そうなこと言えませんが、これからプログラムを学びたいという方で Web系に興味のある方。
PHP はおすすめです。