Webサイトのお問い合わせフォームや会員登録ページは、ユーザーが入力した情報をサーバーに送信することで成り立っています。この「データ送受信」の仕組みは、PHPが最も得意とすることの一つであり、動的なWebアプリケーション開発の基本となります。
今回は、**「入力」→「確認」→「完了」**という3つのページを作りながら、HTMLフォームから送信されたデータをPHPで受け取る方法を、初心者の方にも分かりやすく解説します。
目次
全体の流れを理解しよう
まず、今回作成する3つのファイルがどのように連携するのか、全体の流れを把握しましょう。
index.php
(入力ページ): ユーザーが名前やメールアドレスなどを入力し、「確認」ボタンを押します。confirm.php
(確認ページ): 入力されたデータを受け取り、表示します。ユーザーは内容を確認し、「送信」ボタンを押します。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ページの構成を基本形としてマスターし、安全なデータ送受信のコーディングを心がけましょう。