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

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

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

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

HTML

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

Q&A

解決済

2回答

1822閲覧

問い合わせフォームで送ったメールの内容が消える

nanasiki

総合スコア2

PHP

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

HTML

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

0グッド

0クリップ

投稿2021/08/03 10:08

編集2021/08/04 01:14

前提・実現したいこと

自作メールフォームからメールを送った場合に、
送信側、受信側に内容に漏れがなくメールが届く状態にしたい

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

①確認画面への移行時に名前の入力部分が消える
②メールを送信するとメールは届くが、名前、email、内容が消えた状態でメールが届く
イメージ説明

該当のソースコード

<?php session_start(); $mode = 'input'; $errmessage = array(); if( isset($_POST['back']) && $_POST['back'] ){ // 何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ // 確認画面 if( !$_POST['fullname'] ) { $errmessage[] = "名前を入力してください"; } else if( mb_strlen($_POST['fullname']) > 100 ){ $errmessage[] = "名前は100文字以内にしてください"; } $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES); if( !$_POST['email'] ) { $errmessage[] = "Eメールを入力してください"; } else if( mb_strlen($_POST['email']) > 200 ){ $errmessage[] = "Eメールは200文字以内にしてください"; } else if( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){ $errmessage[] = "メールアドレスが不正です"; } $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES); if( !$_POST['message'] ){ $errmessage[] = "お問い合わせ内容を入力してください"; } else if( mb_strlen($_POST['message']) > 500 ){ $errmessage[] = "お問い合わせ内容は500文字以内にしてください"; } $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES); if( $errmessage ){ $mode = 'input'; } else { $mode = 'confirm'; } } else if( isset($_POST['send']) && $_POST['send'] ){ // 送信ボタンを押したとき $message = "お問い合わせを受け付けました \r\n" . "名前: " . $_SESSION['fullname'] . "\r\n" . "email: " . $_SESSION['email'] . "\r\n" . "お問い合わせ内容:\r\n" . preg_replace("/\r\n|\r|\n/", "\r\n", $_SESSION['message']); mail($_SESSION['email'],'お問い合わせありがとうございます',$message); mail('※個人情報のためメールアドレス省略','お問い合わせありがとうございます',$message); $_SESSION = array(); $mode = 'send'; } else { $_SESSION['fullname'] = ""; $_SESSION['email'] = ""; $_SESSION['message'] = ""; } ?> <head> <meta charset="utf-8"> <title>お問い合わせフォーム</title> </head> <body> <?php if( $mode == 'input' ){ ?> <!-- 入力画面 --> <?php if( $errmessage ){ echo '<div style="color:red;">'; echo implode('<br>', $errmessage ); echo '</div>'; } ?> <div id="contact-title"> <h1><p>Contact</p></h1> </div> <form action="" method="post" class="nyuryoku"> <h2> <p>名前</p> <input type="text" class="name" name="fullname" value="<?php echo $_SESSION['fullname'] ?>"> <p>Eメール</p> <input type="email" class="email" name="email" value="<?php echo $_SESSION['email'] ?>"> </h2> <h3>お問い合わせ内容</h3> <textarea cols="40" rows="8" name="message" style="border: solid 1px #ddd;"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" / style="border: solid 1px #ddd; width: 150px; margin-top: 30px;"> </form> <?php } else if( $mode == 'confirm' ){ ?> <!-- 確認画面 --> <form action="" class="confirm" method="post"> 名前: <?php echo $_SESSION['fullname'] ?><br> Eメール:<?php echo $_SESSION['email'] ?><br> お問い合わせ内容<br> <?php echo nl2br($_SESSION['message']) ?><br> <input type="submit" class="back" name="back" value="戻る" /> <input type="submit" class="send"name="send" value="送信" /> </form> <?php } else { ?> <!-- 完了画面 --> <h6>送信しました。 <br>お問い合わせありがとうございました。</h6> <a href="http://clover.gonna.jp/" class="btn04 home"><span>TOPへ</span></a> <?php } ?>

試したこと

} else {
$_SESSION['fullname'] = "";
$_SESSION['email'] = "";
$_SESSION['message'] = "";
}

の部分で、送信前に実行されている可能性がある。

} else {
$_SESSION['fullname'] = "a";
$_SESSION['email'] = "b";
$_SESSION['message'] = "c";
}

上記のように記入し、変化がないか確認したところ、
入力画面に文字が入った状態になりました。
イメージ説明

やはりお教え頂いた通り、どこかで $_SESSIONの部分が空になっているのでしょうか?

