PHPフォーム作成入門!入力・確認・完了ページの作り方を3ステップで解説

Webサイトのお問い合わせフォームや会員登録ページは、ユーザーが入力した情報をサーバーに送信することで成り立っています。この「データ送受信」の仕組みは、PHPが最も得意とすることの一つであり、動的なWebアプリケーション開発の基本となります。

今回は、**「入力」→「確認」→「完了」**という3つのページを作りながら、HTMLフォームから送信されたデータをPHPで受け取る方法を、初心者の方にも分かりやすく解説します。


目次

全体の流れを理解しよう

まず、今回作成する3つのファイルがどのように連携するのか、全体の流れを把握しましょう。

  1. index.php (入力ページ): ユーザーが名前やメールアドレスなどを入力し、「確認」ボタンを押します。
  2. confirm.php (確認ページ): 入力されたデータを受け取り、表示します。ユーザーは内容を確認し、「送信」ボタンを押します。
  3. complete.php (完了ページ): 確認ページからデータを受け取り、「登録が完了しました」というメッセージを表示します。

このように、ユーザーのデータをページからページへとバケツリレーのように渡していくのが基本的な仕組みです。


ステップ1:入力フォームの作成 (index.php)

まずは、ユーザーが情報を入力するためのHTMLフォームを作成します。

【ポイント】

  • <form>タグ: フォーム全体を囲みます。
    • action="...": データの送信先ファイル(今回はconfirm.php)を指定します。
    • method="POST": データの送信方法を指定します。URLにデータが表示されないPOSTメソッドが一般的です。
  • <input>タグ:
    • name="...": 非常に重要です。 ここで指定した名前が、PHP側でデータを受け取るための「キー(目印)」になります。

index.phpのコード

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム</title>
    <link rel="stylesheet" href="style.css"> </head>
<body>
    <div class="container">
        <h1>お問い合わせ</h1>
        <p>以下のフォームに必要事項をご記入ください。</p>
        <form action="./confirm.php" method="POST">
            <div class="form-group">
                <label for="name">お名前</label>
                <input type="text" id="name" name="user_name" required>
            </div>
            <div class="form-group">
                <label for="email">メールアドレス</label>
                <input type="email" id="email" name="user_email" required>
            </div>
            <div class="form-group">
                <input type="submit" value="入力内容を確認する">
            </div>
        </form>
    </div>
</body>
</html>

ステップ2:確認ページの作成 (confirm.php)

次に、入力されたデータを受け取って表示する確認ページを作成します。

【ポイント】

  • $_POST: POSTメソッドで送信されたデータは、PHPの$_POSTという特別な変数に連想配列として格納されます。$_POST['inputのname属性値']という形でデータを取り出せます。
  • htmlspecialchars(): セキュリティ上、非常に重要です。 受け取ったデータをそのまま画面に表示すると、悪意のあるスクリプトを埋め込まれる脆弱性(クロスサイトスクリプティング/XSS)の原因になります。htmlspecialchars()関数は、HTMLタグとして特別な意味を持つ文字を無害な文字列に変換(エスケープ)してくれます。ユーザーからのデータを出力する際は、必ずこの処理を行いましょう。
  • <input type="hidden">: 画面には表示されませんが、データを持つことができるフォーム部品です。確認ページから完了ページへデータを引き継ぐために使います。

confirm.phpのコード

<?php
// POSTデータが空の場合は、入力ページにリダイレクト
if (empty($_POST)) {
    header('Location: index.php');
    exit();
}

// Null合体演算子を使って、未入力の場合に空文字をセット
$user_name = $_POST['user_name'] ?? '';
$user_email = $_POST['user_email'] ?? '';

// htmlspecialchars()でエスケープ処理
$name_escaped = htmlspecialchars($user_name, ENT_QUOTES, 'UTF-8');
$email_escaped = htmlspecialchars($user_email, ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>入力内容の確認</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>入力内容の確認</h1>
        <p>以下の内容でよろしいですか?</p>
        <div class="confirmation-data">
            <p><strong>お名前:</strong> <?php echo $name_escaped; ?></p>
            <p><strong>メールアドレス:</strong> <?php echo $email_escaped; ?></p>
        </div>
        
        <form action="./complete.php" method="POST">
            <input type="hidden" name="user_name" value="<?php echo $name_escaped; ?>">
            <input type="hidden" name="user_email" value="<?php echo $email_escaped; ?>">
            
            <div class="form-actions">
                <button type="button" onclick="history.back()">修正する</button>
                <input type="submit" value="この内容で送信する">
            </div>
        </form>
    </div>
</body>
</html>

ステップ3:完了ページの作成 (complete.php)

最後に、データを受け取り、完了メッセージを表示するページを作成します。

【ポイント】

  • ここでも、確認ページからhiddenフィールドで送られてきたデータを$_POSTで受け取ります。
  • 画面に表示する際は、念のため再度htmlspecialchars()を通すのが安全です。

complete.phpのコード

<?php
// POSTデータが空の場合は、入力ページにリダイレクト
if (empty($_POST)) {
    header('Location: index.php');
    exit();
}

$user_name = $_POST['user_name'] ?? '';
$name_escaped = htmlspecialchars($user_name, ENT_QUOTES, 'UTF-8');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>送信完了</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>送信完了</h1>
        <p><?php echo $name_escaped; ?>さん、お問い合わせいただきありがとうございます。</p>
        <p>内容を確認の上、折り返しご連絡いたします。</p>
        <a href="./index.php">トップに戻る</a>
    </div>
</body>
</html>

まとめ

今回は、PHPを使ったフォーム処理の基本的な流れを学びました。

【重要ポイントの振り返り】

  • HTMLの<form>でデータの送信元送信先を決める。
  • <input>name属性が、PHPでデータを受け取るキーになる。
  • PHPでは$_POST変数でデータを受け取る。
  • ユーザーが入力したデータを表示する際は、必ず**htmlspecialchars()でXSS対策**を行う。
  • ページをまたいでデータを引き継ぐには**<input type="hidden">**が便利。

このフォーム処理は、PHPでWebアプリケーションを開発する上で避けては通れない道です。まずはこの3ページの構成を基本形としてマスターし、安全なデータ送受信のコーディングを心がけましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次