質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

2449閲覧

PHPでのメール送信の際、2通同じ内容の物が届いてしまいます。

OTTO-WORKS

総合スコア1

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/06/04 06:14

前提・実現したいこと

製品ページ内の問い合わせフォームより、PHPを使用してメールを送信したい。
メールに関しては、こちらの社内メールアドレス宛ての1通のみ送信したい。
(送信結果メールをユーザーに向けては送信しません。)

発生している問題

フォームに入力後、何回送信してもなぜか2通メールが送られてくる。
更に、1通目はこちらの望んでいる内容でのメールに対し、2通目は
$_POSTの内容のみが空のまま送信されてくる。

該当のソースコード

HTML

1<section id="trial_form"> 2 <form action="../php/trial-mail.php" method="post"> 3 <h2>体験版のお問い合わせ</h2> 4 <div class="inner-wrapper"> 5 <label>お名前</label> 6 <input type="name" name="name" value="<?php echo $_POST["name"]; ?>"> 7 </div> 8 <div class="inner-wrapper"> 9 <label>メールアドレス</label> 10 <input type="email" name="mail" value="<?php echo $_POST["mail"]; ?>"> 11 </div> 12 <div class="inner-wrapper"> 13 <label>お電話番号</label> 14 <input type="tel" name="tel" value="<?php echo $_POST["tel"]; ?>"> 15 </div> 16 <div class="inner-wrapper soft"> 17 <label>ご希望のソフト</label> 18 <div class="radio-wrapper"> 19 <input id="hoge1" type="radio" name="soft" value="hoge1" checked> 20 <label for="hoge1">HOGE1</label> 21 </div> 22 <div class="radio-wrapper"> 23 <input id="hoge2" type="radio" name="soft" value="hoge2"> 24 <label for="hoge2">HOGE2</label> 25 </div> 26 </div> 27 <div class="inner-wrapper inquiry"> 28 <label>その他</label> 29 <textarea name="inquiry" rows="10" placeholder="例:〇月〇日の〇〇時からお願いします。"><?php echo $_POST["inquiry"]; ?></textarea> 30 </div> 31 <div class="btn-wrapper"> 32 <input type="submit" value="送 信"> 33 </div> 34 </form> 35</section>

PHP

1<?php 2 mb_language("Japanese"); 3 mb_internal_encoding("UTF-8"); 4 5 $to = "hoge@hoge.jp"; 6 $title = "お問い合わせがありました。"; 7 $content = "お問い合わせがありました。\n\nご連絡お願いします。\n\n\n"; 8 $content .= "-----お問い合わせ内容----- \n\n"; 9 $content .= "- お名前 -\n\n".$_POST["name"]."\n\n\n"; 10 $content .= "- メールアドレス -\n\n\n".$_POST["mail"]."\n\n"; 11 $content .= "- お電話番号 -\n\n".$_POST["tel"]."\n\n\n"; 12 $content .= "- ご希望のソフト -\n\n".$_POST["soft"]."\n\n\n"; 13 $content .= "- その他 -\n\n".$_POST["inquiry"]."\n\n"; 14 15 if(mb_send_mail($to, $title, $content)){ 16 echo "<p>メールを送信しました。<br>担当者から折り返しご連絡させていただきますので、もう暫くお待ちくださいませ。</p>"; 17 }else{ 18 echo "<p>送信に失敗しました。送信内容をご確認の上、再度送信をお願い致します。</p>"; 19 } 20?>

###送られてくるメールの内容(1通目)

お問い合わせがありました。 ご連絡お願いします。 -----お問い合わせ内容----- - お名前 - ほげほげ - メールアドレス - mail@mail.com - お電話番号 - 08000000000 - ご希望のソフト - hogehoge - その他 - ほげほげほげほげほげほげ

###送られてくるメールの内容(2通目)

お問い合わせがありました。 ご連絡お願いします。 -----お問い合わせ内容----- - お名前 - - メールアドレス - - お電話番号 - - ご希望のソフト - - その他 -

試したこと

同じコードを2回ループしているかどうかデバッグしてみましたが、1回しか通っていませんでした。

また、$_POSTの中身を変数に格納してみましたが、結果は同じでした。

