お問合せフォームをPHPで実装してみた!(2)

こんにちは、レッドインパルスアルバイターの秦です.

今回の記事では自動返信メールと入力値の引継ぎの実装について書いていきます.コードは前回の記事の続きを用います.まだ前回の記事を読んでいない方はこちらから読んできてください.

 

機能紹介

今回の自動送信メールはお問合せした人と運営側両方にメールを送る形になっています.メール内容は問い合わせた日時,フォームに記入した内容,任意の文面の追加です.また,入力値の引継ぎでは確認ページから入力ページに戻った際に再び入力させるという手間を省くために,前回入力したないようを引き継いで入力された状態で表示するといった機能です.

 

今回使う関数

メールを自動送信する際には”md_send_mail関数”を使います.この関数の基本的なパラメータは次の通りです.

md_send_mail( $to, $subject, $text, $header);

$to は宛先,$subject は件名,$text は本文,$header はヘッダーです.それぞれの変数を定義することでメールに自動的に記載されます.

 

自動送信メールの実装

前回の記事では入力ページと確認ページ,送信完了ページを作成しました.今回の自動送信メールの実装では前回作成した確認ページのSendボタンを押した際に送信完了ページに遷移すると同時にメールがお問合せした人と運営者側の両方に届くようにします.

 

問い合わせ側への自動返信メールの実装

前回の記事で<!DOCTYPE>の前に $page_flag について if 文を書いたと思います.その中の $page_flag=2; の下に以下のコードを追加してください.

// 変数とタイムゾーンを初期化
$header = null;
$auto_reply_subject = null;
$auto_reply_text = null;
date_default_timezone_set('Asia/Tokyo');

// ヘッダー情報を設定
$header = "MIME-Version: 1.0\n";
$header .= "From: Pragin <info@pragin.tech>\n";
$header .= "Reply-To: Pragin <info@pragin.tech>\n";

// 件名を設定
$auto_reply_subject = 'お問い合わせありがとうございます。';

// 本文を設定
$auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
下記の内容でお問い合わせを受け付けました。\n\n";
$auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$auto_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$auto_reply_text .= "学校名:" . $_POST['college'] . "\n";
$auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
$auto_reply_text .= "お問い合わせ内容:" . $_POST['message'] . "\n\n";
$auto_reply_text .= "Pragin";

// メール送信
mb_send_mail( $_POST['email'], $auto_reply_subject, $auto_reply_text, $header);

初めに,使う変数に null を代入することで初期化を行っています.次に,$auto_reply_textで本文を複数に分けて設定を行うことでコードを見やすくしてあります.$_POST[‘hogehoge’]でそれぞれの変数で入力情報を受け取っていることがわかると思います.

また,date_default_timezone_set関数でタイムゾーンを日本に設定を行うことで,お問合せ日時を日本時間で出力することが出来ます.更に,ヘッダー情報を入力することで送信者情報を正しく表示することが出来ます.以下の画像は実際に送信した際にお問い合せ側に届いたメールになります.

これで基本的な機能は実装出来ました.

 

運営側への自動返信メールの実装

次は運営側への自動送信メールを実装していきます.要領は先ほどと同様です.初めに,変数とタイムゾーンの初期化の部分に以下のコードを追加してください.

$admin_reply_subject = null;
$admin_reply_text = null;

$admin_reply_hogehoge は運営側へ送るメール用の変数になります.次に,お問い合せ側へのメール送信のための mb_send_mail 関数の下に以下のコードを追加してください.

// 運営側へ送るメールの件名
$admin_reply_subject = "お問い合わせを受け付けました";
    
// 本文を設定
$admin_reply_text = "下記の内容でお問い合わせがありました。\n\n";
$admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$admin_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$admin_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";

// 運営側へメール送信
mb_send_mail( 'hogehoge@gmail.com', $admin_reply_subject, $admin_reply_text, $header);

上記はお問い合せ側と同様に記載しているので説明は省きます.実行結果は以下の通りです.お問い合わせ側とは違う内容が表示されたと思います.

これでやっとこお問い合せフォームっぽくなりましたね.しかし,これでは確認ページから入力ページに戻った際に再び同じ内容を打ち直さなければならないと思います.これでは今どきのUXとしては最悪です.なので,次はBackボタンを押した際に入力値の引継ぎを行うコードを書いていきましょう.

入力値の引継ぎ

値を引き継ぐためには入力ページに PHP を追加していきます.まずは以下のvalue属性をそれぞれ name, college, email の input タグに追加してください.

  • name用
value="<?php if(!empty($_POST['name'])) { echo $_POST['name']; }?>"
  • college用
value="<?php if(!empty($_POST['college'])) { echo $_POST['college']; }?>"
  • email用
value="<?php if(!empty($_POST['email'])) { echo $_POST['email']; }?>"

これらの if 文の中身の説明をすると,指定した入力値(POSTパラメータ)が空でない場合(=何か入力されている)のみ,入力値をvalue属性に代入しています.

また,入力値の引継ぎで注意したいのはメッセージは inputタグではなく textareaタグであるので,要素の中ではなく開始タグと終了タグの間に PHP の if 文を書きます.なので,textareaタグからコードを書くと以下の通りになります.

<textarea type="text" name="message" id="text_data3" placeholder="*Message" rows="1000"
 cols="20" wrap="hard" maxlength="1600">
    <?php if(!empty($_POST['message'])) { echo $_POST['message']; }?>
</textarea>

 

次回予告

以上で自動送信メールと入力値の引継ぎの実装が完了しました.次回は以下の項目の更にお問い合わせフォームを便利にするためのその他の機能について書いていきます.次回の記事もよろしくお願いします.

  • formタグでの遷移防止対策
  • 正規表現(エラーチェック)
  • 多重送信防止
  • 迷惑メールに送られないための対策