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

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

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

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

PHP

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

メール

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

Q&A

解決済

1回答

658閲覧

PHPとHTMLで作成した問い合わせフォームから送信されたメールに、入力した情報が表示されない原因を解決したい

10masa19

総合スコア7

HTML5

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

PHP

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

メール

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

0グッド

0クリップ

投稿2020/10/14 01:07

前提・実現したいこと

問い合わせフォームで入力された値を正常に取得したい。
もしくは、空白やスペースのみでの送信ができないよう設定したい。

発生している問題

問い合わせフォームから送信されたメールに、入力した情報が表示されない。 もしくは、空白やスペースのみで送信できてしまう。 【詳細】 とある会社のホームページを作成し、 問い合わせフォームや求人の応募フォームを構築しました。 自分のPCにて送信テストを行い、 送られたメールは特に問題なく入力された情報は表示されました。 しかし、実際にその会社に送られてくるメール内容は 入力されるべき値がすべて空白のものがほとんどでした。 HTMLにて、空白やスペースのみでの送信はできないよう コーディングしているのですが、 なぜこのような事が起きるのでしょうか。 因みにセッションはまだ学習できていないため未導入なのですが、 今回の問題との関係性はあるのでしょうか。 P初心者なので、ご教示宜しくお願い致します。

該当のソースコード(HTML・問い合わせフォーム)

上記ソース省略     <form action="confirm/contact-confirm.php" method="post" name="form"> <table class="contact-form"> <tr class="contact-form__row"> <th class="contact-form__head"> 氏名(会社名) <img class="icon-size" src="../img/req-icon.png" alt="必須"> </th> <td class="contact-form__data"> <input class="contact-form__default" type="text" name="Name" placeholder="山田 太郎(フルネーム)" required maxlength="35" pattern=".*\S+.*" title="正式な氏名・会社名を入力してください"/> </td> </tr> <tr class="contact-form__row"> <th class="contact-form__head"> メールアドレス <img class="icon-size" src="../img/req-icon.png" alt="必須"> </th> <td class="contact-form__data"> <input class="contact-form__default" type="email" name="SenderAddress" placeholder="tarou@exsample.jp" required maxlength="50" pattern=".*\S+.*" title="正式なアドレスを入力してください"/> </td> </tr> <tr class="contact-form__row"> <th class="contact-form__head"> 電話番号 <img class="icon-size" src="../img/req-icon.png" alt="必須"> </th> <td class="contact-form__data"> <input class="contact-form__default" type="tel" name="Tel" placeholder="09012345678(ハイフンなし)" required maxlength="11" pattern=".*\S+.*" title="正式な電話番号を入力してください"/> </td> </tr> <tr class="contact-form__row"> <th class="contact-form__head"> ご希望の連絡方法 <img class="icon-size" src="../img/req-icon.png" alt="必須"> </th> <td class="contact-form__data"> <label class="focus"> <input class="contact-form__way" type="radio" name="WaysToContact" value="電話" checked="checked">電話 </label> <label class="focus"> <input class="contact-form__way" type="radio" name="WaysToContact" value="メール">メール </label> </td> </tr> <tr class="contact-form__row"> <th class="contact-form__head"> お問い合わせ内容 <img class="icon-size" src="../img/req-icon.png" alt="必須"> </th> <td class="contact-form__data"> <textarea class="contact-form__textarea" name="Message" placeholder="お問い合わせ内容をご記入ください" required maxlength="500" pattern=".*\S+.*" title="内容を入力してください"></textarea> </td> </tr> </table> <div class="contact-form__reset"> <input type="reset" value="リセット"/> </div> <div class="contact-form__submit"> <input type="submit" value="内容のご確認"/> </div> </form> 以下ソース省略

該当のソースコード(PHP/HTML・確認画面)

