noseblog

menu

2019.5.10

HTMLとPHPのみでお問い合わせフォームを作る方法[コピペok]

HTMLとPHPでお問い合わせフォームを実装したので、実装方法をメモをします

以下の流れで書いていきます。

  • フォームの項目をhtmlで記述する(index.html)
  • 確認画面を作る(confirmation.php)
  • 完了画面を作る(mail.php)
  • 想定されるエラーに対する解決策

formをhtmlで記述する(index.html)

index.htmlを作成し以下を記述します

See the Pen
qGObWY by Yuta (@nose_free)
on CodePen.

<action=”confirmation.php” method=”post”>の記述で確認画面(confirmation.php)に各項目に入力されたデータをPOSTで送信しています

確認画面を作る(confirmation.php)

confirmaion.phpを作成しbody内に以下を記述します

  1. <form action="mail.php" method="post">
  2.     <h2>確認画面</h2>
  3.     <table border="1">
  4.       <tr>
  5.         <td>名前</td>
  6.         <td><?php echo $_POST["name"]; ?></td>
  7.       </tr>
  8.       <tr>
  9.         <td>メールアドレス</td>
  10.         <td><?php echo $_POST["mail"]; ?></td>
  11.       </tr>
  12.       <tr>
  13.         <td>題名</td>
  14.         <td><?php echo $_POST["subject"]; ?></td>
  15.       </tr>
  16.       <tr>
  17.         <td>問い合わせ内容</td>
  18.         <td><?php echo $_POST["content"]; ?></td>
  19.       </tr>
  20.     </table>
  21.     <input type="submit" value="送信"/>
  22.     <a href="index.html">戻る</a>
  23.   </form>
  24.   <!-- POSTの中身をSESSIONへ受け渡す -->
  25.   <?php
  26.   session_start() ;
  27.   $_SESSION["name"] = $_POST["name"];
  28.   $_SESSION["mail"] = $_POST["mail"];
  29.   $_SESSION["subject"] = $_POST["subject"];
  30.   $_SESSION["content"] = $_POST["content"];
  31.   ?>

下部でSESSIONにPOST内の変数を代入しています。この記述がないと次のmail.phpでPOST内変数がNULLになることがあります。

完了画面を作る(mail.php)

confirmaion.phpを作成しbody内に以下を記述します

  1. <?php
  2.   mb_language("Japanese");
  3.   mb_internal_encoding("UTF-8");
  4.   session_start();
  5.   $to = /*宛先のメールアドレス*/;
  6.   $subject = htmlspecialchars($_SESSION['subject']);
  7.   $name = htmlspecialchars($_SESSION['name']);
  8.   $mail = htmlspecialchars($_SESSION['mail']);
  9.   $content = htmlspecialchars($_SESSION['content']);
  10.   $header = "From:$mail";
  11.   $body = "お名前"."\n"."$name"."\n\n"
  12.   ."メールアドレス"."\n"."$mail"."\n\n"
  13.   ."題名"."\n"."$subject"."\n\n"
  14.   ."お問い合わせ内容"."\n"."$content"."\n\n";
  15.   ?>
  16.   <?php if((mb_send_mail($to,$subject,$body,$header))) : ?>
  17.     <p >メールの送信が完了しました</p>
  18.   <?php else : ?>
  19.     <p>メールの送信が失敗しました</p>
  20.   <?php endif ; ?>
  21.   <a href="index.html">戻る</a>

想定されるエラーに対する解決策

メールが届かない

SMTPサーバーにより送信したメールが迷惑メールとして判定されブロックされている可能性があります。その場合はphp.iniのsmtp_portの値を587とすることで解決できるかと思います