カテゴリ: PHP 更新日: 2025/05/29

PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド

PHP のフォームデータの受け取り($_POST, $_GET)
PHP のフォームデータの受け取り($_POST, $_GET)

新人と先輩の会話形式で理解しよう

新人

「PHPでフォームのデータを受け取るにはどうすればいいですか?」

先輩

「フォームとは、ユーザーからの入力を受け取るための仕組みのことだよ。まずはフォームについて説明しよう!」

-

1. フォームとは?

1. フォームとは?
1. フォームとは?

フォームとは、ユーザーがデータを入力して送信できるWebページの仕組みです。例えば、ログインフォームやお問い合わせフォームがこれに当たります。

HTMLでフォームを作るには、<form>タグを使用します。以下はシンプルな入力フォームの例です。


<form action="process.php" method="post">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <button type="submit">送信</button>
</form>

このフォームでは、nameという入力フィールドがあり、送信するとprocess.phpにデータが送られます。

2. PHP でフォームのデータを受け取る方法($_POST と $_GET の違い)

2. PHP でフォームのデータを受け取る方法($_POST と $_GET の違い)
2. PHP でフォームのデータを受け取る方法($_POST と $_GET の違い)

フォームのデータは、$_POSTまたは$_GETを使って受け取ります。それぞれの違いを見ていきましょう。

$_POST を使ったデータの受け取り

フォームの methodpost を指定すると、データは HTTPリクエストのボディ部分に送信されます。これにより、URLには表示されず、データの安全性が向上します。


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST['name'];
    echo "あなたの名前は " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . " です。";
}
?>

$_GET を使ったデータの受け取り

フォームの methodget を指定すると、データはURLのクエリパラメータとして送信されます。


<form action="process.php" method="get">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <button type="submit">送信</button>
</form>

このフォームを送信すると、process.php?name=〇〇 のようにURLにデータが含まれます。


<?php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
    $name = $_GET['name'];
    echo "あなたの名前は " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . " です。";
}
?>

$_POST と $_GET の違い

特徴 $_POST $_GET
データの送信方法 HTTPリクエストのボディに含める URLのクエリパラメータとして送信
URL に表示されるか 表示されない 表示される
セキュリティ 高い(パスワード送信などに適している) 低い(URLから情報が漏れる可能性あり)
データ量の制限 大きなデータを送信可能 URLの長さに制限あり

例えば、ログインフォームではパスワードを含むため、$_POST を使うのが一般的です。一方、検索フォームのようにURLに結果を残したい場合は $_GET を使います。

3. $_POST を使ったデータの受け取り(フォームから送信されたデータの取得方法)

3. $_POST を使ったデータの受け取り(フォームから送信されたデータの取得方法)
3. $_POST を使ったデータの受け取り(フォームから送信されたデータの取得方法)

$_POST を使用すると、フォームから送信されたデータをサーバー側で処理できます。以下の手順で、実際にデータを受け取る方法を見ていきましょう。

基本的なフォームの作成

まず、以下のようなフォームを作成します。


<form action="process.php" method="post">
    <label for="username">ユーザー名:</label>
    <input type="text" id="username" name="username">
    
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email">
    
    <button type="submit">送信</button>
</form>

PHP でのデータ受け取り

このフォームを送信すると、入力されたデータは process.php に送信されます。PHP でデータを取得する方法を見てみましょう。


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $email = $_POST['email'];

    echo "ユーザー名:" . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . "<br>";
    echo "メールアドレス:" . htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
}
?>

このコードでは、フォームのデータを $_POST を使って取得し、HTMLエスケープを行いながら表示しています。

4. $_GET を使ったデータの受け取り(URL パラメータの取得方法)

4. $_GET を使ったデータの受け取り(URL パラメータの取得方法)
4. $_GET を使ったデータの受け取り(URL パラメータの取得方法)

$_GET は、URL のクエリパラメータを使ってデータを送信する方法です。例えば、検索機能やフィルタリングなどに適しています。

基本的な GET フォームの作成

以下のフォームでは、データを URL に含めて送信します。


<form action="search.php" method="get">
    <label for="query">検索キーワード:</label>
    <input type="text" id="query" name="query">
    
    <button type="submit">検索</button>
</form>

例えば、「PHP」と入力して送信すると、URL は search.php?query=PHP となります。

PHP でのデータ受け取り

送信されたデータを $_GET を使って取得します。


<?php
if (isset($_GET['query'])) {
    $query = $_GET['query'];
    echo "検索キーワード:" . htmlspecialchars($query, ENT_QUOTES, 'UTF-8');
}
?>

$_POST と異なり、URL にデータが表示されるため、データの漏洩には注意が必要です。

-

5. $_POST と $_GET の使い分け(どちらを使うべきか)

5. $_POST と $_GET の使い分け(どちらを使うべきか)
5. $_POST と $_GET の使い分け(どちらを使うべきか)

$_POST と $_GET にはそれぞれ適した用途があります。以下のポイントを参考に使い分けましょう。

$_POST を使うべきケース

  • ログインフォーム(パスワードを扱うため)
  • お問い合わせフォーム(個人情報を含むため)
  • データの登録・更新(長いデータを送る場合)

$_GET を使うべきケース

  • 検索フォーム(URL に検索条件を残せる)
  • ページネーション(ページ番号を URL に含める)
  • フィルタリング機能(カテゴリの切り替えなど)

$_POST と $_GET の選択基準

