【問題解決】メールフォームの送信テストが失敗する件 その3

Bootstrap
スポンサーリンク

こんにちは朱夏です。

そろそろこの問題を解決したいところです。
早速やっていきたいと思います。

前回、以下の解決の糸口を見つけました。

mb_send_mailの$toの指定に、メールアドレスを直接入力している場合、
フォームの送信に成功した。

確認画面を表示させているメールアドレスと同じものをコピーして持ってきているのに何故?という謎がありますが、それはそれとして以下の仮説が成り立ちます。

仮説1:$toに指定している $_POST[‘mailaddress’] の書き方に問題がある

こちらの公式マニュアルを見ると、$_POSTの中身はシングルクォーテーションではなくダブルクォーテーションで括られている様です。

ダブルクォーテーションとシングルクォーテーションの違いをいまいち良く解っていなかったので、ちょっと調べてみました。
こちらのサイトにある様に、変数の展開処理を行うかどうかが違うようです。

 

検証:ダブルクォーテーションに書き換えてみる

やれることは何でも試してみましょう。
ダブルクォーテーションに書き換えて送信してみます。

 

結果:エラーに変化なし

コードの中にある全ての$_POST[‘mailaddress’]を$_POST[“mailaddress”]に変更しましたが結果は変わりませんでした。
ダブルクォーテーションで括る範囲を変えてみても、今度は[]が反応してコード自体がエラーで表示されないといった事態になってしまいました。

めげずに次の検証に行ってみましょう。

 

仮説2:どこかのタイミングで中身が消えている

確認画面でメールアドレスを表示させた後、代入されていたメールアドレスが消えてしまっているのではないかという可能性を探ってみます。
各パラメーターの中身がわかる様に、コメントアウトしていたvar_dump($_POST);を復活させました。

 

検証:dumpの記録を追って変化を確認する

早速やっていきます。
初期は何もない状態です。

array(0) { }

 

次に、確認画面へ遷移した時の情報です。
ちゃんと情報が入っていることが確認できます。

array(3) { [“mailaddress”]=> string(19) “xxxxxxxx@yahoo.co.jp” [“inquiry”]=> string(27) “問い合わせ内容です” [“btn_confirm”]=> string(15) “内容確認へ” }

 

最後に、送信完了画面です。
ここでとんでもないものが代入されている事が判明しました。

array(3) { [“btn_submit”]=> string(6) “送信” [“mailaddress”]=> string(121) ”
Notice: Undefined variable: _post in C:\xampp\htdocs\formtest\index.php on line 107
” [“inquiry”]=> string(121) ”
Notice: Undefined variable: _post in C:\xampp\htdocs\formtest\index.php on line 108
” }

 

mailaddress、ついでにinquiryにもエラーメッセージが代入されていました。
メッセージ内容を訳すと、107行目、108行目の_postが未定義の様です。

対象の行を確認してみます。

<input type="hidden" name="mailaddress" value="<?php echo $_post["mailaddress"];?>">
<input type="hidden" name="inquiry" value="<?php echo $_post['inquiry'];?>">

 

正直どこが間違っているかパッと見解らなかったので、コードの打ち直しを実施してみました。
修正後のコードがこちら。

<input type="hidden" name="mailaddress" value="<?php echo $_POST["mailaddress"]; ?>">
<input type="hidden" name="inquiry" value="<?php echo $_POST['inquiry']; ?>">

 

これで検証してみましょう。

結果:送信成功!

 

一体何を間違えていたのか、並べて比較してやっと解りました。

× : $_post
〇 : $_POST

 

間違えて小文字で書かれていたようです。
送信された内容も、文字化けなどなくちゃんと表示されました。

 

まとめ

3日もかけて試行錯誤しましたが、最終的な問題が大文字と小文字を間違えていたという、初歩的なミスが原因でした。

というわけで、問題解決です。
完成した問い合わせフォームのコードを公開して、今回は終わりたいと思います。

 

