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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1324閲覧

メール送信画面で確認アラートを表示したい & フォームに何も入力されていない箇所は非表示にしたい

Nishin

総合スコア30

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/21 17:52

現在、HTMLでメール送信フォームを作成し、フォームに打ち込まれた内容をPHPの送信完了画面に送ってメールを送信するWebアプリを作成しています。
コードはそれぞれ、以下のように記述しております。

remindmailform.html <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <style> @media screen and (min-width:480px){ /*画面幅が781px以上の時*/ h2 { color: red; margin-left: 175px; } label { margin-right: 5px; font-weight: bold; } label+input {margin-bottom: 5px;} .long { width: 300px; } .form-group { position: relative; } #submit { position: relative; top:10px; left:225px; } .footer {margin-left: 195px;} } @media screen and (max-width:480px){ /*画面幅が480pxまでの時*/ h2 { color: red; text-align: center; } label { margin-right: 2px; font-weight: bold; } label+input {margin-bottom: 5px;} textarea {width:300px;} .long { width: 250px; } .form-group { position: relative; } #submit { position: relative; top:10px; left:110px; } .footer {text-align: center;} } </style> <title>リマインドメールフォーム</title> </head> <body> <h2>連絡メールフォーム</h2> <form action="mailsended.php" method="post"> <div class="form-group"> <label for="name">連絡者名</label> <input type="text" id="name" class="long" name="name"><br> <label for="yourEmail">連絡者のメールアドレス</label> <input type="text" id="yourEmail" class="long" name="yourEmail"><br> <br> <label for="what">件名</label> <input type="text" id="what" class="long" name="what"><br> <label for="moment">連絡事項</label><br> <textarea id="moment" name="moment" rows="10" cols="80" required></textarea><br> <label for="date">日時</label> <input type="text" id="date" name="date"><br> <label for="place">場所</label> <input type="text" id="place" class="long" name="place"><br> <label for="bring">持参物</label> <input type="text" id="bring" class="long" name="bring"><br> <label for="remark">備考</label><br> <textarea id="remark" name="remark" rows="3" cols="80"></textarea><br> <br> <label for="email">送信先メールアドレス</label> <input type="text" id="email" class="long" name="email" required><br> <br> </div> <input id="submit" type="submit" name="submit" value="この内容で送信する"> </form> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </body> </html>
mailsended.php <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <style> a {text-decoration: none} @media screen and (min-width:480px){ /*画面幅が781px以上の時*/ h3 { color: red; margin-left: 175px; } a button {margin-left: 170px;} .footer {margin-left: 170px;} } @media screen and (max-width:480px){ /*画面幅が480pxまでの時*/ h3 { color: red; text-align: center; } a button {text-align: center;} .footer {text-align: center;} } </style> <title>リマインドメール送信完了画面</title> </head> <body> <h3>メールを送信しました!</h3> <?php // 送信者名 $name=$_POST["name"] ; $name=htmlspecialchars($name) ; // 伝達事項 $moment=$_POST["moment"] ; $moment=htmlspecialchars($moment) ; // 日時 $date=$_POST["date"] ; $date=htmlspecialchars($date) ; // 場所 $place=$_POST["place"] ; $place=htmlspecialchars($place) ; // 持ち物 $bring=$_POST["bring"] ; $bring=htmlspecialchars($bring) ; // 備考 $remark=$_POST["remark"] ; $remark=htmlspecialchars($remark) ; // 送信先アドレス $to=$_POST["email"] ; $to=htmlspecialchars($to) ; // 送信者のアドレス $yourEmail=$_POST["yourEmail"] ; $yourEmail=htmlspecialchars($yourEmail) ; // 件名 $subject=$_POST["what"] ; $subject=htmlspecialchars($subject) ; // 内容 $msg="$moment\n"."\n". // if(empty($date)){"\n"}else{"【日時】:$date\n"}. "【日時】:$date\n". // if(empty($place)){"\n"}else{"【場所】:$place\n"}. "【場所】:$place\n". // if(empty($bring)){"\n"}else{"【持参物】:$bring\n"}. "【持参物】:$bring\n"."\n". "$remark\n"."\n". "【送信者】:$name\n"; // メール送信関数 mb_internal_encoding("UTF-8"); mb_send_mail($to,$subject,$msg,'From:'.$yourEmail); ?> <a href="remindmailform.html"><button type="button" name="return"> リマインドメールフォームに戻る </button></a> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </body> </html>

ここまで作成し、メールの送受信も問題なく行えていることを確認したのですが、必要と感じ追加したい機能があります。
概ね件名の通りなのですが、

①.送信フォーム側の「この内容で送信する」ボタンを押した後に以下のようなアラート画面を表示するためには、どんなJavascriptの記述が必要でしょうか。
====================
!確認!

この内容で送信します。よろしいですか?
「はい」「いいえ」
====================
(「はい」を押すと正式に送信され、「いいえ」ならばキャンセルされてフォーム入力画面に戻る)

②.送信フォーム側の、日時・場所・持参物のいずれかについて何も入力していない場合、送信されたメール本文で、【日時】【場所】【持参物】(これらのうち、フォームに何も入力されていないもの)の記述を省略するためには、php側にはどんな記述が必要でしょうか。

お手数ですが、ご回答をお願いします。

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

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

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

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

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

guest

回答2

0

①.送信フォーム側の「この内容で送信する」ボタンを押した後に以下のようなアラート画面を表示するためには、どんなJavascriptの記述が必要でしょうか。

タイトルはブラウザに依存しますが、簡単に実装するならconfirm()
メッセージや諸々カスタマイズしたいのでしたらjQueryプラグインなどを探してください。(探せばすぐ見つかります)
ボタンがSUBMITならいずれかの手段で(これも調べれば出ます)一度止めてconfirm出して、OKの場合に送信指示を自身で書くこと。

フォームに何も入力されていないもの)の記述を省略

