【独学PHP】POSTとGET

※この記事は「2020年10月1日」に更新しました。

独学できる PHP講座。

今回は、POST と GET について。

前回は、HTTP(S)リクエストについて、軽く説明しました。

【独学PHP】HTTPリクエスト入門

【独学PHP】HTTPリクエスト入門

2020年9月27日

GET はデータの取得命令で、POST はデータの送信命令です。

それぞれ違いを解説していきます。

POSTデータを取得する

それでは、POSTデータを取得する方法を紹介します。

まずは、以下のような簡単な入力フォーム post.html を作成します。

<html>
<head>
<meta charset="utf-8">
<title>POSTデータの送信</title>
</head>
<body>
<form action="post.php" method="post">
名前:<input type="text" name="name" /><br />
<input type="submit" name="submit" value="送信" />
</form>
</body>
</html>

次に POSTデータを受け取る post.php を作成します。

<?php
$name = htmlspecialchars($_POST['name'], ENT_QUOTES);
print "ようこそ" . $name . "さん";
?>

post.html から名前を入力し、送信ボタンをクリックします。

実行結果は以下の通りです。

POSTデータを取得する POSTデータを取得する

エスケープ処理の必要性

ユーザーから入力された値を表示する場合、エスケープ処理をする必要があります。

理由はどんな値が入力されるかわからないからです。

先程も htmlspecialchars関数を使って、HTMLエスケープを行っています。

これは、HTML文書で意味のある特殊な記号として認識されないために行っています。

特殊記号をブラウザに表示させる場合、実体参照というものを使います。

興味のある方は一度調べてみると良いかと思います。

このエスケープ処理を省いてしまうと、クロスサイトスクリプティング(XSS)といった脆弱性の原因になります。



GETデータを取得する

GETデータも取得することができます。

以下のような簡単な入力フォーム get.html を作成します。

<html>
<head>
<meta charset="utf-8">
<title>GETデータの送信</title>
</head>
<body>
<form action="get.php" method="get">
名前:<input type="text" name="name" /><br />
<input type="submit" name="submit" value="送信" />
</form>
</body>
</html>

次に GETデータを取得する get.php を作成します。

<?php
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
print "ようこそ" . $name . "さん";
?>

get.html から名前を入力し、送信ボタンをクリックします。

実行結果は以下の通りです(入力画面は POST とほぼ同じなので省いています)。

GETデータを取得する

あまり変化がないように感じるかもしれませんが、URL を見てみましょう。

以下のようになっています。

localhost/test_php/get.php?name=タカフミ&submit=送信

このようにパラメータ表示されるのが、GET の特徴です。

最後に

いかがでしょうか。

今回は、POST と GET について、解説しました。

お問い合わせフォームを作成する場合、基本的に POST を使います。

理由は、URL 部分に入力情報が丸見えになってしまうからです。

ブラウザの履歴にも URL として残るので、GET で送信するのは適切ではありません。