<?php
// 入力確認部分をコメントアウト
// var_dump($_POST);

// 変数の初期化
$page_flag = 0;

// 日本語設定
mb_language('ja');
mb_internal_encoding('UTF-8');

if( !empty($_POST['btn_confirm']) ) {
   $page_flag = 1;
} elseif( !empty($_POST['btn_submit']) ) {
   $page_flag = 2;
   // メール送信
   // データ初期化
   $auto_header = null;
   $auto_reply_subject = null;
   $auto_reply_text = null;
   $admin_reply_subject = null;
   $admin_reply_text = null;
   date_default_timezone_set('Asia/Tokyo');

   // ヘッダー情報初期化
   $auto_header = [
      "MIME-Version" => "1.0",
      "From" => "xxxxx@gmail.com",
      "Reply-To" => "xxxxx@gmail.com"
   ];

   // 件名
   $auto_reply_subject = 'お問い合わせありがとうございます。';

   // 本文
   $auto_reply_text = "お問い合わせいただき、ありがとうございます。下記の内容でお問い合わせを受け付けいたしました。(このメールは自動返信で送信しております。回答までしばらくお待ちください。)\n\n";
   $auto_reply_text .= "受付日時:" . date("Y-m-d H:i") . "\n";
   $auto_reply_text .= "お名前:" . $_POST['lastname'] . $_POST['firstname'] . "\n";
   $auto_reply_text .= "メールアドレス:" . $_POST['mailaddress'] . "\n\n";
   $auto_reply_text .= "お問い合わせ内容:" . $_POST['inquiry'] . "\n\n";
   $auto_reply_text .= "○○事務局";
   
   // 送信
   mb_send_mail( $_POST['mailaddress'], $auto_reply_subject, $auto_reply_text, $auto_header);
   
   // 自分で受け取るメール
   // 件名
   $admin_reply_subject = "お問い合わせを受け付けました";
   
   // 本文
   $admin_reply_text = "お問い合わせを受信しました。\n\n";
   $admin_reply_text .= "受付日時:" . date("Y-m-d H:i") . "\n";
   $admin_reply_text .= "お名前:" . $_POST['lastname'] . $_POST['firstname'] . "\n";
   $admin_reply_text .= "生年月日:" . $_POST['barthday'] . "\n";
   $admin_reply_text .= "メールアドレス:" . $_POST['mailaddress'] . "\n";
   $admin_reply_text .= "住所:" . $_POST['addnum'] . $_POST['topaddress'] . $_POST['address'] . "\n\n";
   $admin_reply_text .= "お問い合わせ内容:" . $_POST['inquiry'] . "\n\n";
   $admin_reply_text .= "○○事務局";

   // メール送信
   mb_send_mail( 'xxxxx@gmail.com', $admin_reply_subject, $admin_reply_text, $auto_header);
}

