blog

ブログ

シンプルな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>

一覧へ戻る