初めてお問い合わせフォームを作りました。
<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>';
全ての変数が展開されないということでしょうか?
はい。すべての変数が展開されない(空白)になります。
聞きかたが悪かったです。date("Y-m-d H:i")も空白なのですか?"お問い合わせ日時:"となっているということですか?
お問い合わせ日時「date("Y-m-d H:i")」は表示されます。
お問い合わせ日時:2018-06-22 10:34
名前・メールアドレス・コメントが展開されず、日時は展開されるという事実は、kei344さんの回答を支持します。確認画面(展開される画面)からpostされていないのではないでしょうか。
var_dump($name); で確認画面に NULL と表示されます。
確認画面では <form method="post" action="sendmail.php"> と記述して、送信画面(sendmail.php)に渡しています。
回答3件
あなたの回答
tips
プレビュー