PHPのスーパーグローバル$_GETと$_POSTは、フォームデータの受取りに使用します。
下の例は、2つの入力フィールドと送信ボタン付きの単純なHTMLフォームを表示します:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
例の実行 »
ユーザが上のフォームに入力して送信ボタンをクリックすると、フォームデータは "welcome.php" というPHPファイルに送信されます。 フォームデータは、HTTP POSTメソッドで送信します。
単にすべての変数を echo するだけで、送信データを表示することができます。"welcome.php"は、次の通りです:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
</body>
</html>
出力は次の通りです:
Welcome John
Your email address is john.doe@example.com
HTTP GETメソッドを使用しても同じ結果が得られます:
<html>
<body>
<form action="welcome_get.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
例の実行 »
"welcome_get.php"は次の通りです:
<html>
<body>
Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>
</body>
</html>
上のコードは非常に簡単です。しかし、最も重要なことは欠陥です。スクリプトを悪意のあるコードから守るためには、 フォームデータを検証する必要があります。
PHPのフォーム処理時には、セキュリティを考慮してください!
このページには、フォームの検証は含まれていません。フォームデータの送信と取得の方法だけを示すものです。
しかし、次のページでは、セキュリティを考慮したPHPのフォーム処理方法を示しています。 フォームデータの適切な検証は、フォームをハッカーやスパマーから守るために重要です!
GETとPOSTの両方ともに配列を作ります (array( key => value, key2 => value2, key3 => value3, ...))。 この配列にはキーと値のペアがあり、キーはフォームコントロールの名前で、値はユーザが入力したデータです。
GETとPOSTは、それぞれ$_GETと$_POSTとして取扱います。これらはスーパーグローバルで、スコープに関係なく常にアクセス可能であり、 特別な操作を行うことなく、関数、クラスまたはファイルからアクセスできます。
$_GET は、URLパラメータを介して現在のスクリプトに渡される変数の配列です。
$_POST は、HTTP POSTメソッドを介して現在のスクリプトに渡される変数の配列です。
GETメソッドを使用してフォームから送信された情報は、すべての人に見えてしまいます(すべての変数名と値がURLに表示されます)。 GETには、送信する情報量にも制限があります。制限は、約2,000文字です。しかし、変数がURLに表示されるため、ページをブックマークすることは可能です。 これは場合によっては便利なことがあります。
GETは、機密性の低いデータを送信するのに使用することができます。
注: GET は、パスワードやその他の機密情報の送信には絶対に使用しないでください!
POSTメソッドを使用してフォームから送信された情報は、他の人には見えません(すべての名前/値はHTTP要求の本文に埋め込まれています)。 送信する情報の量に制限はありません。
さらに、POSTは、サーバにファイルをアップロードする際、マルチパートバイナリ入力のサポートなどの高度な機能をサポートしています。
しかし、変数はURLに表示されないため、ページをブックマークすることはできません。
開発者には、フォームデータの送信にはPOSTの方が好まれます。
次に、PHPフォームを安全に処理する方法を見てみましょう!