2020/04/30 2:30
[PHP]自作メールフォームの作成方法をご紹介
PHP製の自作のメールフォーム作成の方法を紹介します。
これをベースにカスタムするのもよろしいかと思います。
既存のものでもいいのですが、不要なものが多かったりカスタムしにくかったり、オリジナルのフォームが作りにくかったりしますよね。
今回、コード書くと長くなるので、デモページとサンプルファイルのダウンロードっていう形での紹介になります。
メールフォーム自作した理由
まずは今回、フォームを自作した理由がコレ
・これまでは既存のものを使ってた
・既存のものでもいいんだけど「戻る」ボタンの挙動があんまよろしくなかった
・不要な記述多すぎてmail.phpファイルが見づらかった
・ファイル添付とか文字化け対応とかちゃんとやっときたい
・今後もカスタムしやすい方がいい
まずはベースになる簡単な記述を作ってからひたすらカスタムで追記していきまして、これらの事をいろいろと追加していきました。
注意点
「確認ボタン」「送信ボタン」「戻るボタン」「メールアドレスの項目」はフォーム作成の際に必須な項目となります。
作成時にどれかが抜けてるとエラー吐くと思いますのでご注意を。
その辺りをフォーム内で使わない場合は、確認時や送信時に動く記述の部分の修正も必要だという事を覚えておいてください。
WPの場合はSESSIONを有効にする
セッションの使用にphp/init.phpファイルにコレが必要
・セッション制御で不正を防止
cookieと似たような機能で「セッション」ってのがありまして。
何かリロードとか多重送信(ボタン連射)の防止や対策としてセッションを使ってます。
フォームから確認画面に行った時にセッション発動!
↓
送信時にセッションあるかチェックの上で実行!すぐにセッション削除!
みたいな仕様になってます。
WPの場合、まずは「セッションを使う為の関数」を記述しておく必要があります。
・テーマフォルダ「functions.php」ファイル内へ
// SESSIONを使う為に必要な記述
function init_sessions() {
if (!session_id()) {
session_start();
}
}
add_action('init', 'init_sessions');
ファイルのダウンロード
はい、今回コードが長くなってしまうのでDEMOページでの確認とダウンロード形式にしてます。
ちなみにDEMOページは適当にcss当ててる状態ですが、サンプルファイルにはほぼcssナシなのでご了承ください。
DEMO PAGE : http://phper.pro/demo_mailform
メールフォームファイル一式DL : ダウンロード
仕様・概要
1枚のファイル内に「メールフォーム制御してるPHPの記述」と「最初に開いた時のフォーム」と「確認用の画面」と「サンクス用の画面」の全てを記述してて、処理内容によって分岐させてる感じです。
1枚の方が作業がしやすかったのでその形で作りましたが、ファイルを切り分けて使いたいという方は切り分けて使ってもいいかと思います。
1つのサイトにフォームが複数ある場合(問合わせページと他ページ用と…みたいな)は、切り分けた方が使い勝手いいかもです。
・内部での動作手順
①
フォーム入力して「確認」ボタン押下
②
同ページを読み込んで「確認用画面を表示」
③
そのまま「送信」すると、再び同ページを読み込んで実際に送信
「戻る」ボタンだと、再び同ページを読み込んで入力したvalue値を反映させた上で再度フォーム入力画面が表示
④
サンクスページが表示されて完了
・分岐のカラクリ
ファイル内の仕組みを簡単に説明します。
仕組みとしては、あらかじめ「$page_flag」っていう変数を用意しておいて、中身を「$page_flag=1」とか「$page_flag=2」とかにして、読み込んだ時の処理を分岐させてます。
例)
$page_flag=1の時は確認画面を出す処理を行う
or
$page_flag=2の時は送信処理とサンクス表示の処理を行う
みたいなシンプルな分岐です。
これをやる事によって入力フォームに入ってる文字列とか値の受け渡しがしやすいので、「戻る」ボタンを押してもすんなりと元の状態へと戻す事が簡単にできる訳です。
メールフォームの使い方
基本的にそのまま使っていってもらえる形ですが、カスタムする際にはある程度の理解は必要かもです。
【デフォのルール】
①
「確認」へのボタンと、実際の「送信」のボタンに記述する
「name="●●"」の値が"btn_confirm"と"btn_submit"で固定となってます。
これは設定ファイル内の記述でその名前での処理が行われるように固定した形で書いてるからです。
例)
<input type="submit" name="btn_confirm" value="確認">
例)
<input type="submit" name="btn_submit" value="送信">
※もちろん変えてもいいんですが、他の変更箇所も変更を忘れないようにすること。
②
ファイル添付の際も「name="attachment_file[]"」と固定になります。
2個目のファイル添付が必要でも同じように「name="attachment_file[]"」を増やしてく形で大丈夫です。
配列に入っていく形となります。
例)
<input type="file" name="attachment_file[]">
あまり使う事はないと思いますが、せっかくファイル添付可能な仕様にする事ができたので一応デフォで付けてあります。
③
「戻るボタン」の挙動
「戻る」を押した時の対応として、「一度確認ボタンまで行ってたら戻った時に、現在入力されてた内容を再度呼び出す」という処理をしてます。
それに伴い、各inputタグ等の「value」内に必要な記述があります。
※inputのタイプによって書き方が変わります
例)
・テキスト
<input type="text" name="名前" value="<?php if( !empty($clean['名前']) ){ echo $clean['名前']; } ?>">
・セレクトボックス
<select name="年齢">
<option value="1" <?php if( !empty($clean['年齢']) && $clean['age'] == "1" ){ echo 'selected'; } ?>>20~30歳</option>
</select>
・テキストエリア
<textarea name="メッセージ"><?php if( !empty($clean['メッセージ']) ){ echo $clean['メッセージ']; } ?></textarea>
・ラジオボタン
<label><input type="radio" name="性別" value="男性" <?php if( !empty($clean['性別']) && $clean['性別'] == "男性" ){ echo 'checked'; } ?>>男性</label>
・日付(Date)
<input type="date" name="指定日" value="<?php if(!empty($clean['指定日'])){echo $clean['指定日'];}else{echo date('Y-m-d');}?>">
「既に値があって、なおかつ〇〇なら…」みたいな分岐がvalueに入ってる事で、「戻る」処理をしても表示してくれます。
④
「メールアドレス」のバリデーション設定
メールアドレスの場合もnameの値を「メールアドレス」としてください。変更する場合は設定箇所も変更してください。
2重確認用のフォームはnameの値を「メールアドレス(確認)」にしてください。全角カッコです。
⑤
その他
・ファイル添付
ファイルの容量制限を指定する箇所がファイル内にあります。
デフォは1枚につき1M(1,000,000BT)にしてます。
・バリデーション
バリデーションは基本的にはinputタグに「required」を記述する形や、Javascriptでの制御でお願いします。
一応メアドの分はバリデーション処理がありますが、クローム優秀なので他の部分はrequired付けてるだけです。
まとめ
①
WPの場合はセッションの記述を書く
②
ルールに従ってnameの値を設定・記述する
確認ボタン「name="btn_confirm"」
送信ボタン「name="btn_submit"」
戻るボタン「name="btn_back"」
メールアドレス「name="メールアドレス"」
メールアドレス2重確認用「name="メールアドレス(確認)"」
ファイル添付「name="attachment_file"」
ファイル添付2個目「name="attachment_file2"」
※その他のname値は自由
③
ファイルの添付とか不要なら消してOK
④
バリデーションはフォーム自体に自力でつける
ちなみに送信先メールアドレスとBcc設定はカンマ区切りで複数いけます。
その他、未実装箇所について
取り急ぎ簡単なフォームの実装という形で紹介してます。
後は一応、使って行く上で懸念となる箇所も考えておきました。
・セキュリティ面&ウィルス対応は?
→一切ないでの何かしら考えた方がいいです。
簡単に一部の対策のみ記事書きました↓
自作メールフォームのセキュリティ対策の一部を簡単にご紹介 : https://phper.pro/585
・メール連射対応は?
→多分セッション使ってるから大丈夫だとは思うけど完璧ではないです。
・文字化け対策は?
→このフォームに関しては文字化け対応できてません!
文字化け対策の方法はあるので自力で頑張ってカスタムしてみてください。
・その他、予期せぬトラブル等
この辺の事は実際に起こってみないと分からない事なんですが、一応念頭に入れておくべき事かなと。
なお、このメールフォームの使用による苦情は受け付けておりません。
あくまで完璧なものとしてリリースしてる訳でもないので、基本はカスタムして使う、セキュリティ面強化の上使う、等の工夫は必要です、という事になりますのでご注意ください。
それでもフォーム設置ムズい!という人は
上記でも「メールフォームの設置とかよく分からない!」っていう方は、イージーメールフォームというものもあったりするので、こういったサービスを使ってみるのもアリかもしれません。
では現場から以上です!
1092