PHPで確認画面と自動返信メールができるコンタクトフォーム画面を作る

コンタクトフォームに入力されたら内容を確認する画面を表示し、最後に自動でメール返信する機能を持ったコンタクトフォームをPHPで作る方法です。

確認画面でやることは以下の通り。

  • 入力された内容の確認
  • POSTをSESSIONに格納

 

なお、入力画面からPOSTで情報が送られている前提とします。(今回作るのは入力情報を確認する画面です。)

確認画面はcheck.phpとします。

 

確認画面のコード

form.phpはフォームの入力画面だと思ってください。

<?php 
session_start();
if(!$_POST){
  header('Location: ./form.php');
}
$_SESSION = $_POST;
?>

<!-- <!DOCTYPE html>などは省略 -->

<form id="mail-form" action="./send.php" method="post">
  <table>
      <thead>
        <tr>
          <td colspan="2">入力内容確認</td>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>お名前</th>
          <td><?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>メールアドレス</th>
          <td><?php echo htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>電話番号</th>
          <td><?php echo htmlspecialchars($_POST['tel'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>URL</th>
          <td><?php echo htmlspecialchars($_POST['url'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>性別</th>
          <td><?php echo htmlspecialchars($_POST['sex'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>お住まいのエリア</th>
          <td><?php echo htmlspecialchars($_POST['location'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>お問い合わせ項目</th>
          <td>
           <?php 
            foreach ($_POST['check'] as $value) {
              echo htmlspecialchars("{$value},", ENT_QUOTES, 'UTF-8');
            };
           ?>
          </td>
        </tr>
        <tr>
          <th>件名</th>
          <td><?php echo htmlspecialchars($_POST['subject'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
        <tr>
          <th>お問い合わせ内容</th>
          <td><?php echo htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'); ?>
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td><a href="./form.php"><button type="button" id="back-input" name="back-input">入力画面へ戻る</button></a>
          </td>
          <td><button type="submit" id="submit-send" name="submit-send">送信する</button>
          </td>
        </tr>
      </tfoot>
  </table>
</form>

 

解説

セッション関連はファイルの一番上に書くのがいいでしょう。

まずはsession_start関数でセッションを開始します。

次のif文ではフォームの入力画面からのPOSTデータではない場合、フォーム画面へリダイレクトさせています。

入力画面からのPOSTデータと判定できたら、POSTをSESSION変数に格納します。

 

フォーム本体の部分は基本的に送られてきたPOSTデータを表示する形になります。

htmlspecialchars関数でXSS対策を忘れないようにしましょう。

「こんな長い関数いちいち書きたくない!」という場合はhtmlspecialchars関数を使ったfunctionを作り、1つのファイルとして保存しておくといいと思います。

そのファイルをインポートしてfunctionを呼び出して使いましょう。functionは短い名前にするのがおすすめ。

また、ENT_QUOTESでシングルクォートとダブルクォートの両方を変換し、文字コードはUTF-8としておきます。

 

表示させる項目は入力画面から送られてきたPOSTデータの<input>のname属性を指定します。

ただし、「お問い合わせ項目」のように複数選択できるチェックボックスは、選択された複数の項目が連想配列としてPOSTに格納されます。

というわけでforeach文を使って連想配列の値を全て出力しましょう。echoで文字列として出力すればいいでしょう。

 

入力画面に戻るボタンは入力画面へのリンクにするか、JavaScriptのhistory.back()で戻るようにします。

<a href="javascript:history.back();">入力画面へ戻る</a>

送信ボタンにはtype=”submit”を入れて送信できるようにします。

コンタクトフォームの確認画面はこんな感じでいいと思います。