PHP 速習チュートリアル

PHP $_POST

1. PHP $_POST の概要

$_POST スーパーグローバルは、HTTP POST メソッドを通じて送信された変数の配列を保持します。

PHP のスーパーグローバルは組み込みの変数であり、関数の内部や外部を問わず、すべてのスコープ(Scopes)から常にアクセスすることができます。

2. HTML フォームにおける $_POST

HTML フォームの method 属性が "post" に設定されている場合、そのフォームは HTTP POST メソッド経由でデータを送信します。

これを実演するために、まずシンプルな HTML フォームを作成します。

HTML ファイル:

<html>
<body>

<form method="post" action="demo_request.php">
  名前: <input type="text" name="fname">
  <input type="submit" value="送信">
</form>

</body>
</html>

ユーザーが送信ボタンをクリックすると、フォームデータは <form> タグの action 属性で指定された PHP ファイルに送信されます。

その PHP ファイル内では、$_POST 変数を使用して入力フィールドの値を取得することができます。

PHP ファイル:

<?php
// 'fname' フィールドの値を取得し、サニタイズする
$name = htmlspecialchars($_POST['fname']);
echo $name;
?>

       注意:$_POST などのスーパーグローバルから取得したデータを使用する前には、XSS(クロスサイトスクリプティング)攻撃などのセキュリティ脆弱性を防ぐために、必ずデータのバリデーション(検証)とサニタイズ(無害化)を行ってください。上記の例で使用している htmlspecialchars() 関数はその代表的な手法の一つです。より堅牢なフィルタリングが必要な場合は、PHP の filter 関数群を使用することをお勧めします。

3. フォームと処理コードの統合例

以下の例では、HTML フォームと PHP コードを同一の PHP ファイル内に配置し、リクエストを自己処理する構造にしています。

実行例:

<html>
<body>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
  名前: <input type="text" name="fname">
  <input type="submit" value="送信">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // $_POST を使用して入力値を取得
  $name = htmlspecialchars($_POST['fname']);
  
  if (empty($name)) {
    echo "名前が入力されていません。";
  } else {
    echo "こんにちは、" . $name . " さん。";
  }
}
?>

</body>
</html>