上記ソース省略 <body>   ?php mb_language("Japanese"); //日本語対応の対策、UTF-8 mb_internal_encoding("UTF-8"); //htmlからの取得項目 $name = htmlspecialchars($_POST['Name'] ,ENT_QUOTES ,"UTF-8" ); $senderAddress = htmlspecialchars($_POST['SenderAddress'] ,ENT_QUOTES ,"UTF-8" ); $tel = htmlspecialchars($_POST['Tel'] ,ENT_QUOTES ,"UTF-8" ); $waysToContact = htmlspecialchars($_POST['WaysToContact'] ,ENT_QUOTES ,"UTF-8" ); $message = htmlspecialchars($_POST['Message'] ,ENT_QUOTES ,"UTF-8" );  if(isset($name, $senderAddress, $tel, $waysToContact, $message)){      echo "      中間ソース省略   <form action=\"result/contact-mail_result.php\" method=\"post\" name=\"form\">  <table class=\"contact-form\"> <tr class=\"contact-form__row\"> <th class=\"contact-form__head\"> 氏名(会社名) </th> <td class=\"contact-form__data\"> $name </td> </tr> <tr class=\"contact-form__row\"> <th class=\"contact-form__head\"> メールアドレス </th> <td class=\"contact-form__data\"> $senderAddress </td> </tr> <tr class=\"contact-form__row\"> <th class=\"contact-form__head\"> 電話番号 </th> <td class=\"contact-form__data\"> $tel </td> </tr> <tr class=\"contact-form__row\"> <th class=\"contact-form__head\"> ご希望の連絡方法 </th> <td class=\"contact-form__data\"> $waysToContact </td> </tr> <tr class=\"contact-form__row\"> <th class=\"contact-form__head\"> お問い合わせ内容 </th> <td class=\"contact-form__data english-escape\"> $message </td> </tr> </table> <input type=\"hidden\" name=\"Name\" value=\"$name\"> <input type=\"hidden\" name=\"SenderAddress\" value=\"$senderAddress\"> <input type=\"hidden\" name=\"Tel\" value=\"$tel\"> <input type=\"hidden\" name=\"WaysToContact\" value=\"$waysToContact\"> <input type=\"hidden\" name=\"Message\" value=\"$message\"> <div class=\"contact-form__return\"> <a href=\"../contact.html\">入力画面へ戻る</a> </div> <div class=\"contact-form__submit\"> <input type=\"submit\" value=\"送信\"/> </div> </form> "; } else { echo ' 正常に値が取得できなかった場合の画面 ';  };   ?> </body> </html>

該当のソースコード(PHP/HTML・送信完了画面)

上記ソース省略 <body> <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); //htmlからの取得項目 $name = htmlspecialchars($_POST['Name'] ,ENT_QUOTES ,"UTF-8" ); $senderAddress = htmlspecialchars($_POST['SenderAddress'] ,ENT_QUOTES ,"UTF-8" ); $tel = htmlspecialchars($_POST['Tel'] ,ENT_QUOTES ,"UTF-8" ); $postalCode1 = htmlspecialchars($_POST['PostalCode1'] ,ENT_QUOTES ,"UTF-8" ); $postalCode2 = htmlspecialchars($_POST['PostalCode2'] ,ENT_QUOTES ,"UTF-8" ); $prefectures = htmlspecialchars($_POST['Prefectures'] ,ENT_QUOTES ,"UTF-8" ); $municipalities = htmlspecialchars($_POST['Municipalities'] ,ENT_QUOTES ,"UTF-8" ); $address = htmlspecialchars($_POST['Address'] ,ENT_QUOTES ,"UTF-8" ); $waysToContact = htmlspecialchars($_POST['WaysToContact'] ,ENT_QUOTES ,"UTF-8" ); $message = htmlspecialchars($_POST['Message'] ,ENT_QUOTES ,"UTF-8" ); //入力項目チェックここまで //メール本文内に表示する情報の文章形式(型)設定 $text_name = "[氏名(社名)] " ."\n" .$name; $text_senderAddress = "[メールアドレス] " ."\n" .$senderAddress; $text_tel = "[電話番号] " ."\n" .$tel; $text_postalCode = "[住所]" ."\n" ."〒 " .$postalCode1 ."-" .$postalCode2; $text_streetAddress = $prefectures .$municipalities .$address; $text_waysToContact = "[連絡方法]" ."\n" .$waysToContact; $text_message = "[問い合わせ内容]" ."\n" .$message; //表示させたくない文字列の排除 if(1 <= strlen($postalCode1)){ } else { unset($text_postalCode); }; //メール送信関数の引数設定 $to = "****************.com"; $title = "ホームページからのお問合せ"; $text = $text_name ."\n\n" .$text_senderAddress ."\n\n" .$text_tel ."\n\n" .$text_postalCode ."\n" .$text_streetAddress ."\n\n" .$text_waysToContact ."\n\n\n" .$text_message; $from = "From: $senderAddress"; if(mb_send_mail($to, $title, $text, $from)){ echo " 送信完了画面      ";    } else {   echo "      送信失敗画面  "; };   ?> </body> </html>