そのままロジック組めば良いです。
必須項目はバリデーションしてくださいね。

php

1$mail_body = ''; 2$name = filter_input(INPUT_POST ,'name'); //必須 3 4$hoge = filter_input(INPUT_POST ,'hoge'); //任意 5 6// バリデーション 7 8$mail_body .= '連絡者名:'.$name.PHP_EOL; 9if(trim($hoge) !== ''){ 10 $mail_body .= 'HOGE:'. $hoge.PHP_EOL; 11}

そういえばhtmlspecialchars()を各所にかけれていますが、これはHTMLメールですか?
そうでないなら不要かと思います。
画面出力を行うものにのみ、取得時ではなく画面出力時に掛けるものです。

投稿2020/01/21 21:47

編集2020/01/21 23:58
m.ts10806

総合スコア80850

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

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

Nishin

2020/01/22 11:54

「送信されたメール本文で、【日時】【場所】【持参物】(これらのうち、フォームに何も入力されていないもの)の記述を省略するためには・・・」についてご回答頂いた件で、再度お伺いします。 **Q.「そのままロジック組めば良い」**とありますが、具体的にどのように記述すれば宜しいでしょうか。 現在までに試みた記述なのですが、 $msg="$moment\n"."\n". "$setdate". // "【日時】:$date\n". "$setplace\n". // "【場所】:$place\n". "$setbring\n"."\n". // "【持参物】:$bring\n"."\n". "$remark\n"."\n". "【送信者】:$name\n". "【Eメール】:$yourEmail\n"; if( !empty($date) ){ $setdate="【日時】:"."$date\n"; }else{ $setdate=""; } if( !empty($place) ){ $setplace="【日時】:"."$place\n"; }else{ $setplace=""; } if( !empty($bring) ){ $setbring="【日時】:"."$bring\n"; }else{ $setbring=""; } このように構文を記述してみたところ、今度は日時・場所・持参物について、フォームを埋めた場合でも何も表示されなくなってしまいました・・・。 恐れ入りますが、ご回答の程、お願い致します。
m.ts10806

2020/01/22 12:53

あとで変数入れても反映してくれません。先に入れましょう。 あとempty だと「0」とか入力されてもtrueになってしまうので「空文字」と比較した方が良いです(回答参照) https://www.php.net/manual/ja/function.empty.php > 次のような値は空であるとみなされます。 "" (空文字列) 0 (整数 の 0) 0.0 (浮動小数点数の 0) "0" (文字列 の 0) NULL FALSE array() (空の配列)
guest

0

自己解決

ようやく正常に送信することができました。