基準 $_POST $_GET
セキュリティ 高い(データが URL に表示されない) 低い(データが URL に表示される)
データの長さ 長いデータの送信が可能 URL の制限内でのみ送信可能
ページのリロード時の影響 フォームの再送信に注意が必要 リロードしても影響なし
ブックマーク・共有 不可(データが URL に含まれない) 可能(URL にデータが含まれる)

例えば、検索ページでは $_GET を使うことで、検索結果ページをブックマークしたり、他の人と共有することができます。一方、ログインフォームではセキュリティ上 $_POST を使うのが適切です。

6. フォームデータのバリデーション(入力チェックの基本)

6. フォームデータのバリデーション(入力チェックの基本)
6. フォームデータのバリデーション(入力チェックの基本)

PHP では、フォームから送信されたデータを適切にバリデーション(入力チェック)することが重要です。不正なデータや誤った入力を防ぐために、基本的なバリデーションを実装しましょう。

基本的なバリデーションの考え方

バリデーションには、以下のような基本的なチェックが含まれます。

  • 必須項目チェック(空でないか)
  • 文字数制限(最小・最大)
  • データ形式の確認(メールアドレス、数字のみなど)
  • 特殊文字のエスケープ(XSS対策)

PHP でのバリデーション実装

以下のコードは、基本的なバリデーションを実装した例です。


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $errors = [];

    if (empty($_POST["username"])) {
        $errors[] = "ユーザー名を入力してください。";
    } elseif (mb_strlen($_POST["username"]) > 20) {
        $errors[] = "ユーザー名は20文字以内で入力してください。";
    }

    if (empty($_POST["email"])) {
        $errors[] = "メールアドレスを入力してください。";
    } elseif (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
        $errors[] = "正しいメールアドレスを入力してください。";
    }

    if (empty($errors)) {
        echo "入力内容が正しく受け取られました。";
    } else {
        foreach ($errors as $error) {
            echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . "<br>";
        }
    }
}
?>

このコードでは、ユーザー名とメールアドレスの入力チェックを行い、問題がある場合はエラーメッセージを表示します。

7. $_POST や $_GET を安全に扱う方法(セキュリティ対策)

7. $_POST や $_GET を安全に扱う方法(セキュリティ対策)
7. $_POST や $_GET を安全に扱う方法(セキュリティ対策)

フォームのデータを安全に扱うためには、適切なセキュリティ対策を行う必要があります。以下のような攻撃に対する対策を見ていきましょう。

XSS(クロスサイトスクリプティング)対策

ユーザーがフォームに JavaScript などのスクリプトを入力して、それをそのまま出力すると XSS 攻撃の対象になります。これを防ぐために、出力時に htmlspecialchars を使用します。


<?php
if (isset($_POST["comment"])) {
    $comment = htmlspecialchars($_POST["comment"], ENT_QUOTES, 'UTF-8');
    echo "コメント: " . $comment;
}
?>

SQLインジェクション対策

フォームデータを直接 SQL クエリに組み込むと、悪意のある SQL コードを埋め込まれる危険があります。これを防ぐために、PDOmysqli のプリペアドステートメントを使用します。


<?php
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":username", $_POST["username"], PDO::PARAM_STR);
$stmt->bindParam(":email", $_POST["email"], PDO::PARAM_STR);
$stmt->execute();
?>

CSRF(クロスサイトリクエストフォージェリ)対策

CSRF 攻撃を防ぐために、フォーム送信時にトークンを使用する方法があります。


<form action="process.php" method="post">
    <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token'], ENT_QUOTES, 'UTF-8'); ?>">
    <label for="username">ユーザー名:</label>
    <input type="text" id="username" name="username">
    <button type="submit">送信</button>
</form>

<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (!isset($_POST["csrf_token"]) || $_POST["csrf_token"] !== $_SESSION["csrf_token"]) {
        die("CSRF トークンが無効です。");
    }
}
?>

これにより、トークンをチェックして不正なリクエストを防ぎます。

8. PHP のフォーム処理を学ぶためのおすすめの方法

8. PHP のフォーム処理を学ぶためのおすすめの方法
8. PHP のフォーム処理を学ぶためのおすすめの方法

PHP のフォーム処理を学ぶために、以下の方法を活用しましょう。

1. 実際にフォームを作成して試す

まずは、基本的なフォームを作成し、$_POST$_GET でデータを受け取る実践をしてみましょう。動作を確認しながら、エラーハンドリングやセキュリティ対策を学ぶことが重要です。

2. PHP の公式ドキュメントを活用する

PHP の公式サイト(https://www.php.net/manual/ja/)には、フォーム処理やセキュリティ対策に関する情報が詳しく掲載されています。

3. 実践的なプロジェクトに挑戦する

実際に、お問い合わせフォームやログイン機能を作成してみると、より深い理解が得られます。特に、データベースとの連携やセッション管理を学ぶと実用的なスキルが身につきます。

4. セキュリティについて学ぶ

フォームの安全な処理を学ぶために、XSS や SQL インジェクションなどの脆弱性についても調べてみましょう。実践的な知識を身につけることで、より安全なシステムを構築できます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
Pythonの条件式でNoneを判定する方法!is None vs == None の違い
Pythonのpass文とは?一時的なコードブロックをスキップする方法
人気記事
No.1
Java&Spring記事人気No1
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
PHPとは?初心者向けにわかりやすく解説
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
-