補足情報(FW/ツールのバージョンなど)

Wordpressをかませて問い合わせフォームを実装しています。
メールの送信自体は問題なくできているのですが、メールを送ると上記写真のように内容が消えております。
ほぼ初心者のため、どなたかお教え頂けますと幸いです。

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

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

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

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

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

m.ts10806

2021/08/04 01:37

コードはマークダウンのcodeにてご提示ください。 あと「かませて」ではどのような構成なのか不明です。環境や設定など含めて関連性がわかるような情報を提示してください
guest

回答2

0

ベストアンサー

$_SESSION['fullname'] = htmlspecialchars($_POST['fullname'],□ENT_QUOTES);

提示いただいたコードにはこの部分の、ENT_QUOTESの前に全角スペースが入っているようなので、もし実行されているコードにも、全角スペースがあれば削除してください。

$_SESSION['fullname']の部分なので、この影響かもしれません。

投稿2021/08/11 01:14

webgoto

総合スコア1293

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

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

nanasiki

2021/08/11 03:39

webgoto様 お教え頂きありがとうございます。 お陰様で値も抜けることなく、メールも問題なく届くよう改善できました。 webgoto様のお陰です。本当にありがとうございました。
guest

0

私のphpの環境(wordpress噛ませず)では正しい値の入った状態でメールが届きました。
おそらく、どこかのタイミング(wordpressが関係する?)で$_SESSIONの値が空になっているのだと思います。
気になるのは

php

1} else { 2 $_SESSION['fullname'] = ""; 3 $_SESSION['email'] = ""; 4 $_SESSION['message'] = ""; 5}

の部分で、送信前に実行されているのかもしれません。

php

1} else { 2 $_SESSION['fullname'] = "a"; 3 $_SESSION['email'] = "b"; 4 $_SESSION['message'] = "c"; 5}

などにしてみて、もしこの値がメールに記載されていたら、この部分を送信前に行わないように修正をしたら良いと思います。

投稿2021/08/03 14:02

webgoto

総合スコア1293

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

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

nanasiki

2021/08/04 01:10

webgoto様 $_SESSIONの値が空になっている可能性が高いとのこと、お教え頂き誠にありがとうございます。 お教え頂いた内容を基に、 } else { $_SESSION['fullname'] = "a"; $_SESSION['email'] = "b"; $_SESSION['message'] = "c"; } と変えて更新をしたところ、入力画面の名前、メール、内容の部分にa,b,cが入った状態になりました。 (※上記試したことの部分へ画像を添付しております。) やはり仰って頂いたように、$_SESSIONの値がどこかで空になっているのでしょうか?
webgoto

2021/08/04 01:25

言葉足らずですみません。その部分は項目の初期値を設定している部分ですので、入力画面でa b cとなるのは正しい挙動です。 その状態で他の内容を入力し、メールを送信した場合にメールの記載がa b cになっていたら、メール送信直前にsessionの値を初期化するプログラム(a b cと変えた部分)が実行されてしまっているということになります。
nanasiki

2021/08/04 01:44

こちらこそ理解が悪く申し訳ありません。 また、ご丁寧にお教え頂きありがとうございます。 a b cの値を入れた状況で、入力画面に他の内容を入力しメールを送りましたが、メールにはa b cの記載はありませんでした。
webgoto

2021/08/04 02:01

検証ありがとうございます。 その部分は問題ないようですので、戻していただいて大丈夫です。 $_SESSIONの問題かの確認のため、mail()関数の前に下記のプログラムを追加してみて、$_SESSIONの値に何が入ってるか確認すると良いかもしれません。 echo '<pre>'.print_r($_SESSION,true).'</pre>'; //追加 mail($_SESSION['email'],'お問い合... この状態でメールを送信すると完了画面に$_SESSIONの内容が表示されます。 その値がおかしければ、やはりSESSIONが書き換えられている。 もし正しく表示されれば、おそらくmail()関数の周辺に問題があると考えられます。
nanasiki

2021/08/11 00:58

webgoto様 お世話になっております。 頂いた内容で実行をしたところ、fullnameのSESSION部分だけ抜けている状況でした。 'email' 'message'については値が入っておりました。 上記ソースコードでfullnameだけ抜けてしまう原因などお分かりでしたらアドバイスを頂くことは可能でしょうか? またfullname以外については、メールにもきちんと内容が反映されて届きました。 どうやらsession_start();の位置が悪かったようで、修正をしたところ改善をしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問