どうか、ご教授願います。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rururu3

2020/06/04 07:04

HTML部分とPHP部分で同じPOSTフィールド使ってるのでもしかして 記載されているHTMLとPHPプログラムはtrial-mail.phpというファイルの中身ですか?
OTTO-WORKS

2020/06/04 07:10 編集

ご返信ありがとうございます。 いえ、以前に同じファイルの中身にHTML・PHPを記載しておりましたが、その際にも同じ現象が起こりました。 なので、今回はHTML部分とPHP部分は別のファイルに分けてあります。 同じポストフィールドを使用しているのは、(再入力の為などで)画面を戻した際に、入力したはずの内容が白紙になり、再入力の手間を無くすため使用しております。
rururu3

2020/06/04 07:14

なるほど、想像してたのとは違ったので HTML表示用のPHPと受け取り部分のPHPのソース全体見ないとわからないですね… 問題なければ記載した2つの全ソース載せてもらえれば回答できるかも
OTTO-WORKS

2020/06/04 07:40

上記のソースのみでテストしてみたのですが、同じ現象が起きてしまいました...。 何か、サーバー側での問題等は考えられますか?
rururu3

2020/06/04 07:50

記載されてるのだけでやって見ましたが、1通しかメール来なかったですね… Apacheのアクセスログで2回来てないか調べるとかかなぁ…
rururu3

2020/06/04 07:57

あとは、実はURL間違ってて昔のやつだったとかテストしようとしてたのと違うのにアクセスしてた…無いですよねぇ…
OTTO-WORKS

2020/06/04 07:57

そうなんですね...。 試していただき、ありがとうございます! アクセスログは別の管理者が権限持っているので、聞いてみます。 今、サーバーを見ていたら、別の階層のディレクトリですが、mailに関するcgiファイルが設置してあるのですが、それと干渉し合う可能性はありますでしょうか。
OTTO-WORKS

2020/06/04 07:59

URL間違えないよう、テストサーバーをまっさらにしてからテストするようにしてます...。
rururu3

2020/06/04 08:02

../php/trial-mail.php なので別階層ではあるのですが…関係ないですよねぇ
OTTO-WORKS

2020/06/04 08:16

サーバー側の問題でしょうかね...。
guest

回答2

0

ベストアンサー

時々あって、切り分けが非常に難しいのが、ブラウザの拡張機能が勝手に POST しているケースです。

アクセスログから判断することが可能(2回 POST されてる)ですが、ブラウザの拡張機能を切ったり、別のブラウザを使用してみることでも切り分け可能です。

投稿2020/06/04 08:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/04 08:49

ちなみに、メールフォームは初学者の学習教材として最悪なので、適当に動作を確認したら、次のステップに移ってしまったほうが良いです。
OTTO-WORKS

2020/06/04 08:58

ご回答ありがとうございます。 chromeでテストを行っており、MacのSafariで試したところ、正常に送信されてきました。 おっしゃる通り、拡張機能の可能性が高そうですね。 学習ではなく、実務で行っているため、すごく助かります。ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/06/04 09:00

該当の拡張機能が判明したら教えて下さい。 大変助かります。
OTTO-WORKS

2020/06/04 09:06

判明しました。 VS Codeでのライブリロードの際に、chromeの拡張機能である「Live Server Web Extension」を使用しているのですが、そちらを無効化したところ、症状が改善しました。ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/06/04 09:12

助かりました。 ちなみに、質問にあるコードをそのまま使用しないでください。 以下の問題を含んでます。 ・XSS 可能 ・バリデーションが行われていない ・投稿ページへ直接 POST 可能 自動返信ではないので、踏み台にされることは無いですが、Web サイトとしては大変問題のある状態です。
OTTO-WORKS

2020/06/05 01:48

まだテスト段階なので、ご指摘いただいた内容は対策したいと思います。 ありがとうございました。
guest

0

コメントではソース記載できないので回答で

send.php

php

