最低限の機能を備えたメールフォームを作ってみたい【願望】

色々なメールフォームプログラムは、
無料でもあるし、有料でも簡単に使えるものなど沢山ありますが
様々な場面を考慮し、かつ簡単に作れるようにするため、案件ごとで見れば不必要なプログラムまで内包しているものです。

そのせいで色々な制約や仕様に従う必要が出てきて逆にややこしいときがあります。
メールフォームプラグインなどの中身を見るとコアの部分は思ったより大したことしてなさそうなので、一度機能を削ぎ落として作ってみようかと思いました。

しかし本職がプログラマではないので、勘でオリジナリティ溢れるやり方をしてる可能性が高いです。あくまで参考のひとつとして、そして自分の勉強のためにやってみてるんだろうなーという優しい目で見てください。

 

■想定する構造

 

■手順1

メールフォーム以前の手順になりますが、
「入力」⇒「確認」⇒「完了」という流れで遷移させて、いきなり「確認ページ」に来ても「入力ページ」にリダイレクトするところまでやります。

ページ遷移だけで言えば、formタグもaタグと基本的に変わらなそうな予感がしますので、aタグのhrefと同様に絶対パスや相対パスでaction属性に設定して、サブミットすればページ遷移できました。

今回は「入力ページ」から「確認ページ」に行きたいので

となります。

次に、いきなり「確認ページ」に来ても「入力ページ」に戻す方法ですが、これは送信ボタン自体にもフォーム部品と同様にname値が指定できますので当然「確認ページ」にPOSTされるだろうと思い、「確認ページ」でPOST情報をprint_rしてみました。

バッチリやで!
ということで、confirm.phpの冒頭で

POST情報の中でname=”input”が空だったら、index.phpにリダイレクトして、exit()でそれ以降の処理を停止します。

これで手順1のタスクは完了。
送信ボタンだけだと寂しいのでなんとなくinput type=”text”をつけて「確認ページ」でも入力内容表示してそれっぽくしたのが下記ソース。

STEP1

 

■手順2

初歩中の初歩は出来たので、今後は実際に「入力」⇒「確認」⇒「完了」まで進みたいと思います。
あと完了ページにてコンバージョンタグを設置するときのことも考え、フォーム送信後、完了ページに来て、その場でリロードしても「入力ページ」に戻ってくれて、二重に計測されない設計をしたいと思います。

まずは「確認ページ」から「mail.php」に入力内容を飛ばして「完了ページ」に遷移したいと思います。

先ほどの「確認ページ」のソースからちょっといじって

確認してもらうためにPOST情報を表示して、hiddenフィールドも設定しておきます。
ソースで見ると見た目が違うだけで「入力ページ」と何も変わらないことが分かりました。

次に「mail.php」ですが、先ほどの応用して

メール送信のプログラム自体は後付けにしますので今は遷移だけ。
name=”confirm”が空なら、つまり「確認ページ」で「確認画面へ」のボタンを押して遷移してこなかった場合は「入力ページ」にリダイレクト。
name=”confirm”があれば「完了ページ」にリダイレクトです。

これで「入力」⇒「確認」⇒「完了」の流れが出来ました。

次に「完了ページ」でのリロード対策ですが、
まず「完了ページ」へはPOSTされてきたわけではなくリダイレクトされてきた訳ではないので先程までの方法では「入力ページ」にリダイレクトできません。
というかそもそもPOSTされてきたらリロードしてもPOST情報は背負ったままなので考え方が違いました。

なので考えた結果、下記のように

「mail.php」で「完了ページ」に遷移する際、SESSIONを持たせておきます。
そして「完了ページ」表示の際に、SESSIONを削除しておきます。
そうすれば「完了ページ」表示前はSESSIONを持っているが、表示後にはSESSION持ってないのでリロードしたら「入力ページ」に戻ります。

STEP2

この辺から、あやしくなってきました。
本職の人が見れば、なんだこの作りは…と怒られそうな予感もしますが、とりあえずこれ以降はまた追々書きます。

次回:最低限の機能を備えたメールフォームを作ってみたい【願望】パート2

投稿日:
カテゴリー: PHP

1件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です