PHP フォームハンドリング
1. シンプルな HTML フォーム
PHP のスーパーグローバル変数である $_GET と $_POST は、フォームから送信されたデータ(フォームデータ)を収集するために使用されます。
以下は、2つの入力フィールドと送信ボタンを備えたシンプルな HTML フォームの例です。
HTML フォーム(method="post"):
<html>
<body>
<form action="welcome.php" method="post">
名前: <input type="text" name="name"><br>
メールアドレス: <input type="text" name="email"><br>
<input type="submit" value="送信">
</form>
</body>
</html>ユーザーが上記のフォームに入力し送信ボタンをクリックすると、データは処理のために "welcome.php" という名前の PHP ファイルに送られます。この際、データは HTTP POST メソッドによって送信されます。
送信されたデータを表示するには、単純にすべての変数を echo します。"welcome.php" は以下のようになります。
welcome.php:
<html>
<body>
ようこそ、<?php echo $_POST["name"]; ?> さん。<br>
あなたのメールアドレスは: <?php echo $_POST["email"]; ?> です。
</body>
</html>出力結果のイメージ:
ようこそ John さん。
あなたのメールアドレスは: [email protected] です。
2. GET メソッドを使用したフォーム処理
同じ結果を HTTP GET メソッドを使用して実現することも可能です。
HTML フォーム(method="get"):
<html>
<body>
<form action="welcome_get.php" method="get">
名前: <input type="text" name="name"><br>
メールアドレス: <input type="text" name="email"><br>
<input type="submit" value="送信">
</form>
</body>
</html>そして "welcome_get.php" は以下のようになります。
welcome_get.php:
<html>
<body>
ようこそ、<?php echo $_GET["name"]; ?> さん。<br>
あなたのメールアドレスは: <?php echo $_GET["email"]; ?> です。
</body>
</html>上記のコードは非常にシンプルですが、フォームバリデーション(入力検証)が含まれていないことに注意してください。悪意のあるコードからスクリプトを守るためには、フォームデータを必ず検証する必要があります。
重要: PHP フォームを処理する際は、常に セキュリティ を念頭に置いてください。このページではデータの送受信方法を示すために簡略化していますが、実際の開発ではハッカーやスパマーからフォームを守るための適切なバリデーションが不可欠です。
3. GET vs. POST
GET と POST はどちらも、送信されたデータを保持する 配列(Array) を作成します(例:array( key1 => value1, key2 => value2, ... ))。この配列には「キー/値(Key/Value)」のペアが格納され、キーはフォームコントロールの name 属性、値はユーザーが入力したデータとなります。
GET と POST はそれぞれ $_GET および $_POST として扱われます。これらは スーパーグローバル(Superglobals) であり、スコープ(Scope)に関係なく常にアクセス可能です。関数、クラス、ファイルのどこからでも特別な手続きなしでアクセスできます。
- $_GET: URL クエリパラメータ経由で現在のスクリプトに渡される変数の配列です。
- $_POST: HTTP POST メソッド経由で現在のスクリプトに渡される変数の配列です。
4. GET を使用すべきケース
GET メソッドで送信される情報は すべての人に公開されます(すべての変数名と値が URL に表示されます)。また、GET には送信できる情報量に制限があり、約 2000 文字までとなっています。
ただし、変数が URL に表示されるため、そのページを ブックマーク することが可能です。これは特定の検索結果ページなど、状況によっては非常に便利です。
GET は、機密性の低いデータの送信に使用されます。
注意: パスワードやその他の機密情報を送信するために GET を使用することは 絶対に行わないでください。
5. POST を使用すべきケース
POST メソッドで送信される情報は 他者からは見えません(すべての名前と値は HTTP リクエストのボディ内に埋め込まれます)。また、送信できる情報量に 制限はありません。
さらに、POST はサーバーへのファイルアップロード時の「マルチパートバイナリ入力(multi-part binary input)」などの高度な機能をサポートしています。
一方で、変数が URL に表示されないため、そのページをブックマークすることはできません。
プロフェッショナルな開発現場では、フォームデータの送信には基本的に POST が好まれます。