【PHP】POSTメソッド($_POST)でできること

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です