【PHP講座】POSTとGET

女性

前回は関数について書きました。

【PHP講座】関数

2018.09.02

今回は 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’] についてですが。

以前、変数宣言と定数のときにお話した、定義済み変数というのを覚えていますでしょうか?

【PHP講座】変数宣言と定数

2018.08.28

実はこの $_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属性 の値を自分で決めていけばいいのですから。

次回は、クッキーとセッションについてです。

【PHP講座】クッキーとセッション

2018.09.07

まだ勉強始めたばかりで偉そうなこと言えませんが。

これからプログラムを学びたいという方で Web系に興味のある方。

PHP はおすすめですよ。