mailsended.php // 送信先アドレス $to=$_POST["email"] ; // 送信者のアドレス $yourEmail=$_POST["yourEmail"] ; // 件名 $subject=$_POST["what"] ; // $set系の条件分岐 $setdate = $date=="" ? null : "【日時】:$date\n"; // 「もし$dateの中身が""なら、$setdateはnullで、そうでなければ "【日時】:$date\n" となる」という意味。 $setplace = $place=="" ? null : "【場所】:$place\n"; // 一つ上と同様。 $setbring = $bring=="" ? null : "【持参物】:$bring\n"; // 上と同様。 // 送信内容 $msg="$moment\n"."\n". "$setdate". "$setplace". "$setbring". "$remark\n"."\n". "【送信者】:$name\n". "【Eメール】:$yourEmail\n"; // メール送信関数 mb_internal_encoding("UTF-8"); mb_send_mail($to,$subject,$msg);

コードはこのように記述

投稿2020/01/22 14:31

Nishin

総合スコア30

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

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

m.ts10806

2020/01/22 14:32

せっかく回答でfilter_input()使ったのにそこに興味を持ってもらいたかった。 不要な""がたくさんあるのであまり良いコードではないと思いますけど・・。ヒアドキュメントもご検討ください。
Nishin

2020/01/23 10:15

この度は複数回に渡りご回答頂きまして、ありがとうございました。 しかしながら、ご指摘頂いた箇所を早急に修正せず、失礼いたしました。 その後、回答にてご教示頂いた事を参照し、PHP側のコードを、以下のように修正致しました。 <?php $mail_body = ''; // 「共通定義変数」とでも言えるもの // バリデーション $mail_body .= '連絡者名:'.$name.PHP_EOL; if(trim($moment) !== ''){ $mail_body .= 'moment:'. $moment.PHP_EOL; } // この「trim関数」で、文字列内の余計な空白を取り除ける。 if(trim($subject) !== ''){ $mail_body .= 'what:'. $subject.PHP_EOL; } if(trim($to) !== ''){ $mail_body .= 'email:'. $to.PHP_EOL; } // 送信者名 // $name=$_POST["name"] ; // ↑これだと「if (!isset($_POST['name'])) {~」と記述しなきゃいけないから $name = filter_input(INPUT_POST ,'name'); // ←こう記述する。ユーザが入力した値の妥当性を確かめるために。 // 伝達事項 // $moment=$_POST["moment"] ; $moment = filter_input(INPUT_POST ,'moment'); // ←同じ理屈で、このように記述。 // 日時 // $date=$_POST["date"] ; $date = filter_input(INPUT_POST ,'date'); // 場所 // $place=$_POST["place"] ; $place = filter_input(INPUT_POST ,'place'); // 持ち物 // $bring=$_POST["bring"] ; $bring = filter_input(INPUT_POST ,'bring'); // 備考 // $remark=$_POST["remark"] ; $remark = filter_input(INPUT_POST ,'remark'); // 送信先アドレス // $to=$_POST["email"] ; $to = filter_input(INPUT_POST ,'email'); // 送信者のアドレス // $yourEmail=$_POST["yourEmail"] ; $yourEmail = filter_input(INPUT_POST ,'yourEmail'); // 件名 // $subject=$_POST["what"] ; $subject = filter_input(INPUT_POST ,'what'); // $set系の条件分岐 $setdate = $date=="" ? null : "【日時】:$date\n"; // 「もし$dateの中身が""なら、$setdateはnullで、そうでなければ "【日時】:$date\n" となる」という意味。 $setplace = $place=="" ? null : "【場所】:$place\n"; // 一つ上と同様。 $setbring = $bring=="" ? null : "【持参物】:$bring\n"; // 上と同様。 // 送信内容 $msg="$moment\n"."\n". "$setdate". "$setplace". "$setbring". "$remark\n"."\n". "【送信者】:$name\n". "【Eメール】:$yourEmail\n"; // メール送信関数 mb_internal_encoding("UTF-8"); mb_send_mail($to,$subject,$msg); ?> お陰様で、HTML・PHPとも正常に機能し、送信先に指定した自分のアドレスに無事に送信されていたことを確認できました。 改めて、御礼申し上げます。
m.ts10806

2020/01/23 12:04 編集

コメントではマークダウン使えませんしインデントつかないので回答本文に記載していただいた方が良いかと。質問も回答も編集できます(編集履歴も残ります)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問