1<section id="trial_form"> 2 <form action="./trial-mail.php" method="post"> 3 <h2>体験版のお問い合わせ</h2> 4 <div class="inner-wrapper"> 5 <label>お名前</label> 6 <input type="name" name="name" value="<?php echo $_POST["name"]; ?>"> 7 </div> 8 <div class="inner-wrapper"> 9 <label>メールアドレス</label> 10 <input type="email" name="mail" value="<?php echo $_POST["mail"]; ?>"> 11 </div> 12 <div class="inner-wrapper"> 13 <label>お電話番号</label> 14 <input type="tel" name="tel" value="<?php echo $_POST["tel"]; ?>"> 15 </div> 16 <div class="inner-wrapper soft"> 17 <label>ご希望のソフト</label> 18 <div class="radio-wrapper"> 19 <input id="hoge1" type="radio" name="soft" value="hoge1" checked> 20 <label for="hoge1">HOGE1</label> 21 </div> 22 <div class="radio-wrapper"> 23 <input id="hoge2" type="radio" name="soft" value="hoge2"> 24 <label for="hoge2">HOGE2</label> 25 </div> 26 </div> 27 <div class="inner-wrapper inquiry"> 28 <label>その他</label> 29 <textarea name="inquiry" rows="10" placeholder="例:〇月〇日の〇〇時からお願いします。"><?php echo $_POST["inquiry"]; ?></textarea> 30 </div> 31 <div class="btn-wrapper"> 32 <input type="submit" value="送 信"> 33 </div> 34 </form> 35</section>

trial-mail.php

php

1<?php 2 mb_language("Japanese"); 3 mb_internal_encoding("UTF-8"); 4 5 $to = "自身のメールアドレス"; 6 $title = "お問い合わせがありました。"; 7 $content = "お問い合わせがありました。\n\nご連絡お願いします。\n\n\n"; 8 $content .= "-----お問い合わせ内容----- \n\n"; 9 $content .= "- お名前 -\n\n".$_POST["name"]."\n\n\n"; 10 $content .= "- メールアドレス -\n\n\n".$_POST["mail"]."\n\n"; 11 $content .= "- お電話番号 -\n\n".$_POST["tel"]."\n\n\n"; 12 $content .= "- ご希望のソフト -\n\n".$_POST["soft"]."\n\n\n"; 13 $content .= "- その他 -\n\n".$_POST["inquiry"]."\n\n"; 14 15 if(mb_send_mail($to, $title, $content)){ 16 echo "<p>メールを送信しました。<br>担当者から折り返しご連絡させていただきますので、もう暫くお待ちくださいませ。</p>"; 17 }else{ 18 echo "<p>送信に失敗しました。送信内容をご確認の上、再度送信をお願い致します。</p>"; 19 } 20?>

同一フォルダに2ファイルおいてやってみましたがなりませんでした。
同じ条件でなるってことで間違いないですか?

投稿2020/06/04 08:24

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OTTO-WORKS

2020/06/04 08:30

説明不足で申し訳ありません。 /products/send.php /php/trial-mail.php といった感じで、違うフォルダです。 ただ、先ほど同一フォルダで試しましたが、やはり2通届いてしまいます。
OTTO-WORKS

2020/06/04 08:33

ちなみに、これとは別に/contact/index.phpというファイル内にもコンタクトフォームがありまして、 そちらでは、1ファイルにHTML表示、メール送信を記述しているのですが、そちらは問題なく動いております。
rururu3

2020/06/04 08:39

何らかの情報欲しいから $content .= print_r($_SERVER, true); を付け加えて調べてみるとかどうでしょう
OTTO-WORKS

2020/06/04 09:01

上記のものを付け加えてテストしたところ、様々な差分が見られました。 主なものは、 REMOTE_PORTが違う、2通目のREQUEST_METHODがGETになっている、 2通目のREQUEST_URIとPHP_SELFの最後に/wsがついている。 などですかね。 他の回答者の方がおっしゃっているように、拡張機能によるものなのでしょうか。
rururu3

2020/06/04 09:05

te2jiさんの記載されている拡張機能で間違いなさそうですね。 なにはともあれあてが見つかってよかったです
OTTO-WORKS

2020/06/04 09:07

すいません、chromeの拡張機能である「Live Server Web Extension」が悪さをしていたようです。こちらを無効化したところ、解決しました。 この度は、大変ご親切にご教授いただきまして、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問