【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" => "データを受け取りました"]);
}
?>