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

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

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

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

Q&A

解決済

3回答

2070閲覧

php お問い合わせフォームで受信メールに変数が展開されない

tkduke

総合スコア10

PHP

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

0グッド

0クリップ

投稿2018/06/21 12:23

編集2018/06/22 05:23

初めてお問い合わせフォームを作りました。

<p>フォームに入力>確認画面>送信画面までは、Web上で問題なく表示されるのですが、 受信メールで変数が空白になります。 下記プログラムで、なにか抜けているところはありますでしょうか? よろしくお願いいたします。

php

1<?php 2/* データの受け取り */ 3$comment = $_POST["comment"]; //お問い合わせ内容 4$name = $_POST["name"]; //氏 名 5$email = $_POST["email"]; //Email 6 7/******************************* 8 メール送信の実行 9*******************************/ 10 11 //変数とタイムゾーンを初期化 12 $header = null; 13 $auto_reply_subject = null; 14 $auto_reply_body = null; 15 $mail_subject = null; 16 $mail_body = null; 17 date_default_timezone_set('Asia/Tokyo'); 18 19 //エンコード処理 20 mb_language("Japanese"); 21 mb_internal_encoding("UTF-8"); 22 23 //ヘッダー情報を設定 24 $header = "MIME-Version: 1.0\n"; 25 $header .= "From: サイトネーム <メールアドレス>\n"; 26 $header .= "Reply-To: サイトネーム <メールアドレス>\n"; 27 28 29 //自動返信メール件名 30 $auto_reply_subject = 'お問い合わせありがとうございます。'; 31 32 //自動返信メール 33 $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。 34下記の内容でお問い合わせを受け付けました。\n\n"; 35 $auto_reply_body .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 36 $auto_reply_body .= "氏名:" . $name . "\n"; 37 $auto_reply_body .= "メールアドレス:" . $email . "\n"; 38 $auto_reply_body .= "お問い合わせ内容:" . $comment . "\n\n"; 39 $auto_reply_body .= "内容を確認後、担当者よりご連絡をさせていただきます。"; 40 41 //自動返信メール送信処理 42 $mailsousin = mb_send_mail( $mail, $auto_reply_subject, $auto_reply_body, $header); 43 44 45 //事務局宛メール本文の作成 46 $honbun = ''; 47 $honbun .= "下記の内容でお問い合わせがありました。\n\n"; 48 $honbun .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n\n"; 49 $honbun .= "【お問い合わせ内容】\n"; 50 $honbun .= "$comment\n\n"; 51 $honbun .= "【氏 名】\n"; 52 $honbun .= "$name\n\n"; 53 $honbun .= "【Email】\n"; 54 $honbun .= "$email\n\n"; 55 56 //事務局宛メールの作成 57 $mail_to = "メールアドレス"; //送信先メールアドレス 58 $mail_subject = "サイトよりのお問い合わせ"; //メールの件名 59 $mail_body = $honbun; //メールの本文 60 61 //事務局宛メール送信処理 62 $mailsousin = mb_send_mail($mail_to, $mail_subject, $mail_body, $header); 63 64 65 //メール送信結果 66 if($mailsousin == true) { 67 echo '<p style="margin-top:40px;">お問い合わせメールを送信しました。</p>'; 68 } else { 69 echo '<p>メール送信でエラーが発生しました。</p>'; 70 } 71 ?>

流れは、フォームに入力 確認ページ(confirm.php)送信ページ(sendmail.php)となり、上記のコードは送信ページの一部になります。
確認ページ(confirm.php)のコードは下記になります。

php

1<form method="post" action="sendmail.php"> 2 3<?php 4/* データの受け取り */ 5$comment = $_POST["comment"]; //お問い合わせ内容 6$name = $_POST["name"]; //氏 名 7$email = $_POST["email"]; //Email 8 9//危険な文字列を入力された場合にそのまま利用しない対策 10$comment = htmlspecialchars($comment, ENT_QUOTES); 11$name = htmlspecialchars($name, ENT_QUOTES); 12$email = htmlspecialchars($email, ENT_QUOTES); 13 14/* 入力内容の確認 */ 15echo '<h3>入力内容を確認します。</h3>'; 16echo '<div class="card">'; 17echo '<dl>'; 18echo '<dt>【お問い合わせ内容】</dt><dd>'.$comment.'</dd>'; 19echo '<dt>【氏 名】</dt><dd>'.$name.'</dd>'; 20echo '<dt>【メールアドレス】</dt><dd>'.$email.'</dd>'; 21echo '</dl>'; 22echo '</div><!-- .card-->'; 23?> 24 25 <div class="text-center" style="padding: 30px;"> 26 <p>上記の内容で間違いがなければ「送信」ボタンを押してください。</p> 27 <button type="button submit" class="btn btn-primary"> 送信 </button> <button type="button" class="btn btn-info" onclick="window.history.back();"> 前のページに戻る </button> 28 </div> 29 30</form>

ご指摘のように confirm.php の下部を変えて、無事メールにも表示されました。

php

