フォームの戻るボタンで内容が消えてしまう!PHPを勉強しながらブログをやってみたいと考えている素人です。

このQ&Aのポイント
  • 素人がPHPを勉強しながら、ブログをやってみたいと考えています。ネット上のフリーのフォームを利用して問い合わせページを作成しましたが、確認ページの戻るボタンを押すと入力内容が消えてしまい、最初からやり直しになってしまいます。
  • sessionを利用しているようですが、sessionの仕組みがよくわからず、どこを修正すれば良いのか分かりません。
  • 試した修正方法もうまくいきません。どうすれば良いでしょうか?
回答を見る
  • ベストアンサー

フォームの「戻るボタン」で内容が消えてしまう・・・

PHPを勉強しながら、ブログをやってみたいと考えている素人です。 ネット上のフリーのフォームを利用させて頂き、問合せページを作ってみたのですが 確認ページの戻るボタンを押すと、入力が消えて、始めからやり直しになってしまいます。 session を利用しているようなのですが、素人ゆえsessionの仕組みが何とか解る程度で どこを修正して良いのか解りません。 「session_cache_limiter(‘none’);」 と言うものが、キーポイント?のようなのですが、色々と試しておりますが 一向にうまく行きません、何卒ご指導お願い致します。 以下、利用させて頂いているフォームの一部 配布元のサイト様(http://www.sapphirus.biz/php/sformmail/) 処理の流れ sformmail.html(入力) ≫ sformmail.php(入力チェック) ≫ confirm.php(確認) ≫ sformmail.php(送信[template.php/reply.php]) ≫ completion.html(完了) ○sformmail.php(入力チェック) // 設定 $mail_to = 'sample@mail.address'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード // メイン session_start(); if (!extension_loaded('mbstring')) Err('マルチバイト文字列関数が利用できません'); if (!$mail_to) Err('受取先メールアドレスが設定されてません'); if (!$_POST) Err('POSTデータがありません'); mb_language('ja'); mb_internal_encoding($internal_enc); $x_mailer = 'Sapphirus.Biz Formmail Ver. 1.40 (PHP/' . phpversion() . ')'; $mode = $_POST['mode']; switch ($mode) { case 'SEND': // メール送信 if (!$_SESSION) Err('セッションデータがありません'); // メールヘッダ if (!$_SESSION['email']) $mail_from = 'S.B.Formmail'; else $mail_from = $_SESSION['email']; $mail_header = "From: {$mail_from}\n"; if ($mail_bcc) $mail_header .= "Bcc: {$mail_bcc}\n"; $mail_header .= "X-Mailer: {$x_mailer}"; --------------文字制限のため以下省略---------------- ○confirm.php(確認) <?php //セッションを利用するのでここは削除しないで下さい session_start(); if (SID) Err('Cookieを有効にして下さい'); if (!$_SESSION) header('Location: completion.html'); function Err($err) { echo <<< EOM <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> ----以下省略--- 他にも、入力用や送信完了用のhtmlファイル等ありますが 上記が関連しているコードだと思います。どうぞよろしくお願い申し上げます。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

現象が再現できませんでしたので、参考程度にお聞きください。 提示されてるURLから、ソースをDLしてきてローカルのXAMPP上で確認しました。 windows版の Slipnir、Firefox、chrome、Safari の4つのブラウザで試しましたが、正常でした。 「戻る」ボタンを押した時の動きが、onclick="history.back()" ですので、コードの方ではなく ブラウザの設定や挙動そのものなどの方に問題があるのではないかと思います。 思ってるだけです。現象が再現できてないので、ぶっちゃけ理由は分かってません。(´・ω・`) OSとブラウザは何をお使いですか?

music_lucky
質問者

お礼

ご指導ありがとうございます。また返答が遅くなり申し訳ございません。 大変、大変申し訳ないのですが、私の勉強不足で セッションが切れていた?のが原因だったようです。 昨日、朝方まで勉強しておりまして、作成中の「問合わせページ」などを 数ページ開いたまま、作業をしておりました。 ひとまず完成したので、別の開いたままのページで確認をし うまく行かないので、ファイルを修正し、また開いたままのページで確認 の繰り返しをひたすらしておりました。 昨日はお手上げで、あきらめましたが、本日動作させると 普通に動きました。 全く私の勉強不足で申し訳ございません。 今回、OKWAVE様を利用させて頂くのは初めてなのですが 大変質の高い回答、サービスに驚いております。 返答も不慣れで恐縮ですが、大変良い勉強をさせて頂きました。 本当にありがとうございました。精進致します。

その他の回答 (1)

回答No.2

私のところのローカル環境でも、現象が再現出来ませんでした。 ちょっと調べてみたところ、 http://d.hatena.ne.jp/wonohe/20090224/1235440984 このような方法で解決された方がいらっしゃるようです。 対策内容は、HTMLのHEADタグ内に、 <meta content="86400" http-equiv="Expires"/> を追加してやるという物のようでした。 一度試してみてはいかがでしょう。

music_lucky
質問者

お礼

ご指導ありがとうございます。また返答が遅くなり申し訳ございません。 大変、大変申し訳ないのですが、私の勉強不足で セッションが切れていた?のが原因だったようです。 昨日、朝方まで勉強しておりまして、作成中の「問合わせページ」などを 数ページ開いたまま、作業をしておりました。 ひとまず完成したので、その開いたままのページで確認をし うまく行かないので、ファイルを修正し、また開いたままのページで確認 の繰り返しをひたすらしておりました。 昨日はお手上げで、あきらめましたが、本日動作させると 普通に動きました。 全く私の勉強不足で申し訳ございません。 今回、OKWAVE様を利用させて頂くのは始めてなのですが 大変質の高い回答、サービスに驚いております。 返答も不慣れで恐縮ですが、大変良い勉強をさせて頂きました。 本当にありがとうございました。精進致します。

関連するQ&A

  • フォームメールでタイトルが文字化けする

    こちらのサイトにある http://www.sapphirus.biz/php/sformmail/ フォームメール1というものを利用して確認画面つきのフォームを作成しております。 こちらのサイトでダウンロードしたものをデフォルトで利用すると ユーザーに対する自動返信メールに sformmail.php内の設定項目に記述したメールアドレスが メールの送信者の所に表示されて返信されてきます。 / 設定 $mail_to = 'XXXXXXXXXXXX'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード 送信者のところにメールアドレスだけでなく、 日本語名も追加して自動返信メールを使いたかったため、 sformmail.php内の // メール自動返信 if ($_SESSION['autoReply'] && $_SESSION['email'] && is_file('reply.php')) { $reply_header = "From:{$mail_to}\n"; if ($mail_bcc) $reply_header .= "Bcc: {$mail_bcc}\n"; $reply_header .= "X-Mailer: {$x_mailer}"; include ('reply.php'); $reply_message = html_entity_decode($reply_message, ENT_QUOTES, $internal_enc); $reply_message = str_replace("<br />", "", $reply_message); $reply_message = str_replace("\t", "\n", $reply_message); $reply_message = mb_convert_encoding($reply_message, $internal_enc, 'AUTO'); mb_send_mail($mail_from, $reply_subject, $reply_message, $reply_header); } にある $reply_header = "From:{$mail_to}\n";を $reply_header = "From:{YYYYYYY}{$mail_to}\n"; と変更しました。 結果、Gメールでメールを受け取ると送信者欄にYYYYYYYとメールアドレスが表示されるのですが メーラーによってYYYYYYYの部分が文字化けしてしまいます。 色々と調べておりましたら文字コードが $internal_enc = 'UTF-8'; // 文字エンコード という設定がありますが $reply_header = "From:{YYYYYYY}{$mail_to}\n"; に反映できていないのが問題と見受けられますが 修正方法がわかりません。 当方CGIの知識がないため、ご教示いただければ幸いです。

    • 締切済み
    • PHP
  • ActionScriptとPHPでメール送信

    【flashmail.as】 LV1 = new LoadVars(); LV1.onLoad = function(success){ gotoAndStop(2); // 2フレーム目に移動 } var1 = ""; var2 = ""; var3 = ""; gotoAndStop(1); on(press){ if(var1==""){err=err+"名前が入力されていません!\n");} if(var2==""){err=err+"メールアドレスが入力されていません!\n");} if(var3==""){err=err+"メッセージが入力されていません!\n");} LV1.var1 = var1; LV1.var2 = var2; LV1.var3 = var3; if(err==""){ LV1.sendAndLoad("./flashmail.php", LV1, "POST"); } } 以上のようなactionscriptファイルと、FLAHファイル本体flashmail.flaの2フレーム目に 同様の文を、アクションとして、書いてます。もちろん、モーションファイルflashmail.swfも書き出して、FTPサーバーの同じディレクトリに置いています。 動きとしては、メールフォームに入力して、送信ボタンを押すと、ありがとうございました。 と表示され、そのあと、flashmail.phpのmb_send_mail() でメール送信するはずなのですが、メールが到着しません。 flashmail.phpの内容も下記に表示します。 【flashmail.php】 <?php $subject = $_POST['var1']; $to = $_POST['var2']; $message = $_POST['var3']; var_dump($message); $from = "~"; $subject = mb_convert_encoding($subject, "utf-8", "auto"); // utf-8にエンコード $message= mb_convert_encoding($message, "utf-8", "auto"); mb_internal_encoding("UTF-8"); $res = mb_send_mail($to, $subject, $message, $from); header("Location: flashmail.html"); ?> どうすれば、メールが到着するようになるのか、ご指導お願いします。

    • ベストアンサー
    • PHP
  • フォーム入力から携帯への自動返信メールについて

    PHPを使用したフォームから自動返信メールを入力されたアドレスへ送信しているのですが、DOCOMOには自動返信メールが届かないのです。 PCも併用しているので、PCと携帯と振り分けてページを作成しています。 無料で使えるM-FORMのプログラムを使用しています。 $header2 = "From: ".mb_encode_mimeheader($to_name)."<$to>"; if (mb_send_mail($mail, $subject, $naiyou_k,$header2) ){....} ヘッダが悪いのでしょうか? 宜しくお願いいたします。

    • 締切済み
    • PHP
  • phpのシンプルなメールフォーム

    あるサイトにて、単一phpのメールフォームのソースをコピーし、使用としましたが、 設定したメールアドレスに、送信ボタンを押しましたが、 受信されません。  ・送信後、「メールを送信しました」と表示されます。  ・送信のあて先は、何も反応なし。  ・ソースの「●●@●●」はダミーです。 以下ソースです。原因がわかりますでしょうか。ご教授のほどよろしくお願いします。 ―――――――――――――――――――――――――――――――――――― <?php // 送信フラグ $send_flg = false; // エラーメッセージ $err_msg = array(); // 送信ボタンを押した後の処理 if ($_POST["post_flg"]) { // エラー if ($_POST["name"] == "") { $err_msg[] = "「お名前」は必須です"; } if ($_POST["email"] == "") { $err_msg[] = "「メールアドレス」は必須です"; } // エラーが無ければ送信 if (count($err_msg) == 0) { // 宛先 $mail_to = "●●@●●"; // 送信元アドレス $mail_from = "form@example.com"; // 件名 $mail_subject = "メールフォームから送信がありました"; // 本文 $mail_body = ""; $mail_body.= "■お名前\n".$_POST["name"]."\n\n"; $mail_body.= "■メールアドレス\n".$_POST["email"]."\n\n"; $mail_body.= "■コメント\n".$_POST["comment"]; // 送信処理 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($mail_to, $mail_subject, $mail_body, "From: <".$mail_from.">"); $send_flg = true; $_POST = array(); } } ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メールフォーム</title> </head> <body> <?php // 初期フォーム表示 if (!$send_flg) { ?> <h1>メールフォーム</h1> <?php // エラーメッセージがある場合 if (count($err_msg) > 0) { ?> <p style="color:red;"> <?php foreach ($err_msg as $val) { ?> ※<?php echo $val ?><br> <?php } ?> </p> <?php } ?> <form action="mail.php" method="post"> <p> お名前<br> <input type="text" cols="30" name="name" value="<?php echo $_POST["name"] ?>"><br> </p> <p> メールアドレス<br> <input type="text" cols="30" name="email" value="<?php echo $_POST["email"] ?>"><br> </p> <p> コメント<br> <textarea name="comment" cols="50" rows="10"><?php echo $_POST["comment"] ?></textarea><br> </p> <input type="submit" name="post_flg" value="送信する"><br> </form> <?php // メール送信後の表示 } else { ?> <br><br><br><br>メールを送信しました。<br> <?php } ?> </body> </html> ――――――――――――――――――――――――――――――――――――

    • ベストアンサー
    • PHP
  • PHPメールフォームであて先を複数指定したい

    お世話になります。 フリーのPHPスクリプトを利用してメールフォームを作成しています。 設置、テストともに正常にできたのですが、 あて先のメールアドレスを複数にすることができません。 ************************************************* // フォームからの入力された内容の送信先 $to = "aaa@bbb.com"; // フォームからの入力された内容の送信先(bccで追加送信する場合)があればメールアドレスを記入。なければ空白 $bcc = ""; // 送信されるメールのタイトル $subject = "お問い合わせありがとうございます"; ********************************************************* これでaaa@bbb.comに送信されるのですが、 送信先を複数にしようとして ******************************************************** // フォームからの入力された内容の送信先 $to = "aaa@bbb.com"; "ccc@ddd.ne.jp"; ******************************************************** のようにしたところ、うまくできませんでした。 ,で区切ったりしてみたのですがエラーが出てしまい、PHPは初心者なもので途方にくれています。 このようなPHPの記述で複数の送信先を指定する方法を教えて頂けないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのメール送信

    ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • メールフォームの件名が文字化けします

    PHPでメールフォームを作っていて、以前のサーバーではエラーも無く動いていたのですが、新しいサーバーでは件名がどうしても文字化けしてしまいます。(※本文も化けていましたが解決しました) 色々調べて色々試してみたのですが上手く動作せず・・・ 以下にPHPの必要と思われる部分を書いておきますので、ご解答の程よろしくお願いいたします。 ちなみにPHPのバージョンは4.4.2です。 <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php $mailto = "aaa@bbb.ccc" $subject = "フォームからのメール"; ~各種設定・エラーチェック等省略~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject=mb_encode_mimeheader($subject,"ISO-2022-JP"); if($from_add == 1) { $from = $_POST['E-mail1']; $header="From: $from\nReply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($mailcheck == 0 || $sendchk == 1) { mb_send_mail($mailto,$subject,$body,$header); if($remail == 1) { mb_send_mail($reto,$resubject,$rebody,$reheader); } } else { htmlHeader(); ?> ~送信確認画面レイアウト・その他処理省略~ <?php } ?>

    • ベストアンサー
    • PHP
  • メール送信での文字化け

    お世話になります。 ホームページから入力ホームに記入してもらい、送信するとphpを使用してメールを送信するプログラムを書いていますが、メールを送信するとメールの内容に文字化けが発生してしまいます。 どうすればよいでしょうか? 入力ホームのページからutf-8で統一すれば文字化けなくメールを送信することができましたが、 仕様の条件としてshift-jisにするとありますので、入力ホームはshift-jisにしてあります。 どうか教授ください。 <?php mb_language('ja'); mb_internal_encoding('SJIS'); session_start(); require_once("includes/common.php"); if(!isset($_SESSION["name"]) && !isset($_SESSION["tel"]) && !isset($_SESSION["email"]) && !isset($_SESSION["ren"])){ header("Location: contact.php"); } else{ $name=$_SESSION["name"]; $furi=$_SESSION["furi"]; $tel=$_SESSION["tel"]; $email=$_SESSION["email"]; $ren=$_SESSION["ren"]; $ktel=$_SESSION["ktel"]; $fax=$_SESSION["fax"]; $iken=$_SESSION["iken"]; $to=$email; $subject="こんにちは"; $to_admin="aaaa@bbbbb"; $subject_admin="ccccc@dddddd"; $from= "From: ".mb_encode_mimeheader("AAAAAA")."<>"; $message=<<<MESSAGE。 Eメールアドレス:{$email} お名前:{$name} 様 フリガナ:{$furi}様 電話番号:{$tel} 携帯電話番号:{$ktel} FAX番号:{$fax} 連絡方法:{$ren} <ご意見、ご要望> {$iken} MESSAGE; $message.=<<<MESSAGE MESSAGE; mb_send_mail($to,$subject,$message,$from); mb_send_mail($to_admin,$subject_admin,$message_admin,$from); session_unset(); } ?>

    • ベストアンサー
    • PHP
  • PHP入力フォームについて

    現在入力フォームを作っています。 流れとしてはDBに入っている会員情報をフォーム上に呼び出して(各inputにはDB内の会員の情報が表示される)各会員が自分の情報を編集できるというフォームです。 ここで質問なのですが、会員の人が自分の入力内容を変更した際に入力漏れがあるとフォーム画面に戻るのですがその際に入力した内容が表示されるのではなくDB内のデータが表示されてしまいます。 これをDB内のデータではなく入力した内容にしたいのですが、どうしたらよろしいでしょうか? ソースは下記になります。 form.php <?php DB呼び出し・・・ $_SESSION['name'] = $row['name']; ・・・ ?> <?php echo $_SESSION['err_name']; ?> <input type="text" name="name" value="<?php echo $_SESSION['name']; ?>" /> confirm.php <?php $name = htmlspecialchars($_REQUEST['name']); if(!strlen($name)) { $_SESSION['err_name'] = '氏名を入力してください。'; $errFlag = true; } else { unset($_SESSION['err_name']); } エラーの時はform.phpに戻る ?> <?php echo $name; ?> としています。 とても省略していますが、お分かりの方がいらっしゃいましたら教えていただけると助かります。

    • 締切済み
    • PHP
  • インラインフレーム内のセッション

    通常のHTMLファイルのインラインフレーム内に、別サーバーからPHPファイルを取得して表示しています。 そのPHP自体は簡単なアンケート(フォーム→入力内容確認→送信)なんですが、このフォーム→入力内容確認の遷移がうまくいきません。 セッションでフォーム内の値と送信ボタンの値(sub)を保持し、確認のファイルに if(@$_SESSION['sub']!=TRUE){ header("location:form.php"); exit(); }else{ (以下略) } と記述することで、もしURL直打ちの場合はフォームの入力画面に飛ばされるようにしてあるのですが、インラインフレームの中でフォームに入力して送信ボタンを押すと、強制的に同じ画面に戻ってしまうのです。 直接ブラウザで該当のPHPを見たときは、何の問題もなく動くので、プログラム自体にエラーがあるわけではないと思うのですが・・・。 どうも確認ファイルのif(@$_SESSION['sub']!=TRUE)で、セッションがうまく保持されていないためにheaderで飛ばされてしまっているらしいのですが、インラインフレーム内でセッションを利用するときはどうすればいいのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう