CodeIgniterでフォーム処理をマスター!初心者向け完全ガイド
生徒
「CodeIgniter(コードイグナイター)で、お問い合わせフォームのような、入力画面を作るにはどうすればいいですか?」
先生
「CodeIgniterを使えば、入力内容のチェックから送信まで、とてもスムーズに作ることができますよ。」
生徒
「プログラム初心者でも、データのやり取りを管理できるのでしょうか?」
先生
「もちろんです!まずはフォーム処理の全体的な流れから、一歩ずつ一緒に見ていきましょう。」
1. フォーム処理とは何か?パソコン初心者向けの基本概念
インターネットで買い物をしたり、アンケートに答えたりするとき、名前や住所を入力する画面を見かけますよね。これを「フォーム」と呼びます。プログラミングにおける「フォーム処理」とは、ユーザーが画面から入力した情報を、サーバーという大きなコンピューターが受け取り、正しく処理することを指します。
例えば、お手紙を出すときのことを想像してみてください。あなたが書いた手紙(入力データ)を郵便ポスト(フォームの送信ボタン)に入れると、郵便局(サーバー)がそれを仕分けして、宛先(データベースやメール)へ届けてくれます。CodeIgniterは、この「郵便局の仕組み」を簡単に作れるようにしてくれる便利な道具箱のようなものです。
CodeIgniterを使うメリットは、自分でイチから難しいコードを書かなくても、データの「受け取り」「確認」「保存」という一連の動作を安全に行える点にあります。これにより、悪い人が不正にデータを書き換えるといった攻撃からも守りやすくなります。
2. 入力画面を表示する「ビュー」の作成方法
まずは、ユーザーが文字を入力するための「見た目」の部分を作ります。CodeIgniterでは、この画面のことを「ビュー (View)」と呼びます。ビューは、主にHTML(エイチティーエムエル)という、Webページの骨組みを作る言葉で書かれます。
フォームを作成する際は、formタグという命令を使います。ここで重要なのが「どこにデータを送るか」を指定するaction(アクション)と、「どのように送るか」を決めるmethod(メソッド)です。初心者のうちは、大切な情報を送るために「POST(ポスト)」という形式を使うと覚えておきましょう。
以下のコードは、名前を入力して送信するだけの、世界一シンプルな入力フォームの例です。
<form action="/contact/confirm" method="post">
<label>お名前:</label>
<input type="text" name="username">
<button type="submit">送信する</button>
</form>
この中の name="username" という部分が非常に重要です。これは、プログラムが後で「あ、これは名前のデータだな」と見分けるための「名札」の役割を果たします。
3. コントローラーでデータを受け取る仕組み
次に、送られてきたデータを受け取る「司令塔」を作ります。これを「コントローラー (Controller)」と言います。コントローラーは、ユーザーからのリクエストを受け取り、「次はどの画面を表示するか」や「データをどう処理するか」を判断する、オーケストラの指揮者のような役割を持っています。
CodeIgniterでは、$this->request->getPost() という命令を使うことで、先ほどのフォームで入力された内容を簡単に取り出すことができます。もし「username」という名札がついたデータを取ってきたいなら、括弧の中にその名前を書くだけです。
ここで、実際にデータを受け取って表示するだけのシンプルなコントローラーの書き方を見てみましょう。
namespace App\Controllers;
class Contact extends BaseController
{
public function confirm()
{
// フォームから送られた「username」を取得して変数に入れる
$name = $this->request->getPost('username');
// 画面に「こんにちは、〇〇さん」と表示する
echo "こんにちは、" . $name . "さん!";
}
}
変数(へんすう)とは、データを入れておくための「箱」のことです。上記の例では、$name という名前の箱に、ユーザーが入力した名前を一時的に保管しています。
4. バリデーション(入力チェック)でエラーを防ぐ
フォーム処理で最も大切な工程の一つが「バリデーション」です。日本語では「入力値検証」と言います。例えば、メールアドレスの欄が空っぽだったり、数字を入れるべき場所に漢字が入っていたりすると、プログラムが困ってしまいますよね。
バリデーションは、いわば「学校の持ち物検査」のようなものです。先生が「筆箱は持っていますか?」「教科書は正しいですか?」と確認するように、プログラムも「名前は入力されていますか?」「文字数は多すぎませんか?」とチェックします。
CodeIgniterには、このチェックを自動で行ってくれる強力な機能が備わっています。これを使うことで、安全で使いやすいフォームを簡単に作ることができます。
$rules = [
'username' => 'required|min_length[3]',
'email' => 'required|valid_email',
];
if (!$this->validate($rules)) {
// チェックに引っかかった(エラーがあった)場合の処理
echo "入力内容に間違いがあります。やり直してください。";
} else {
// 正しく入力されていた場合の処理
echo "確認画面へ進みます。";
}
上記のコードにある required は「必須(必ず入力してね)」、valid_email は「正しいメール形式にしてね」という意味です。これを組み合わせるだけで、プロレベルのチェック機能が完成します。
5. データの安全性を高めるCSRF対策の重要性
インターネットの世界には、他人のフォームを勝手に操作しようとする悪い人がいます。その攻撃の一つに「CSRF(シーサーフ)」と呼ばれるものがあります。これは、ユーザーが知らないうちに、勝手に偽のデータを送信させられてしまう攻撃です。
これを防ぐために、CodeIgniterには「合言葉」を送る機能があります。送信元が正しい自分のサイトであることを証明するための秘密のコードを、フォームにこっそり埋め込むのです。この「合言葉」が一致しない送信は、サーバーが「怪しい!」と判断して拒否してくれます。
初心者の方は、「セキュリティを強化するために、フォームには必ずこの『合言葉のタグ』を入れる必要があるんだな」と覚えておけば大丈夫です。CodeIgniterでは csrf_field() という命令を書くだけで、この合言葉を自動で作成してくれます。
<form action="/contact/send" method="post">
<?= csrf_field() ?>
<input type="text" name="message">
<button type="submit">メッセージを送る</button>
</form>
6. 処理の最後を飾る「リダイレクト」の役割
フォームの送信が終わった後、そのままの画面で「更新ボタン(F5キーなど)」を押すと、同じデータが二重に送られてしまうことがあります。これを防ぐために使われるのが「リダイレクト」という技術です。
リダイレクトとは、処理が終わった瞬間に、別のページ(例えば「送信完了ページ」など)へユーザーを強制的に移動させることです。タクシーに乗って目的地に着いた後、運転手さんに「はい、次はあちらの受付へ行ってください」と案内されるようなイメージです。
CodeIgniterでは return redirect()->to('/thanks'); というコード一行で、別のページへ案内することができます。これにより、二重送信によるトラブルを防ぎ、ユーザーに「無事に終わったんだな」という安心感を与えることができます。
7. 実際のフォーム処理の流れをシミュレーション
これまでの学習を活かして、実際にお問い合わせフォームが動く際の流れを整理してみましょう。
- 表示: ユーザーがお問い合わせページにアクセスし、入力画面(ビュー)が表示されます。
- 入力・送信: ユーザーが名前などを入力し、送信ボタンを押します。データがコントローラーへ飛びます。
- チェック: コントローラーがバリデーションを行い、入力漏れがないか確認します。
- 保存・通知: データが正しければ、データベースに保存したり、管理者へメールを送ったりします。
- 完了: 全て終わったら、リダイレクト機能を使って「ありがとうございました!」という画面に移動します。
この5つのステップが、CodeIgniterにおけるフォーム処理の「黄金ルート」です。最初は複雑に感じるかもしれませんが、何度も繰り返すうちに「いつもの手順」として自然に身についていきます。
8. 開発を助けるヘルパー機能の活用
CodeIgniterには、フォーム作成をさらに楽にしてくれる「フォームヘルパー」という機能があります。これは、HTMLを直接書く代わりに、PHPの命令を使ってフォームの部品を作ることができる仕組みです。
例えば、form_open() という命令を使うと、先ほど説明した「合言葉(CSRF対策)」も含めた開始タグを自動で作ってくれます。初心者のうちは、通常のHTMLで書く方法と、このヘルパーを使う方法の両方を知っておくと、現場に出たときに柔軟に対応できるようになります。
// ヘルパーを読み込む
helper('form');
// フォームの開始タグを自動生成(CSRF対策も含む)
echo form_open('contact/submit');
// テキスト入力欄の生成
echo form_input('user_nickname', '匿名希望');
// フォームを閉じる
echo form_close();
実行結果は以下のようになります。
<form action="http://example.com/contact/submit" method="post" accept-charset="utf-8">
<input type="hidden" name="csrf_test_name" value="xxxxx">
<input type="text" name="user_nickname" value="匿名希望">
</form>
このように、プログラムが代わりにHTMLを組み立ててくれるので、書き間違いが減り、作業効率がぐんとアップします。