PHPでセッションを使ってフォーム入力を保持する方法を解説!初心者向けステップバイステップ
生徒
「PHPでフォームに入力した内容を、ページを移動しても残しておく方法ってありますか?」
先生
「はい、それにはセッション(session)を使うと便利です。セッションを使えば、ユーザーごとの情報を一時的に保存できます。」
生徒
「それって、ログインとかにも使われてるやつですか?」
先生
「そうですね!ログイン情報やショッピングカートの中身、そしてフォームの入力内容を保持するのにもセッションはよく使われます。今日は、フォーム入力の保持を例に、セッションの使い方を学んでいきましょう。」
1. セッションとは?初心者向けにやさしく説明
セッション(Session)とは、Webサイトを利用している一定の間だけ、ユーザーごとの情報を一時的に保存しておく仕組みです。たとえば、フォームに入力した名前やメールアドレスを、ページを移動してもそのまま使い回すことができます。
Webページは本来、ページを移動するたびに情報がリセットされますが、セッションを使うことで「さっき入力した内容」を覚えておけるようになります。そのため、入力フォームやログイン処理などでよく使われています。
セッションの情報はサーバー側で管理され、ユーザーごとに割り当てられた「セッションID」によって区別されます。このIDだけがクッキーとしてブラウザに保存されるため、重要なデータ自体は外に出にくいという特徴があります。
クッキーと似ていますが、クッキーはユーザーのパソコン側に直接データを保存するのに対し、セッションはサーバーに保存される点が大きな違いです。初心者の方は「安全に一時保存したいならセッション」と覚えておくと分かりやすいです。
初心者向け:セッションの超シンプルな例
<?php
session_start();
// セッションに値を保存
$_SESSION['message'] = 'こんにちは';
// 別のページでも同じ値を使える
echo $_SESSION['message'];
?>
このように、$_SESSIONに値を入れておくと、ページが変わっても同じ情報を取り出せます。まずは「セッションは一時的なメモ帳」のようなもの、とイメージすると理解しやすいでしょう。
2. フォームに入力した値をセッションで保持するイメージ
たとえば、名前やメールアドレスを入力して「次へ」ボタンを押したとき、その入力内容をセッションに保存しておけば、次のページでその値をそのまま表示したり、確認用に使ったりできます。
イメージとしては、フォームに入力した内容を「いったんサーバーのメモ帳に預けておく」ようなものです。ページを移動しても、そのメモ帳から取り出せるので、入力の引き継ぎができます。
途中で戻っても入力内容が消えずに済むため、ユーザーにとって親切な作りになります。特に入力項目が多いフォームほど、セッションでの保持が役立ちます。
初心者向け:入力 → セッション保存 → 取り出しの流れ
<?php
session_start();
// 送信された値をセッションに保存(例)
$_SESSION['name'] = $_POST['name'] ?? '';
$_SESSION['email'] = $_POST['email'] ?? '';
// 次のページでは $_SESSION['name'] のように取り出して使う
?>
ここでは「送信された内容をセッションに入れると、次のページでも同じ値を使える」という流れだけ押さえればOKです。細かい実装は後の手順で扱うので、まずは全体像をつかみましょう。
3. フォームを作成してセッションに保存する
ここからは、実際にフォームを作って、送信した入力内容をPHPのセッションに保存する流れを見ていきます。ポイントは「フォーム送信 → セッションに入れる」という形にしておくことです。
まず、HTMLフォームを用意します。今回は分かりやすく、名前とメールアドレスの2項目だけにしています。
<form action="confirm.php" method="POST">
<label>お名前:</label>
<input type="text" name="name"><br>
<label>メールアドレス:</label>
<input type="email" name="email"><br>
<button type="submit">次へ</button>
</form>
次に、送信先のconfirm.phpで入力内容をセッションに保存します。セッションを使うページでは、必ず最初にsession_start()を書きます。
<?php
session_start();
// フォームの値をセッションに保存
$_SESSION['name'] = $_POST['name'] ?? '';
$_SESSION['email'] = $_POST['email'] ?? '';
?>
$_SESSIONは「ユーザーごとに一時保存できる箱」です。ここに入れた値は、別ページに移動しても取り出せます。
また、?? ''(ヌル合体演算子)を付けておくと、もし未入力や送信されていない場合でも空文字になり、エラーを避けやすくなります。初心者のうちは「念のため付けておく」と覚えておくと安心です。
4. 確認ページでセッションの値を表示する
セッションに保存した値は、別のページでも取り出して画面に表示できます。ここでは「確認ページで、さっき入力した内容を見せる」場面を想定します。
まず大事なのは、このページでも必ずsession_start()を最初に書くことです。これを書かないと、セッションの中身を読めず「未定義」エラーになりやすいので注意してください。
$_SESSION['name']や$_SESSION['email']が、入力画面で保存したデータです。ここでは?? ''を付けて、もし値が入っていない場合でも空文字で表示できるようにしています。
これで、前のページで入力した内容を確認ページに表示できるようになります。ユーザーは送信前に内容をチェックできるので、入力フォームとセットでよく使われる形です。
初心者向け:表示が崩れないようにする小さな工夫
確認ページでは、値が空のときに「未入力です」と出してあげると親切です。たとえば次のように書けます。
このように一度変数に入れてから表示すると、読みやすくなり、少しずつ処理を増やしたいときも整理しやすくなります。
5. 入力画面に戻ったときに入力値を保持する
入力ミスなどで前の画面に戻ったときも、セッションを使って入力内容を保持しておけば、もう一度書き直す手間が省けます。
<input type="text" name="name" value="<?php echo isset($_SESSION['name']) ? $_SESSION['name'] : ''; ?>">
このようにvalue属性にセッションの値を入れることで、再表示時にも内容が残ります。
6. セッションの注意点と使いどころ
セッションを使うと便利ですが、いくつか注意点があります:
- セッションを使うページでは必ず
session_start()を最初に書く - 多くのデータを保存しすぎないようにする
- ログアウト時や完了時には
session_destroy()で消す
セッションは、ユーザーごとに情報を保持できるとても便利な機能です。フォームの入力内容を保持したり、アンケートや注文フォームの途中保存など、いろいろな場面で使えます。
まとめ
PHPでセッションを活用してフォーム入力内容を保持する方法は、ユーザーにとって親切で使いやすいWebフォームを実現するための大切な技術です。セッションはユーザーがページを移動したり、入力画面に戻ったりしても入力データを保持できるため、途中で内容が消えてしまうというストレスを防ぐことができます。 特に初心者がフォームを扱う際に起こしやすい「戻ったら入力内容が消えていた」「確認画面に値が表示されない」といった悩みも、セッションを正しく使えば簡単に解決できます。 セッションはサーバー側にデータを保持するため、セキュリティ面でもクッキーより優れており、ショッピングカートやログイン機能などにも広く使われています。フォーム入力内容の保持という基本から始めて、今後はログイン管理やマルチページ入力フォームの構築にも応用していくことができるでしょう。
PHPでフォーム入力をセッションで保持する基本の流れ
- HTMLでフォーム画面を作る
session_start()でセッションを開始する$_SESSIONにPOST値を代入する- 確認ページや戻りページで
$_SESSIONを参照して表示
以下は、名前とメールアドレスをセッションに保存し、再表示時にフォームに値を戻すサンプルです。
// 入力内容をセッションに保存する(confirm.php)
session_start();
$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
<!-- 入力フォームでセッションから値を表示 -->
<input type="text" name="name" value="<?php echo isset($_SESSION['name']) ? $_SESSION['name'] : ''; ?>">
<input type="email" name="email" value="<?php echo isset($_SESSION['email']) ? $_SESSION['email'] : ''; ?>">
このように、value属性にセッションの値を入れるだけで、入力内容の再表示が実現できます。特別なライブラリや難しい処理は必要なく、PHP標準の機能だけで構築可能です。
ただし、session_start()をページの冒頭で書くこと、セッションが必要なくなったらsession_destroy()などで適切に終了処理をすることは基本的なルールです。
フォームの途中確認、入力チェック後の戻り処理、さらにはステップ式のフォーム設計など、セッションの応用範囲はとても広く、Web開発に欠かせない重要な要素です。
生徒
「今日のセッションの使い方って、意外とシンプルなんですね。フォームの入力値をそのまま保存できるなんて便利!」
先生
「そうなんです。しかもセッションはログイン情報やカートにも応用できるので、今後のPHP学習でもかなり役立ちますよ。」
生徒
「でもsession_start()を忘れると動かないっていうのは、ちょっと怖いですね…」
先生
「それは本当に大事なポイントですね。PHPファイルの一番上に書くって覚えておくと失敗しませんよ。あと、不要になったセッションはsession_destroy()でちゃんと消すのも忘れずにね。」
生徒
「なるほど、ページ遷移が多いフォームではセッションが便利ってよくわかりました。戻ったときも値が残ってるのは、使う人にもやさしい設計ですね。」
先生
「その通り!ユーザー体験を良くする工夫として、セッションはとても効果的です。今後はマルチステップのアンケートや注文フォームにも挑戦してみましょう!」