1echo '<div class="text-center" style="padding: 30px;">'; 2echo '<p>上記の内容で間違いがなければ「送信」ボタンを押してください。</p>'; 3echo '<input type="hidden" name="comment" value="'.$comment.'">'; 4echo '<input type="hidden" name="name" value="'.$name.'">'; 5echo '<input type="hidden" name="email" value="'.$email.'">'; 6echo '<input type="submit" name="okbtn" value=" 上記内容で送信する "> <button type="button" class="btn btn-info" onclick="window.history.back();"> 前のページに戻る </button>'; 7echo '</div>';

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

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

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

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

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

papinianus

2018/06/22 01:48

全ての変数が展開されないということでしょうか?
tkduke

2018/06/22 01:53

はい。すべての変数が展開されない(空白)になります。
papinianus

2018/06/22 02:00

聞きかたが悪かったです。date("Y-m-d H:i")も空白なのですか?"お問い合わせ日時:"となっているということですか?
tkduke

2018/06/22 02:03

お問い合わせ日時「date("Y-m-d H:i")」は表示されます。
tkduke

2018/06/22 02:04

お問い合わせ日時:2018-06-22 10:34
papinianus

2018/06/22 02:08

名前・メールアドレス・コメントが展開されず、日時は展開されるという事実は、kei344さんの回答を支持します。確認画面(展開される画面)からpostされていないのではないでしょうか。
tkduke

2018/06/22 02:16

var_dump($name); で確認画面に NULL と表示されます。
tkduke

2018/06/22 02:32

確認画面では <form method="post" action="sendmail.php"> と記述して、送信画面(sendmail.php)に渡しています。
guest

回答3

0

php

1 $auto_reply_body .= "内容を確認後、担当者よりご連絡をさせていただきます。;

php

1 $auto_reply_body .= "内容を確認後、担当者よりご連絡をさせていただきます。";

自動で構文チェックしてくれるIDEを利用してください。

投稿2018/06/21 12:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tkduke

2018/06/22 01:28

コードを「teratail」の画面にコピペ時、不必要な「\n」を削除する時に誤って「"」も削除したみたいです。 実際のコードは「"内容を確認後、担当者よりご連絡をさせていただきます。"」となっています。
guest

0

ベストアンサー

POSTされていないのでは?

PHP

1var_dump( $_POST );

【PHPのvar_dumpで変数や配列の内容を出力する方法 | TechAcademyマガジン】
https://techacademy.jp/magazine/11585

投稿2018/06/22 02:01

kei344

総合スコア69400

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

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

tkduke

2018/06/22 02:07

確認画面では、問題なく表示されています。
kei344

2018/06/22 02:10

提示されているコードで var_dump( $_POST ); を確かめましたか?
tkduke

2018/06/22 02:19

var_dump( $_POST ); array(0) { } と表示されます。
papinianus

2018/06/22 02:30

横から失礼します。その確認画面から「送信」ボタンみたいなのを押して、送信するのですよね?kei344さんがおっしゃるのは、そのときに、postされていないのではないかということです。 つまり、ページとしては、入力→確認→送信の3ページがあるはず(概念的に)で最初の「→」つまり入力から確認には、formからpostしているけれども、確認から送信にpostしてないのではないでしょうか? 単純な実装としては、確認ページにhiddenで持たせる方法がつかわれたりします。もし良くわからなければ、確認ページのソースを質問に追記なさってはいかがでしょうか?
tkduke

2018/06/22 02:33

確認画面では <form method="post" action="sendmail.php"> と記述して、送信画面(sendmail.php)に渡しています。
papinianus

2018/06/22 03:42

formが送るのは基本inputパーツ(valueを持てるパーツ)なので、ご提示のconfirm.phpからはbuttonくらいしかおくれずbuttonにもvalueがないので、何もない状況かと思います。 例えばご提示のようなシンプルな作りだと<input type='hidden' id ='name' value='$name'>みたいに埋め込みをして、送るということをやる方法がありますが、前提となるwebの仕組みを教材で確認したほうがいいと思います。
tkduke

2018/06/22 05:19

有難うございます。confirm.php をご指摘のように変えて、無事メールにも表示されました。
guest

0

下記プログラムで、なにか抜けているところはありますでしょうか?

入力値チェックと htmlspecialchars の第三引数

というか、このレベルのスクリプトで自動返信メールは出さないほうがいいですよ。

投稿2018/06/21 12:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/06/21 18:28

むしろ、HTMLメールじゃないのだから、htmlspecialchars() は不要では?
退会済みユーザー

退会済みユーザー

2018/06/21 22:53

シンタックスハイライトおかしかったんで、頭数行しか見てませんでした^^; text/plain っぽいんでいらないですね。 機能としては、CSRF 対策と連続投稿の抑止ぐらいは入れてほしいなぁ。。。
tkduke

2018/06/22 01:41

//危険な文字列を入力された場合にそのまま利用しない対策 htmlspecialchars() を外しました。 管理者へのメール本文には「$comment」「$name」「$email」の箇所が空白になります。
退会済みユーザー

退会済みユーザー

2018/06/22 02:50

POST されてないよ。 ちゃんと、基礎からやったほうが良い。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問