?>

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8"> 
        <title>問い合わせフォーム</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        <link rel="stylesheet" href="css/style.css">
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
        <script src="https://kit.fontawesome.com/da0fa6be04.js" crossorigin="anonymous"></script>

       <!--[if lt IE 9]>
       <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
       <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
       <![endif]-->
    <script src="js/sample.js"></script>
    </head>
    <body>
      <!-- 問い合わせフォーム -->
      <div class="container">
         <h3>問い合わせフォーム</h3>

         <?php if( $page_flag === 1 ): ?>
         <!-- page_flagが1の時確認ページ -->
         <form method="post" action="">
            <!-- 氏名 -->
            <label class="mt-2 mb-0">氏名</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <p><?php echo $_POST['lastname']; ?></p>
               </div>
               <div class="col-auto">
                  <p><?php echo $_POST['firstname']; ?></p>
               </div>
            </div>
            <!-- 氏名ここまで -->
            <!-- 生年月日 -->
            <label class="mt-2 mb-0">生年月日</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <p><?php echo $_POST['barthday']; ?></p>
               </div>
            </div>
            <!-- 生年月日ここまで -->
            <!-- メールアドレス -->
            <label class="mt-2 mb-0">メールアドレス</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <p><?php echo $_POST['mailaddress']; ?></p>
               </div>
            </div>
            <!-- メールアドレスここまで -->
            <!-- 郵便番号 -->
            <label class="mt-2 mb-0">郵便番号</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <p><?php echo $_POST['addnum']; ?></p>
               </div>
            </div>
            <!-- 郵便番号ここまで -->
            <!-- 住所 -->
            <label class="mt-2 mb-0">住所</label>
            <div class="form-row align-items-center">
               <div class="col-auto form-group">
                  <p><?php echo $_POST['topaddress']; ?></p>
               </div>
               <div class="col-auto form-group">
                  <p><?php echo $_POST['address']; ?></p>
               </div>
            </div>
            <!-- 住所ここまで -->
            <!-- 問い合わせ内容 -->
            <label class="mt-2 mb-0">お問い合わせ内容</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <p><?php echo $_POST['inquiry']; ?></p>
               </div>
            </div>
            <!-- 問い合わせ内容ここまで -->
            <!-- ボタン -->
            <div class="form-row mt-2">
               <div class="col-auto">
                  <button type="submit" name="btn_back" class="btn btn-secondary" value="戻る">戻る</button>
                  <button type="submit" name="btn_submit" class="btn btn-primary" value="送信">送信</button>
               </div>
            </div>
            <!-- ボタンここまで -->
            <!-- 隠し情報 -->
            <input type="hidden" name="lastname" value="<?php echo $_POST['lastname'];?>">
            <input type="hidden" name="firstname" value="<?php echo $_POST['firstname'];?>">
            <input type="hidden" name="barthday" value="<?php echo $_POST['barthday'];?>">
            <input type="hidden" name="mailaddress" value="<?php echo $_POST['mailaddress'];?>">
            <input type="hidden" name="addnum" value="<?php echo $_POST['addnum'];?>">
            <input type="hidden" name="topaddress" value="<?php echo $_POST['topaddress'];?>">
            <input type="hidden" name="address" value="<?php echo $_POST['address'];?>">
            <input type="hidden" name="inquiry" value="<?php echo $_POST['inquiry'];?>">
            <!-- 隠し情報ここまで -->
         </form>
         <!-- page_flagが1の時確認ページここまで -->

         <!-- page_flagが2の完了ページ -->
         <?php elseif( $page_flag === 2): ?>
         <p class="text-center">送信が完了しました。</p>
         <form action="">
         <div class="form-row mt-2">
               <div class="col-auto">
                  <button type="submit" name="btn_back" class="btn btn-secondary" value="戻る">戻る</button>
               </div>
            </div>
         </form>
         <!-- page_flagが2の完了ページここまで -->

         <?php else: ?>

         <!-- page_flagが0の入力ページ -->
         <form method="post" action="">
            <!-- 氏名 -->
            <label class="mt-2 mb-0">氏名</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <input type="text" name="lastname" class="form-control" placeholder="苗字">
               </div>
               <div class="col-auto">
                  <input type="text" name="firstname" class="form-control" placeholder="名前">
               </div>
            </div>
            <!-- 氏名ここまで -->
            <!-- 生年月日 -->
            <label class="mt-2 mb-0">生年月日</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <input type="date" name="barthday" class="form-control">
               </div>
            </div>
            <!-- 生年月日ここまで -->
            <!-- メールアドレス -->
            <label class="mt-2 mb-0">メールアドレス</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <input type="email" name="mailaddress" class="form-control" id="exampleInputEmail1" placeholder="sample@email.co.jp">
               </div>
            </div>
            <!-- メールアドレスここまで -->
            <!-- 郵便番号 -->
            <label class="mt-2 mb-0">郵便番号</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <input type="text" name="addnum" class="form-control" id="inputZip" placeholder="000-0000">
               </div>
            </div>
            <!-- 郵便番号ここまで -->
            <!-- 住所 -->
            <label class="mt-2 mb-0">住所</label>
            <div class="form-row align-items-center">
               <div class="col-md-3 form-group">
                  <select class="form-control" name="topaddress" id="exampleFormControlSelect1">
                     <option value="">--都道府県--</option>
                     <option value="北海道">北海道</option>
                     <option value="青森県">青森県</option>
                     <option value="岩手県">岩手県</option>
                     <option value="宮城県">宮城県</option>
                     <option value="秋田県">秋田県</option>
                     <option value="山形県">山形県</option>
                     <option value="福島県">福島県</option>
                     <option value="茨城県">茨城県</option>
                     <option value="栃木県">栃木県</option>
                     <option value="群馬県">群馬県</option>
                     <option value="埼玉県">埼玉県</option>
                     <option value="千葉県">千葉県</option>
                     <option value="東京都">東京都</option>
                     <option value="神奈川県">神奈川県</option>
                     <option value="新潟県">新潟県</option>
                     <option value="山梨県">山梨県</option>
                     <option value="長野県">長野県</option>
                     <option value="富山県">富山県</option>
                     <option value="石川県">石川県</option>
                     <option value="福井県">福井県</option>
                     <option value="岐阜県">岐阜県</option>
                     <option value="静岡県">静岡県</option>
                     <option value="愛知県">愛知県</option>
                     <option value="三重県">三重県</option>
                     <option value="滋賀県">滋賀県</option>
                     <option value="京都府">京都府</option>
                     <option value="大阪府">大阪府</option>
                     <option value="兵庫県">兵庫県</option>
                     <option value="奈良県">奈良県</option>
                     <option value="和歌山県">和歌山県</option>
                     <option value="鳥取県">鳥取県</option>
                     <option value="島根県">島根県</option>
                     <option value="岡山県">岡山県</option>
                     <option value="広島県">広島県</option>
                     <option value="山口県">山口県</option>
                     <option value="徳島県">徳島県</option>
                     <option value="香川県">香川県</option>
                     <option value="愛媛県">愛媛県</option>
                     <option value="高知県">高知県</option>
                     <option value="福岡県">福岡県</option>
                     <option value="佐賀県">佐賀県</option>
                     <option value="長崎県">長崎県</option>
                     <option value="熊本県">熊本県</option>
                     <option value="大分県">大分県</option>
                     <option value="宮崎県">宮崎県</option>
                     <option value="鹿児島県">鹿児島県</option>
                     <option value="沖縄県">沖縄県</option>
                  </select>
               </div>
               <div class="col-md-7 form-group">
                  <input type="text" name="address" class="form-control" id="" placeholder="〇〇市□□区××町00-00 マンション名000号室">
               </div>
            </div>
            <!-- 住所ここまで -->
            <!-- 問い合わせ内容 -->
            <label class="mt-2 mb-0">お問い合わせ内容</label>
            <div class="form-row align-items-center">
               <div class="col-auto">
                  <textarea class="form-control" name="inquiry" id="exampleFormControlTextarea1" cols="100" rows="10" placeholder="問い合わせ内容を入力してください"></textarea>
               </div>
            </div>
            <!-- 問い合わせ内容ここまで -->
            <!-- 確認ボタン -->
            <div class="mt-2">
               <button type="submit" name="btn_confirm" class="btn btn-primary" value="内容確認へ">確認</button>
            </div>
            <!-- 確認ボタンここまで -->
         </form>
         <!-- page_flagが0の入力ページここまで -->
      </div>
      <!-- 問い合わせフォームここまで -->

      <?php endif; ?>

    </body>
</html>

 

今回はここまでです。

 

タイトルとURLをコピーしました