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

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

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

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

メール

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

HTML

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

Q&A

解決済

6回答

2263閲覧

HTMLフォームにて、PHPの変数に代入する方法(フォームの入力値とは別に)

ErioYsd

総合スコア4

PHP

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

メール

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

HTML

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

0グッド

1クリップ

投稿2021/11/30 05:34

編集2021/12/03 08:40

よくあるPHPメールフォームです。

HTMLフォームで送信者の名前や返信用メールアドレス、お問い合わせ内容などを入力してもらい、
PHPに入力した値を渡して送信します。

ファイル構成 form.html mail.php

PHP本体ファイルには、事前に「メールの件名」を設定する項目があります。

PHP

1// 管理者宛に送信されるメールのタイトル(件名) 2$subject = "";

この $subject = ""; の中身を、HTMLフォームの方で先に代入する方法は無いでしょうか?

【やってみたこと】
$_SESSION などを用いて出来ないかなぁと、思ったのですが、うまくいきませんでした。

html

1 2<!DOCTYPE HTML> 3<?php session_start(); ?> 4<html lang="ja"> 5<head> 6<title>サンプル</title> 7</head> 8<body> 9 10<?php $_SESSION['subject'] = "問い合わせ"; ?> 11 12<form method="post" action="mail.php"> 13 (中略) 14<input type="submit" value="  確認  " /> 15<input type="reset" value="リセット" /> 16</form>

php

1// 管理者宛に送信されるメールのタイトル(件名) 2$subject = $_SESSION['subject'];

ご教授のほど、よろしくお願いいたします。

追記:2021年12月3日
【さらにやってみたこと】

HTMLファイルの冒頭に以下を追記しました

HTML

1<?php 2 session_start(); 3 $_SESSION['subject'] = "●●店についての問い合わせ"; 4?> 5<!DOCTYPE HTML> 6<html lang="ja"> 7<head> 8 (中略)

PHPファイルの最初の方に以下を追記しました。
もともとあった設定項目はコメントアウトしました。

PHP

11行目のすぐ下に追記しました 2 3<?php header("Content-Type:text/html;charset=utf-8"); ?>  4//(追記) 5<?php 6 session_start(); 7 $subject = $_SESSION["subject"]; 8?> 9 10設定する項目を上書きされないようコメントアウトしました。 11// 管理者宛に送信されるメールのタイトル(件名) 12//$subject = "";

【結果】
想定通りにならず、件名は空欄のままメールが送信されてきます。
(なんでやねん……これじゃダメなん……?)

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

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

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

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

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

m.ts10806

2021/11/30 05:44

意図がわかりません。 利用するのは結局submitしてからですよね?
ErioYsd

2021/11/30 05:51 編集

意図、というのは、何をしたいか?ということでしょうか。 質問の通り、PHPファイルで設定する$subjectの値を、【とにかくどんな方法でもいいので】HTMLフォームの方で設定できるようにしたいだけです。 $_SESSIONがどうの、というのは忘れてください。まるっきりのド素人がそれっぽい感じのことをググって試してみただけなので……。
maisumakun

2021/11/30 05:52

> 【とにかくどんな方法でもいいので】 フォームの入力値であってはならない理由は何でしょうか?
m.ts10806

2021/11/30 05:52

PHPでやる限り画面表示されたときには仕事終わってます。 送信前に設定したところで送信時に使うのなら意味がないのでは?という懸念です。
ErioYsd

2021/11/30 05:58

$subject、はメールの「件名」としてPHPで処理されています。 仮にHTMLフォーム側に <input type="hidden" name="$subject" value="お問い合わせ"> とかしたとしても、送信されてくるメールの件名が「お問い合わせ」になるわけでなく、 メール本文の入力された内容に、「$subject=お問い合わせ」と入力されました〜と記載されるだけになります。
ErioYsd

2021/11/30 06:07

情報整理しますね。 HTMLフォームで入力された内容を、管理者と、フォームに入力したゲストが、それぞれ自動返信メールで受け取るという、ありふれた仕様のメールフォームです。 この時「メールの件名」は、PHPの設定で「あらかじめ決められたもの」が使用されるのですが($subject)、これをHTMLフォーム側で自由に設定できるようにしたい、ということです。 フォームの入力値だろうが、$_SESSION(?)だろうが、それが実現できるなら何でもいいのです。
m.ts10806

2021/11/30 06:22

「自由で設定」なら入力すれば良いのでは。何が問題なのかわかりません。 セッションで「うまくいかなかった」では何が起きたか分かりませんし、コードも一部すぎるので他者では判断できません。
ErioYsd

2021/11/30 06:26

こちらの質問をご参考ください。本来はこちらでした。 https://teratail.com/questions/369421 フォームの値として単純に入力すると、ゲストへの確認ページなどで表示されてしまうので、もっと別の簡単な方法はないかと思い直して、改めて質問したのが今回です。
ErioYsd

2021/11/30 06:30

