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

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

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

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

HTML5

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

3回答

4454閲覧

mb_send_mailで、送信成功・失敗したらvalueの値を変換する

sascha

総合スコア16

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

HTML5

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2016/11/11 11:42

編集2016/11/11 12:20

###前提・実現したいこと

メールフォームで、送信前のsubmitボタン表記は「送信する」で、
送信成功したら、ボタンの表記を「送信成功」に、
失敗したら、「送信失敗」にしたいです。

###発生している問題・エラーメッセージ

フォームに入力・送信する前から(メールフォームを表示させた段階で)既に
「送信成功」になっています。

エラーメッセージ

###該当のソースコード

HTML <div id="form"> <form action="contact.php" method="post"> <p>Name</p> <p><input type="text" name="namae" size="50px" placeholder="お名前" required class="def fm"></p> <p>Email</p> <p><input type="email" name="email" size="50px" placeholder="メールアドレス" class="def fm"></p> <p>Message</p> <p><textarea name="message" rows="3" cols="50" placeholder="メッセージをどうぞ" class="def fm"></textarea></p> <p><input type="submit" value="SUBMIT" class="btn btn-a btn-b icon-envelope" required id="send"></p> </form>
PHP (+jQuery) <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <?php //error_reporting(E_ALL | E_STRICT); //文字コード設定 mb_language("Japanese"); mb_internal_encoding("UTF-8"); //*環境設定************************************* //件名 $subject = "お問い合わせ"; //管理人メールアドレス(宛先) $to = "xxx@gmail.com"; //********************************************** //**POSTデータ受け取り************************** //差出人メールアドレス格納 $header = "From: ". $_POST["email"]; $header = "From:". $_POST["namae"] ."\n"; //本文格納 $body = "■メールアドレス:" . $_POST["email"] ."\n"; $body .= "■内容:" . $_POST["message"] ."\n"; //************************************************ echo "<script type='text/javascript'> $(function() { $('#send').attr('value','SUBMIT!'); }); </script>"; if ($_SERVER['METHOD'] == 'POST') { if(mb_send_mail($to,$subject,$body,$header)){ echo "<script type='text/javascript'> $(function() { $('#send').attr('value','SUBMIT!'); }); </script>"; //SUCCESSにしたいけど }else{ echo "<script type='text/javascript'> $(function() { $('#send').attr('value','ERROR!'); }); </script>"; } } ?> </body> </html>

PHPにあまり詳しくないので、できるだけ省略しないで教えてもらえるとありがたいです。
よろしくお願いします。

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

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

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

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

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

Y.H.

2016/11/11 12:11

現象が再現する最低限のコードを提示できませんか? HTML・*.phpの構成とかさっぱりわからないです。
sascha

2016/11/14 09:46

エラー改善に手を出せるほどのスキルがないので、本当にどうしたら良いのかわからず質問することしかできませんでした。もしこのような質問には回答したくないのであれば回答しないで大丈夫です。
guest

回答3

0

ボタンのラベルを変えるだけのサンプル・スクリプト

html

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5function h($string) 6{ 7 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 8} 9 10$label = '送信'; 11if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { 12 $result = filter_input(INPUT_POST, 'result'); 13 if ($result) { 14 $label = '成功しました'; 15 } else { 16 $label = '失敗しました'; 17 } 18} 19?><!DOCTYPE HTML> 20<html lang="ja"> 21 <head> 22 <meta charset="UTF-8"> 23 <title></title> 24 </head> 25 <body> 26 <form action="" method="post"> 27 <p> 28 <label> 29 <input type="radio" name="result" value="1" checked="checked" /> 成功時 30 </label> 31 </p> 32 <p> 33 <label> 34 <input type="radio" name="result" value="0" /> 失敗時 35 </label> 36 </p> 37 <p> 38 <button type="submit"><?= h($label); ?></button> 39 </p> 40 </form> 41 </body> 42</html>

