【問題解決】メールフォームの送信テストが失敗する件 その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が未定義の様です。

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

 

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

 

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

結果:送信成功!

 

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

× : $_post
〇 : $_POST

 

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

 

まとめ

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

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

 

 

今回はここまでです。

 

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