初心者も分かるようPHPメールフォームを解説
メールフォームは大きく別けて3つで構成
メールフォームはどんなに項目が増えても 主に3つ、ないし2つで構成されます。
- フォーム (ユーザーが記入するところ) …mail.php
- 入力内容確認ページ …check.php
- 送信完了ページ(実際にmb_sendmailが実) …send.php
この3つで構成されます。
mail.php
mail.phpで入力内容をチェックします。PHPでももちろん入力内容はチェックできますが、
ガラケーの入力内容のチェックでなければjQueryのプラグインを使うのがナイスです。
check.php
mail.phpから渡された内容を$_Sessionに格納します。
そして、確認画面として、入力内容を表示させます。
mail.php
$_Sessionを利用して、mb_sendmailを実行してメールを送信します。
とにかく、一番大事なこと!!!
さきほども書きましたとおり、メールフォームは難しいです。
なので、今回のプログラムをコピペで自分で項目を増やしたり出来るようになれば それだけでOKなんです。
ぜひ覚えてほしい動作が
と、いうフローです。この動作は、どんなプログラムになっても、DBと連動したプログラムでも非常によく使います。
$_Postの概要
$_Postはフォームの入力項目のデータを次のページに送ることが出来ます。
ところがこの$_Postがデータを送ることが出来るのは次のページまで。
今回のプログラムはフォームの入力値を次の『次』のページ(送信実行)まで入力内容を引き継がないといけませんから、
$_POSTでは不向きです。
$_Postから$_Sessionに格納する
そこで、フォームで入力した内容($_Post)を$_Sessionに格納してあげることで $_Sessionを消さない限りはデータを引き継げるようにしてあげます。
これだけで、$_Sessionを消さない限りは、フォームの入力値は保たれますから、$_Sessionを利用してメールを送信します。
今回のように、確認画面付のメールフォームなら$_Sessionを利用するのが最適と言えます。
以下は補足ですので、興味のある方、ガラケーで今後何か作りたいと考えている方はお読み下さい。
注意と補足
補足
今回だと、次の次のページまで内容を引き継ぐために$_Sessionを使いますが、消さない限り入力値が引き継がれるということで、会員制サイトのログイン情報の管理にも$_Sessionは使われます。
ログアウトの処理でSessionを破棄し、元のページに戻るわけですね。
また、今回のケースだと$_Sessionを利用を駆使してメールフォームを作るわけですが、$_Postだけでも次の次のページまで内容を引き継ぐことも可能です。
次のページでも、もう一度$_Postに代入すれば出来ますが、隠しフォーム(hidden)でHTML上にやりとりを残さなくてはなりません。
ページのソースに表示されたり、FirebugなどHTMLソースをいじることができるアドオンを使えば改ざん可能ですからあまり現実的な対応とは言えません。
注意
この世にスマホが登場する前からPHPでゴハン食べてるITかあさんは当たり前のことなんですが、ガラケーはこの$_Sessionに対応していません。(中にはOKの端末もあるようですが)
携帯の簡易的なメールフォームに確認画面が無いケースが多いのはこのためです。
WEBプログラマーは極力HTMLのソース上でやりとりはしません。(と、いうかやってはダメ。悪さをするやからがいるため)
ですから、ガラケーのメールフォームは入力したら即次のページで送信を実行させるんです。
ガラケーだとNGの$_Sessionですが、今後スマートフォンが携帯の主流となっていくであろう世の中の流れを考慮すると、$_Sessionを利用したメールフォームで十分だと私は思います。
携帯については確認画面無しで即効送信させる簡易的なもので十分です。
ちなみに、ガラケーの会員制サイトでは$_Sessionを保持できないために、URLに埋めこむ形を利用して処理を行います。