2018年06月07日
シンプルなPHP問い合わせフォームのコードを晒してみる
シンプルなPHPベースの問い合わせフォーム。
筆者はほとんどのサイトをWordPressで構築しているので、『Contact Form 7』などのプラグインを使う機会が多く、あまりこの手の自作PHPフォームは利用していない。
が、たまに利用機会はあるので、覚えておくとよいだろう。
誰かの助けになれれば幸いだ。
contact.php
フォーム部分を以下のように構築。
【contact_check.php】へとバトンを渡す。
<form id="contact_form" method="post" action="contact_check.php">
<input type="hidden" name="sub_actions" value="confirm">
<div class="contactform">
<table>
<tbody>
<tr>
<th>お名前<span class="required">必須</span></th>
<td><input size="40" type="text" name="contact_name" id="contact_name" placeholder="例) 佐藤太郎" /></td>
</tr>
<tr>
<th>メールアドレス<span class="required">必須</span></th>
<td><input size="60" type="text" name="contact_mail" id="contact_mail" placeholder="例)×××@example.com" /></td>
</tr>
<tr>
<th>お問い合わせ内容<span class="required">必須</span></th>
<td>
<textarea name="contact_comment" id="contact_comment" cols="63" rows="10" placeholder="ご要望・お問い合わせ内容"></textarea>
<p><input type="submit" value="確認画面へ"></p>
</td>
</tr>
</tbody>
</table>
</div>
</form>
※フォームバリデーションは割愛。『exValidation』がおすすめ。
contact_check.php
phpファイルの先頭(1行目)に、以下のように記述する。
フォームを介さずにいきなり【contact_check.php】にアクセスがあった際に、リダイレクトする。
<?php
if(!$_POST){
header('Location: contact.php');
}
session_start();
$_SESSION = $_POST;
?>
続いて、メインコンテンツ部分に以下のように記述。
確認用のtableを表示しよう。
送信ボタンで【contact_send.php】へとバトンを渡す。
戻るボタンは、単純にhistory.back()で戻る命令。
<form id="contact_form" method="post" action="contact_send.php">
<input type="hidden" name="sub_actions" value="confirm">
<div class="contactform">
<table>
<tbody>
<tr>
<th>お名前</th>
<td><?php echo htmlspecialchars($_POST['contact_name']);?></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><?php echo htmlspecialchars($_POST['contact_mail']);?></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><?php echo htmlspecialchars($_POST['contact_comment']);?></td>
</tr>
</tbody>
</table>
</div>
<div class="btn-area">
<input type="submit" value="送信" name="submit">
<input type="button" value="戻る" onClick="history.back()">
</div>
</form>
contact_send.php
言ってしまえばここが肝。最もややこしい。
phpファイルの先頭(1行目)に、以下のように送信命令を記述する。
11〜34行目は、サンキューメール。
38〜57行目は、ウェブ管理者への通知メールだ。
「サンプル株式会社」「info@example.com」のところは適宜変更していただきたい。
<?php
session_start();
mb_language("ja");
mb_internal_encoding("utf-8");
$to_user = $_SESSION['contact_mail'];
$title_user = 'この度はお問い合わせありがとうございます。';
$body_user .=
"\n"
."この度はお問い合わせいただき、誠にありがとうございます。\n"
."以下の内容で、お問い合わせを受け付けました。\n"
."\n"
."========================================\n"
."■お名前\n"
."".$_SESSION['contact_name']."\n"
."\n"
."■メールアドレス\n"
."".$_SESSION['contact_mail']."\n"
."\n"
."■お問い合わせ内容\n"
."".$_SESSION['contact_comment']."\n"
."========================================\n"
."\n"
."後ほど担当者よりご回答、ご連絡申し上げます。\n"
."今しばらくお待ちくださいませ。\n"
."\n";
$header_user = "From:" . mb_encode_mimeheader("サンプル株式会社") . "<info@example.com>\n";
$header_user .= 'X-Mailer: PHP/'. phpversion();
mb_send_mail($to_user, $title_user, $body_user, $header_user);
$to_webmaster = 'info@example.com';
$title_webmaster = '【お問い合わせフォーム】';
$body_webmaster .=
"\n"
."サンプル株式会社のお問い合わせフォームより、お客様からメールが送信されました。\n"
."以下の内容を確認し、お客様へ連絡してください。\n"
."\n"
."========================================\n"
."■お名前\n"
."".$_SESSION['contact_name']."\n"
."\n"
."■メールアドレス\n"
."".$_SESSION['contact_mail']."\n"
."\n"
."■お問い合わせ内容\n"
."".$_SESSION['contact_comment']."\n"
."========================================";
$header_webmaster = "From:" . mb_encode_mimeheader($_SESSION['contact_name']) . "<" . $_SESSION['contact_mail'] . ">\n";
$header_webmaster .= 'X-Mailer: PHP/'. phpversion();
mb_send_mail($to_webmaster, $title_webmaster, $body_webmaster, $header_webmaster);
session_destroy();
?>
送信命令だけで満足しないように。
一応メインコンテンツ部分も用意する必要がある。
「送信が完了しました」の一文を添えて、window.locationで元のページに転送しよう。
<p style="text-align:center;">送信が完了しました。(数秒後、元のページに戻ります。)</p>
<script type="text/javascript">
setTimeout(function() {
window.location.href = "contact.php";
}, 4000);
</script>