試したこと

・空白スペースのみは送信不可にするため、HTMLでpattern属性の設定

・自分のPCから送信のテスト
結果:入力された情報はすべて表示された。空白スペースのみでの送信はできなかった。

・自分以外からの不特定な問い合わせメールで、
特に問題なく情報が表示されているケースも確認できた

補足情報(FW/ツールのバージョンなど)

OS:Windows10
サーバー:さくらレンタルサーバー
環境:brackets
バージョン:PHP/7.3.9 HTML5
PHPスキル:独学、初心者

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

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

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

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

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

guest

回答1

0

ベストアンサー

HTMLにて、空白やスペースのみでの送信はできないよう

コーディングしているのですが、

直接confirm/contact-confirm.phpないしresult/contact-mail_result.phpに外部からPOSTすれば可能です。
バリデーションはHTMLの属性やJavaScriptでは不十分で、サーバーサイドのチェックは必須です。
また、別の質問にも出ているように、お問い合わせフォームに必要な対策が十分されているとは言えません。
企業のWebサイトに入れるようなものなら尚更、完璧に近い対策が必要かと思います。

ひとまず、お問い合わせフォームのページは一旦閉じた方が良いです。

投稿2020/10/14 01:25

m.ts10806

総合スコア80875

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

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

10masa19

2020/10/14 02:00

ご回答ありがとうございます。 やはりサーバーサイドでのバリデーションチェックは必須のようですね。 フォームはセキュリティ面を強化できるまで閉じようと思います。 この際なのでお聞きしたのですが、 現状で足りない、もしくは最低限導入しなければならない対策は 他にどれくらい挙げられるでしょうか。 ご教示いただいたサーバーサイドのチェックなど、 m.ts10806様から見た場合で良いので、教えていただきたいです。
m.ts10806

2020/10/14 02:13

「別の回答」にリンクを貼っている「安全なWebサイトの作り方」を読まれた方が良いかと思います。 基本的に、ほぼ対策されてないと思って良くて、ちょっと対応してみるレベルにはないと感じました。 それに回答に書いたように、企業のWebサイトのものなので、その企業の業績にも関わります。きちんとお金を払ってセキュリティの専門家のアドバイスを得るべきです。 「質問と回答」という形式で片付けられる問題ではないです。
m.ts10806

2020/10/14 02:15

回答者の中にはセキュリティの専門家(有名な著書もある)の方もいらっしゃいますが、突っ込んだ話になるのでおそらく「質問に答える」という形では対応してくださらないと思います。 リンク先を参考に自身で対応するか、お金を払って専門家を入れるか。私なら後者ですね。
10masa19

2020/10/14 02:51

ご指摘ありがとうございます。 独学での限界はこの辺りのようですね。 調べても膨大な時間が掛かるだけなようなので、 私もお金を払って専門家に教えを乞うべきだと感じました。 phpは解決できない問題が多く、 どう向き合えばよいかの判断も曖昧だったので、 教えていただいて参考になりました。 最適な専門家を探し、必ずこの問題を解決します!
m.ts10806

2020/10/14 03:01

PHPというより「Webアプリケーション」というもうひとつ上のカテゴリで考えられた方が良いかと思います。 同じ問題は言語やフレームワークに関係なくでてきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問