プログラミングナレッジKnowledgeSide

2016.06.13

PHPで自動返信メール機能付きのコンタクトフォームを作成する(確認画面)

前回に引き続き、今回もPHPでのコンタクトフォーム作成についてまとめていきます。入力画面に引き続き、フォームの入力情報を表示させる確認画面を作成していきます。

 

この確認画面では、入力画面で入力された情報を表示させたのち、POST変数をSESSION変数に格納する動作までを行います。

 

コンタクトフォームの確認画面

 

入力画面と同じくHTMLで作成します。今回は入力画面のフォーム部分をベースに一部変更するだけの形になります。またこの画面ではPOST変数をSESSION変数に格納するのでファイルの先頭にPHPを記述します。

 

【check.php】※一部抜粋

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

〜 一部省略 〜

<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>

 

まず、プログラム先頭に記述されているPHPコードですが、session_start()でセッションを開始します。次の条件分岐ではフォーム入力からの遷移でないアクセスの場合にフォーム入力画面へリダイレクトさせています。最後にPOST変数をSESSION変数に格納します。

 

次にフォーム部分ですが、基本的には入力画面のinputなどのフォーム部品がなくなり、代わりに入力内容を表示させるPHPのプログラムが入っている形になります。ただし、フォームのaction属性ではPOST形式の送信先を送信画面であるsend.phpを指定します。

 

入力内容表示のPHPプログラム部分ですが、htmlspecialchars()でクロスサイトスクリプティング(XSS)対策をします。こうすることで万が一フォームの入力情報に悪質なプログラムを埋め込まれても、HTMLタグやスクリプトなどのコードを通常の文字列として表示し、未然に防ぐことができます。

 

表示させる項目は各inputなどのフォーム部品に入力された情報を受け取るので、POST変数の配列要素名を対応するinputのname属性を指定します。そして続くENT_QUOTESでシングルクォートとダブルクォートの両方を置き換え、UTF-8の文字コード指定を行います。

 

しかし、複数選択のチェックボックスの値を表示させるためには、この方法では表示させることができません。選択された項目の値が配列で格納されているため、foreach文を使って一つずつ値を取り出す必要があります。$valueが値の変数になります。

 

そして値はそれぞれechoで文字列として出力します。ボタンについて入力画面に戻る方には、入力画面へのリンクをつける、もしくはjavascriptのhistory.back()で対応し、送信ボタンにはtype属性にsubmitの値を入れます。

 

 

以上がコンタクトフォームの確認画面になります。次回記事「PHPで自動返信メール機能付きのコンタクトフォームを作成する(送信画面)」では、これらの入力情報をメールで送信させるための送信画面を作成していきます。

 

  • このエントリーをはてなブックマークに追加
>>記事一覧に戻る