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

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

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

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

メール

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

HTML

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

Q&A

解決済

1回答

2177閲覧

PHPメールフォームでhtml側にhiddenで「自動返信の差出人」を指定し、確認画面で該当の項目を非表示にしたい

ErioYsd

総合スコア4

PHP

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

メール

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

HTML

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

0グッド

1クリップ

投稿2021/11/15 09:14

素人につき、とりとめない質問となってしまうこと、ご容赦ください。

下記で配布されているフリーのPHPメールフォームについて、2つ質問がございます。
【MailForm01】PHP多機能メールフォーム フリー(無料)版

下記のような構成になっているのですが、

mail.php(本体) contact.html(フォーム)

【1】本体PHPで設定する「件名」「自動返信の件名」「自動返信の送信者名」を、フォーム側で指定できるようにしたいです。

 ひとまず、「件名」「自動返信の件名」は何とかできました。
「自動返信の送信者名」はまだうまくいっていません。

PHP

1オリジナルでは、PHP本体で、決め打ちで設定する3項目 2 3// 管理者宛に送信されるメールのタイトル(件名) 4$subject = "〇〇ついての問い合わせ"; 5 6//自動返信メールの送信者欄に表示される名前 ※あなたの名前や会社名など(もし自動返信メールの送信者名が文字化けする場合ここは空にしてください) 7$refrom_name = "株式会社●● ▲▲支店"; 8 9// 差出人に送信確認メールを送る場合のメールのタイトル(上記で1を設定した場合のみ) 10$re_subject = "お問い合わせを承りました【▲▲支店】";

↑上記の内容を、↓HTMLフォーム側で自由に設定できるようにしたい。

html

1(例) 2 <form method="post" action="mail.php"> 3 <input name="件名" type="hidden" value="〇〇ついての問い合わせ"> 4 <input name="返信送信元" type="hidden" value="株式会社●● ▲▲支店"> 5 <input name="返信件名" type="hidden" value="お問い合わせを承りました【▲▲支店】"> 6・・・・・

本体PHPを以下のように書き換えてみたところ、「件名」「自動返信の件名」はHTML側の値を読み込むことができました。

PHP

1変更箇所 2 3()PHP本体で、HTMLフォームのname値に合わせて以下のように設定 4 5// 管理者宛に送信されるメールのタイトル(件名) 6$subject = "件名"; 7 8//自動返信メールの送信者欄に表示される名前 ※あなたの名前や会社名など(もし自動返信メールの送信者名が文字化けする場合ここは空にしてください) 9$refrom_name = "返信送信元"; ←ここはまだうまくいってない 10 11// 差出人に送信確認メールを送る場合のメールのタイトル(上記で1を設定した場合のみ) 12$re_subject = "返信件名"; 13 14 15 162200行目あたりに、以下を追記 17 18//変数初期化 19$sendmail = 0; 20..... 21(中略) 22 23//変数初期化(追記) 24$post_subject = ''; 25$post_resub = ''; 26$post_refrom = ''; 27 28//(追記) 29foreach($_POST as $key=>$val) { 30 if($key == $subject) $post_subject = h($val); 31 if($key == $re_subject) $post_resub = h($val); 32 if($key == $refrom_name) $post_refrom = h($val); 33} 34 353) 追記した箇所から後ろのコード内にて、以下の項目を、すべて下記のように変更しました 36$subject → $post_subject 37$re_subject$post_resub 38$refrom_name → $post_refrom

これで、「件名」「自動返信の件名」は、HTML側の値を読み込むことができましたが、「自動返信の送信者(返信送信元)」だけがうまくいきません。
どこを変更すれば良いでしょうか?


【2】また、これらの値は「hidden」で設定している隠しデータなので、送信前に表示される確認画面では非表示にさせたいです。