投稿2016/11/12 14:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sascha

2016/11/14 07:49

回答ありがとうございます。 作りたかったのは、まさにこのようなボタンです。このスクリプトをうまく組み込めるかわかりませんが、とても参考になりました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/11/14 09:18

JavaScriptは不要です。
sascha

2016/11/14 09:38

アドバイスありがとうございます。了解しました。やってみます。
guest

0

フォームに入力・送信する前から(メールフォームを表示させた段階で)既に
「送信成功」になっている原因は、以下のソースが入っているからだと思います。
※「if ($_SERVER['METHOD'] == 'POST') { 」の前

PHP

1 echo "<script type='text/javascript'> 2 $(function() { 3 $('#send').attr('value','SUBMIT!'); 4 }); 5 </script>"; 6

投稿2016/11/11 19:08

tace

総合スコア17

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

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

sascha

2016/11/12 07:11

回答ありがとうございます。 そのソースはあってもなくても変わらないです。
guest

0

画面遷移とファイル構成がさっぱり記載されていないので
エスパー能力を駆使して回答してみます。

入力フォームもSUBMITさきも同じPHPで作成しているとして
入力フォームがGETでアクセスされ、submit はPOSTでアクセスするつくりなら
POSTでアクセスされた時だけメール送信処理すればいいのでは?

if ($_SERVER['METHOD'] == 'POST') { //**POSTデータ受け取り************************** //差出人メールアドレス格納 $header = "From: ". $_POST["email"]; $header = "From:". $_POST["namae"] ."\n"; //本文格納 $body = "■メールアドレス:" . $_POST["email"] ."\n"; $body .= "■内容:" . $_POST["message"] ."\n"; //************************************************ if(mb_send_mail($to,$subject,$body,$header)){ echo "<script type='text/javascript'> $(function() { $('#send').attr('value','SUCCESS!'); }); </script>"; }else{ echo "<script type='text/javascript'> $(function() { $('#send').attr('value','ERROR!'); }); </script>"; } }

###質問の編集(コードのMETHOD判定追加)を受けて追記

フォームに入力・送信する前から(メールフォームを表示させた段階で)既に
「送信成功」になっています。

メールフォームを表示させるのにGETでアクセスしているなら

if ($_SERVER['METHOD'] == 'POST') { ```のif ブロックに入るはずがないので ifブロックの中で valueを"SUCCESS!"にしても実行されるはずがないです。まずはこの前提が真なのか偽なのかを提示いただかないと何もアドバイスできません。

投稿2016/11/11 12:08

編集2016/11/12 11:27
Y.H.

総合スコア7914

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

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

sascha

2016/11/12 07:16

回答ありがとうございます。 あまり意味がわかっていないのですが、スクリプトにはPOSTを使っています。 確認画面や送信成功画面のページに移動することはありません。 送信すると、フォームのあるページが再表示されます。
Y.H.

2016/11/12 11:24

contact.php のurlが http://example.com/contact.php としてブラウザのアドレス欄へこのURLを入力してください。この際GETでアクセスされるので 「if ($_SERVER['METHOD'] == 'POST']) {」 は偽になるのでこのブロックの中は実行されません。
Y.H.

2016/11/12 11:29

また、POSTデータ受け取りの部分もPOSTの場合のみ実行してください。 GETでアクセスされた場合は値が入っていません。 //**POSTデータ受け取り************************** ・・・略・・・ //************************************************
sascha

2016/11/12 12:07

コメントありがとうございます。 特に何も変わりませんが、具体的にどのようにしたら動くのでしょうか...?
Y.H.

2016/11/12 13:55

これだけソースファイルを変更して「特に何も変わりませんが」ということありえないのですが。。。 編集しているソースファイルと実行しているものが異なっているのでは?
Y.H.

2016/11/12 13:57

多分これ以上はお役に立てないと思います
sascha

2016/11/14 07:50

そうなんですね、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問