【PHP】POSTメソッド($_POST)でできること
POSTメソッドとは
PHPの`$_POST`は、HTMLフォームの「POST」メソッドで送信されたデータを受け取るためのスーパーグローバル変数です。 `$_POST`は、URLにデータを含めずに送信するため、`$_GET`と比べてセキュリティが向上します。
基本的な使い方
以下のフォームを例に、`$_POST`の基本的な使い方を解説します。
フォームの作成
<form method="POST" action="post_handler.php"> <label>名前: <input type="text" name="username"></label> <input type="submit" value="送信"> </form>
PHPでのデータ取得
<?php if ($_SERVER["REQUEST_METHOD"] === "POST") { $username = $_POST["username"]; echo "こんにちは, " . htmlspecialchars($username) . "さん!"; } ?>
複数の値の処理
チェックボックスや配列データをPOSTで送信する場合の処理方法を説明します。
チェックボックスの送信
<form method="POST" action="post_handler.php"> <input type="checkbox" name="hobby[]" value="読書"> 読書 <input type="checkbox" name="hobby[]" value="映画鑑賞"> 映画鑑賞 <input type="checkbox" name="hobby[]" value="旅行"> 旅行 <input type="submit" value="送信"> </form>
PHPでの取得方法
<?php if (isset($_POST["hobby"])) { $hobbies = $_POST["hobby"]; echo "あなたの趣味は: " . implode(", ", $hobbies) . " です。"; } else { echo "趣味が選択されていません。"; } ?>
ファイルのアップロード
POSTメソッドを使ってファイルをアップロードする方法を説明します。
フォームの作成
<form method="POST" action="upload.php" enctype="multipart/form-data"> <input type="file" name="uploadfile"> <input type="submit" value="アップロード"> </form>
PHPでの処理
<?php if ($_FILES["uploadfile"]["error"] === UPLOAD_ERR_OK) { $upload_dir = "uploads/"; $filepath = $upload_dir . basename($_FILES["uploadfile"]["name"]); move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $filepath); echo "ファイルがアップロードされました: " . htmlspecialchars($filepath); } else { echo "アップロードに失敗しました。"; } ?>
セキュリティ対策
`$_POST`を安全に利用するための対策を説明します。
サニタイズ
<?php $username = htmlspecialchars($_POST["username"], ENT_QUOTES, "UTF-8"); ?>
CSRF対策
<?php session_start(); $_SESSION["token"] = bin2hex(random_bytes(32)); ?> <form method="POST"> <input type="hidden" name="token" value="<?php echo $_SESSION["token"]; ?>"> <input type="submit" value="送信"> </form>
SQLインジェクション対策
<?php $pdo = new PDO("mysql:host=localhost;dbname=testdb", "user", "password"); $stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)"); $stmt->bindParam(":name", $_POST["username"], PDO::PARAM_STR); $stmt->execute(); ?>
応用的な使い方
`$_POST`を活用した高度なテクニックを紹介します。
JSONデータの受け取り
<?php $data = json_decode(file_get_contents("php://input"), true); echo "受信したデータ: " . print_r($data, true); ?>
APIリクエストの処理
<?php header("Content-Type: application/json"); if ($_SERVER["REQUEST_METHOD"] === "POST") { echo json_encode(["status" => "success", "message" => "データを受け取りました"]); } ?>