【HTML】 これらは確認画面では非表示にしたい <form method="post" action="mail.php"> <input name="件名" type="hidden" value="〇〇ついての問い合わせ"> <input name="返信送信元" type="hidden" value="株式会社●● ▲▲支店"> <input name="返信件名" type="hidden" value="お問い合わせを承りました【▲▲支店】"> ・・・・・ 【PHP】 ▼確認画面を構成している箇所 追記をした上で、330行目あたりから(オリジナルだと320行目あたり) <!-- ▼************ 送信内容表示部 ※編集は自己責任で ************ ▼--> <div id="formWrap"> <?php if($empty_flag == 1){ ?> <div align="center"> <h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4> <?php echo $errm; ?><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()"> </div> <?php }else{ ?> <h3>確認画面</h3> <p align="center">以下の内容で間違いがなければ、「送信する」ボタンを押してください。</p> <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST"> <table class="formTable"> <?php echo confirmOutput($_POST);//入力内容を表示?> </table>   (中略) <!-- ▲ *********** 送信内容確認部 ※編集は自己責任で ************ ▲--> ↑上記コード内の、下記に対して、「該当の値は非表示にする」ような処理をするのだと思うのですが…… <?php echo confirmOutput($_POST);//入力内容を表示?> 【PHP】 関連していると思われるコード 460行目あたり //確認画面の入力内容出力用関数 function confirmOutput($arr){ global $hankaku,$hankaku_array,$useToken,$confirmDsp,$replaceStr; $html = ''; foreach($arr as $key => $val) { $out = ''; if(is_array($val)){ foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); (中略) ここはどのように変更すればいいか、さっぱりです。

HTMLフォームでhiddenで指定した値を、確認画面では非表示にするには、どのようにすればいいでしょうか?

以上となります。
よろしくお願いいたします。

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

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

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

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

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

FKM

2021/11/15 09:21

nameに全角文字を使うのはあまり勧められません。そこでバグを発してる可能性も否定できないですね。
ErioYsd

2021/11/15 09:31

以下のように変えてみましたが結果は同じでした。 件名→title 返信送信元→rename 返信件名→retitle オリジナル版のHTMLフォームのサンプルが、名前や電話番号など全角文字が使われているので、大丈夫そうな気がします。 ↓サンプルは最初からこんな感じ <input size="20" type="text" name="お名前" /> <input size="30" type="text" name="電話番号" />
FKM

2021/11/16 00:11

var_dump($POST)として全postを取得してみてください。どこかで同じnameを使用していて上書きされている可能性もあります。
guest

回答1

0

ベストアンサー

【1】については、送信者自身が自由に入力または選択できるものでない限り、html側ではなくphp側でするべきです。たとえhiddenとしてあってもブラウザから送信前にいたずらで書き換えようと思えば可能ですので。
「自動返信の送信者(返信送信元)」だけがうまくいかないというのはよくわかりませんが、まずスペルミスを疑ってみてください。
【2】についてはphpファイルに以下のように手を加えれば可能です。

php

1// ファイルの上部などに変数設定の行を追加 2$hidden_keys = array('件名', '返信送信元', '返信件名'); 3 4// 中略 5 6function confirmOutput($arr){ 7 global $hankaku,$hankaku_array,$useToken,$confirmDsp,$replaceStr,$hidden_keys; // $hidden_keysを追加 8// 中略 9 10 foreach($arr as $key => $val) { 11 if (in_array($key, $hidden_keys)) continue; // 追加 12// 中略 13// returnの直前に以下を追加 14 foreach ($hidden_keys as $key){ 15 $html .= '<input type="hidden" name="' . $key . '" value="' . h($arr[$key]) . '">'; 16 } 17 18 return $html; 19}

(追記)ただ、見かけ上問題ないのですが、これだと</tbody>または</table>の直前に<input ...>が入ってしまうので、本来ならmail.php自体、もう少し書き換えが必要かと思われます。

投稿2021/12/01 15:59

編集2021/12/02 08:04
cerfweb

総合スコア1905

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

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

ErioYsd

2021/12/03 06:23

返信が遅くなってしまってすみません。 (小さい子がおり、まとまってPCに向かえる時間が飛び飛びにしか確保できないので……。) ただいまご教授いただいた内容を検証しております。のちほど改めてご報告させていただきます。
ErioYsd

2021/12/03 06:27

いたずらによる書き換えなど、セキュリティ面をご心配いただきありがとうごます。 小さな個人経営の自社HPの問い合わせ用なので、多少いたずらされても大丈夫です。
ErioYsd

2021/12/04 02:07

ありがとうございます! ご教授いただいた箇所を訂正、またこちらを参考に自動返信メールからも該当の項目を非表示にすることができ、想定通りの動作をするようになりました。心から感謝いたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問