変数をなんども書き換え?て、確認画面では特定の値だけを非表示にして……とか、変更箇所が多すぎる。 「メールの件名」をHTMLフォーム側で自由に設定できるようにしたい、ということだけなのに、なんでこんなに複雑になるんだー!と……
takasima20

2021/11/30 06:50

mail.php をこぴって使うんだけど修正方法がわかんないのでよろしく てことでしょうか? もしそうなら「分かる」人を呼んでくるしかないんじゃないかなあ。
wakuwaku499

2021/11/30 07:08

たぶん、「HTMLフォーム側」という言葉が回答者を混乱させているかと思います。この言葉を使うと画面入力をイメージしてしまいます。「HTMLファイル」や「HTML内」と記載、また「自由に」と記載しますと画面でいつでも変更することが可能と思います。たぶん仰りたいのは「HTMLファイルに固定値を設定」とのことかと思います、
ErioYsd

2021/11/30 07:29

>wakuwaku499様 「HTMLファイルに固定値を設定」それです!自分の言い方が悪くて本当すみません! >takasima20様 決して丸投げしたいわけではなく、自分なりに頑張って調べたり書き換えたりしているのですが、にっちもさっちもいかなくてこちらに質問しております……。
angel-sun

2021/11/30 13:12

なるほど、なんとなく皆さんが何を話しているのか理解できました。 下記のミッシングピースが混乱の理由でしょうね。 > この時「メールの件名」は、PHPの設定で「あらかじめ決められたもの」が使用されるのですが、 > これをHTMLフォーム側で [ いつ、誰が、どのように ] 自由に設定できるようにしたい、ということです。 ここを説明していただければ、すぐに解決するでしょう。
ErioYsd

2021/12/02 03:34

質問の仕方がが下手くそで本当にすみません…… > この時「メールの件名」は、PHPの設定で「あらかじめ決められたもの」が使用されるのですが、 > これを [ 予め、管理者(入力するゲストではなく設置する側が)、固定値で構わないので ]HTMLフォーム側で設定できるようにしたい、ということです。 ということです。通じましたでしょうか。本当すみません。
wakuwaku499

2021/12/02 04:22

本件、解決できましたでしょうか?
m.ts10806

2021/12/03 09:19

メール送信の処理も提示されないことにはなんとも。 そのセッション使ったときに送信処理のphpでは想定の値が来てるか確認はしてますよね?
ErioYsd

2021/12/03 11:45

中身の詳細に関してはこちらを見ていただくのが早いです。 https://teratail.com/questions/369421 ロリポップのレンタルサーバーで使っており、都度送信して検証しています。100通じゃきかないくらい自分にテスト送信してますね…
m.ts10806

2021/12/03 11:49 編集

だいぶ省略されてるようなので何とも。 あと、そのセッション使ったときに送信処理のphpでは想定の値が来てるか確認はしてますよね?
guest

回答6

0

こんばんは、天使です。

情報整理しますね。
HTMLフォームで入力された内容を、管理者と、フォームに入力したゲストが、それぞれ自動返信メールで受け取るという、ありふれた仕様のメールフォームです。
この時「メールの件名」は、PHPの設定で「あらかじめ決められたもの」が使用されるのですが($subject)、これをHTMLフォーム側で自由に設定できるようにしたい、ということです。
フォームの入力値だろうが、$_SESSION(?)だろうが、それが実現できるなら何でもいいのです。

こういうお話に見えるのですが違いますか? これであれば勿論、SESSIONは必要ありません。

form.php

PHP

1<?php 2session_start(); 3$_SESSION["subject"] = "未入力時のタイトルです"; 4?> 5<!DOCTYPE HTML> 6<html lang="ja"> 7 <head> 8 <title>サンプル</title> 9 </head> 10 <body> 11 <form method="POST" action="mail.php"> 12 タイトル:<input type="text" name="subject" value=""> 13 (中略) 14 <input type="submit" value="  確認  "> 15 <input type="reset" value="リセット"> 16 </form> 17 </body> 18</html>
mail.php

PHP

1<?php 2session_start(); 3 4$subject = (isset($_POST["subject"]) && !empty($_POST["subject"])) 5 ? $_POST["subject"] // ゲストがタイトルを入力した場合 6 : $_SESSION["subject"] // ゲストがタイトルを入力しなかった場合 7 ; 8 9var_dump($subject); 10

投稿2021/11/30 12:57

編集2021/11/30 13:00
angel-sun

総合スコア64

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

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

ErioYsd

2021/12/03 06:15

ご回答ありがとうございます。 すみません、質問の仕方が悪くて皆様を混乱させてしまっておりますが、件名($subject)は、ゲスト側が自由に設定できる必要はありません。 固定値で構わないので、HTML側で $subject に値を設定できればいいのです。 本当にそれけなのです。 メールの件名さえHTML側で設定できるなら、複数のHTMLフォームに対して一つのPHPを使い回せるからです。 「その一点(メールの件名)に違いを出したいだけなのに、なぜ同じPHPファイルをいくつも用意する必要が? のちのメンテナンスも考えて、一つのファイルで使い回したい!」と思ったのです。 プログラミング素人なのでめちゃくちゃを言っているかもしれませんが、もっと簡単に、ちょっとコードを付け足せばそれでいいような感じに考えていましたが、これはそんなに難しいことだったんでしょうか……。
maisumakun

