PHP 速習チュートリアル

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 が好まれます。