2021/12/03 08:46

> 固定値で構わないので、HTML側で $subject に値を設定できればいいのです。 まず、この意味がわからないのです。メール送信フォームを使うのにあたって、管理側の操作は必要とされませんから、「HTML側で設定する」=「ゲスト側が設定できる」、ということになってしまいます。 そうではないとしたら、もう少し掘り下げての説明をいただけないでしょうか?
ErioYsd

2021/12/03 13:34

すみません、逆に、 「HTML側で設定する」=「ゲスト側が設定できる」 なぜイコールになるかわかりません。例えばセキュリティ面であまり推奨されないようですが、hiddenで隠してゲストが決めない形で固定値を渡すと、上記の式に当てはまらないと思うのですが…(自信ないですが、違うのでしょうか?)
maisumakun

2021/12/03 13:37 編集

> 例えばセキュリティ面であまり推奨されないようですが、hiddenで隠してゲストが決めない形で固定値を渡すと、上記の式に当てはまらないと思うのですが… まさに「セキュリティ面であまり推奨されない」とおりで、表に出ていませんが「ゲスト側が設定可能」な状態となります(ごく簡単に書き換え可能です)。
ErioYsd

2021/12/03 13:43

すみませんが私にはこれ以上の説明は無理です。大変ありがたいことに私の拙い説明でも意図を理解してくださっている方々もいらっしゃいますので、お手数を煩わせてしまうのも申し訳ないので以降は無視してくださって構いません。
guest

0

皆様からの様々なアドバイスを元に、試行錯誤した結果、想定通りの動作をいたしましたので、完了とさせていただきます。
セキュリティ面で懸念のある <input type="hidden"〜 の方法を用いての運用となりましたので、具体的な解決方法は割愛させていただきます。
個人経営の自社HPということで、本来なら非推奨でありますが、いったんこれで良しといたしました(迷惑メールなども処理するのは自分なので)

本来ならもっと勉強するなりプロに依頼するなりが妥当であるのは重々承知なのですが、コロナ禍で思わしくない主人の事業を手伝うため、時間もお金も無い中で自分でできることを頑張っておりました。
皆様、このような素人にここまでお付き合いくださり、本当にありがとうございました。心より感謝いたします。

投稿2021/12/04 02:17

ErioYsd

総合スコア4

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

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

guest

0

これを [ 予め、管理者(入力するゲストではなく設置する側が)、固定値で構わないので ]HTMLフォーム側で設定できるようにしたい

DBに持つ、設定ファイルに持つなど管理者側が編集可能な領域に持っておいて読み出せば良いと思います。

投稿2021/12/02 03:57

m.ts10806

総合スコア80850

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

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

0

ベストアンサー

mail.php はあまり修正したくないけど、メールの題名は変わるかもしれない
という前提で…

まず mail.sub ファイルを作ります。
内容はメールタイトル「のみ」です。
そして

php

1$subject = "";

php

1$subject = trim(file_get_contents('mail.sub'));

こんなかんじで読み込みます。

HTMLファイルの方でなんとかしたいというなら外してますが。。。
--- 追記 ---
※以下は推測で書いています。

  1. HTML ファイルにメールタイトル用の項目を追加

html

1<input type="hidden" name="subject" value="メールタイトル用の文字列"><!-- 例です -->
  1. mail.php を改造

2-1) $subject に上記を設定

php

1$subject = $_POST['subject']; //例です

2-2) フォームから出力する処理から上記を除外

php

1foreach ($_POST as $k=>$v) { 2 if ($k=="subject") continue; //例です

やみくもに質問とトライ&エラーを繰り返しても時間がかかるでしょうから、
もっと勉強するなり他人の力を借りるなりした方が…

投稿2021/11/30 12:28

編集2021/12/03 12:43
takasima20

総合スコア7458

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

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

0

この $subject = ""; の中身を、HTMLフォームの方で先に代入する方法は無いでしょうか?

単純に、$subject = $_GET['title'];のように書き換える、では何か不満でしょうか?

投稿2021/11/30 06:09

maisumakun

総合スコア145183

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

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

ErioYsd

2021/11/30 06:22

すみません、本当に素人なので、具体的な書き方がわからないのです。 HTML側はどういう記載になるのでしょうか。
maisumakun

2021/11/30 06:23

ふつうに、<input name="title">を用意するだけです。
ErioYsd

2021/11/30 07:25

ありがとうございます!
guest

0

APIを用意して事前に設定したいものをxhr/fetchで非同期で送っておいて
セッションにいれておけばよいのでは?

投稿2021/11/30 05:43

yambejp

総合スコア114784

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問