• ベストアンサー

メール送信フォームとhistory.back()

現在PHPでメール送信フォームを作っています。画面表示としては、 入力画面→確認画面→送信という流れなのですが、確認画面で「戻る」ボタンを設置して入力画面に戻れるようにしたいと思っています。 そこで、入力画面を当初はhtmlとし、確認画面にhistory.back()を設置してうまく入力値が入っている状態になっていたのですが、入力画面をphpファイルにしたとたんhistory,back()すると空っぽの入力画面が表示されてしまうようになりました。 確認画面で「戻る」ボタンを設置し、入力画面に戻るにはどうすればいいでしょうか?

noname#102084
noname#102084
  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • racchoman
  • ベストアンサー率71% (20/28)
回答No.3

> 戻るボタンには、前と同じくhistory.back()を設定しています。 > この状態で試しているのですがやはり値が消えてしまっています。 history.back() では、hiddenの値が入力画面に渡されません。 戻るボタンのonClickで、formのaction属性を入力画面のURLに書き換えた上で、そのformをsubmit() するような処理が必要です(JavaScriptで記述します)。 また、上記とは別の方法もあります。history.back() で戻れないのは、入力画面がクライアントにキャッシュされていないためです。キャッシュされていないのは、セッションを使用しているためです。 PHP の session_cache_limiter() 関数を使う(入力画面を表示するプログラム内で、privateに設定する)ことで、history.back() が効くようになると思います。 ただ、一般的にはhistory.backを使わない方法を取ることが多いと思います。

noname#102084
質問者

お礼

ご回答ありがとうございました。 長らく返事もできなくて大変申し訳ございませんでした; いろいろ試行錯誤した末、セッション管理で値を保存させることに成功できました。 こんなにお返事が遅れてしまってもうしわけございません!! 今までphpなどで作成したことがなかったもので、こんなにいろいろと考えてつくらなきゃいけないのだと本当に苦労しました。 でも結構楽しかったのも事実ですので、これからじっくり勉強していこうと思います。

その他の回答 (3)

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.4

>入力画面の最初にだけそのファイルをrequire_onceで呼び出しているのが原因のようで、その呼出文を削除すると戻るボタンで値が受け取れることに気づきました;; ちょっと状況を全て飲み込めないのですが、、上記部分については、戻ってきた時には呼び出さなければいいという事なのでしょうか?? だとすれば <input type="hidden" name="back" value="1"> みたいな感じに戻る時にフラグを一緒に渡してやり 入力画面側では $backflg = $_POST['back']; if(!isset($backflg) || $backflg != 1){ require_once('hogehoge.php'); } のような感じではどうでしょうか。。

noname#102084
質問者

お礼

ご回答ありがとうございました。 長らく返事もできなくて大変申し訳ございませんでした; いろいろ試行錯誤した末、セッション管理で値を保存させることに成功できました。 こんなにお返事が遅れてしまってもうしわけございません!! 教えていただいた方法もとてもわかりやすく組み込みたかったのですが、既にセッション管理の試行錯誤をしている途中だったもので・・・ 次回、このような開発時にはぜひ活用させていただきたいと思います。 お礼が大変遅くなってしまい、申し訳ございませんでした。

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.2

hiddenで持ってPOSTで受けるのであればhistory.back()を使わずに直接元のphpファイルへリンクしてあげたらどうでしょうか。 <input name="button" type="button" onClick="location.href='hoge.php?'" value="戻る">

noname#102084
質問者

お礼

ありがとうございます! 重大な事を忘れてしまってました;;; 実はログイン機能もつけてまして、それを別ファイルのセッションで管理していたのです。 入力画面の最初にだけそのファイルをrequire_onceで呼び出しているのが原因のようで、その呼出文を削除すると戻るボタンで値が受け取れることに気づきました;; 私の予想ではセッション用phpファイルで、値を受け取ったりしているファイルを呼び出していないから途切れてしまっているのかなぁと思うのですが、メール送信フォーム部分はSSL設定のディレクトリに入っていてセッション管理用とは別になっているので、あまりセッション管理ファイルを触りたくなくて;; 何かよい修正案はないでしょうか?

  • ageha_btf
  • ベストアンサー率56% (27/48)
回答No.1

こんばんわ。 私のやり方で、見苦しいかもしれませんが、参考にして頂ければと思います。 例えば、メールアドレスを入力する項目であった場合 <INPUT type="text" name="mail" value="<?=$_POST["mail"]?>"> といった形で、valueの中にPOSTで受け取った値を設定し、 確認画面で、 <INPUT type="hidden" name="mail" value="<?$_POST["mail"]?>"> を記述し、入力画面値に値を渡す というのはどうでしょうか? 初期状態であれば、$_POST["mail"]はnullなので何も表示されませんが、確認画面から飛んできた場合は、ちゃんと表示されると思います。

noname#102084
質問者

お礼

ありがとうございます! なるほどと思い、早速試してみたのですが上手くいきません; もしよければアドバイス下さい;; 現状としては、 もともと確認画面にhiddenを持たせていたので、入力画面の各INPUTタグにvalue="$name"などを追加しました。 別ファイルにて、$nameをグローバル宣言し、$name=$_POST['name']で値を受け取っています。 戻るボタンには、前と同じくhistory.back()を設定しています。 この状態で試しているのですがやはり値が消えてしまっています。 これはただ単純なミス(ファイル呼出漏れとか)がどこかにあるのか、それともやり方自体が間違っているのかどちらでしょうか?

関連するQ&A

  • history.back() について

    ある入力フォームを作成しています。 入力エラーがあった場合、エラーメッセージを表示するとともに、 history.back() を使用した「戻る」ボタンを表示させます。 この戻るボタンを押して入力フォーム画面へ戻った場合、 入力した内容がフォームに残っているはずなのですが、 WindodwsXP、IE6 の環境では、クリアされてしまうことがわかりました。 これはIEの設定によって回避できるのでしょうか? もし、回避できないとしたら、history.back() に替わるJavaScriptって あるのでしょうか?値をクリアしないで前のページに戻るには、 やはりJavaScriptにたよらず、値の受け渡し処理をやって あげないとダメでしょうか? ご存知の方いらっしゃいましたら教えてください。 よろしくお願いします。

  • フォームからメール送信

    いつも参考にさせて頂いています。 現在メールフォームを作っていまして、Javascriptで作成したフォームからphpで作った確認画面へ遷移(form action=...phpにて)し、確認画面の送信ボタンをクリックした時点で指定したメールアドレスへ内容を送信 という流れで考えています。post変数をphpで受け取って確認画面を表示するところまではいいのですが、確認画面の内容をメールアドレスに送信するにはどうしたらいいのでしょうか? まだまだ初心者ですので噛み砕いて説明頂けば幸いです。 どうか宜しくお願いします

    • ベストアンサー
    • PHP
  • フォームからメールで送信

    ホームページビルダーを使ってフォームから送信ボタンをクリックして 私のメールへ送信されるよう次の操作を行いました。 まず送信ボタンを設定するため、挿入→フォームと入力部品→プッシュボタン→送信ボタン→属性ダイアログボックスが表示されプッシュボタンタブのボタンに表示するラベルに送信すると入力→OK(送信ボタンを設定しました) フォームを私のメールに送信するために次の操作をしました。 フォーム内を右クリック→属性の変更→属性ダイアログボックスが表示されフォームタブのアクションに私のメールアドレスを入力してメソッドからPostを選択エンコードの種類からtext/plainを選択→OK→プレビューにして送信ボタンをクリックしましたがその後表示されるはずの確認メッセージが表示されず、メールも送信されていません。 何か操作がおかしいんでしょうか? 解答宜しくお願いします。 ホームページビルダー11使用

  • フォームについて

    お問い合わせフォームの流れについて質問です。 現在の流れを書きますと・・・ 1:フォームに入力し確認ボタンをクリック 2:エラーチェックを行う 2-a:エラーがあればページ移管せずメッセージ表示 2-b:エラーがなければPOST値をSESSIONに代入し確認画面へリダイレクト 3:確認画面で送信ボタンをクリックで送信ページにリダイレクト 4:送信ページでメールの送信を行いSESSION破棄 こんな流れが自分の中で基準となっているのですが、セッションだと最終的に リダイレクトするので、確認画面から入力画面に戻ると入力値が消えることや IEでページがうまく表示されないことがあるので、できるだけPOSTで対応したく 思っております。 入力画面でformのactionを自分自身としているので、これを確認用のページに 指定してやれば問題ないのですが、エラーがあろうがなかろうが確認用のURLに 変わってしまいます。 エラーがあるうちは、画面移管させたくないので何かいい方法はないかと思って いるのですが、皆さんはどのような流れでフォームを作成しているのでしょうか? おおまかな流れで結構ですのでアドバイスをいただければと思っております。

    • ベストアンサー
    • PHP
  • メール送信フォームについて

    ヘッダー、メニュー、フッターはHTMLで記述しています。 問い合わせフォームはCGIで記述しています。 1.利用者が問い合わせフォームに入力 2.入力内容の確認画面、または入力エラーの画面 3.送信後完了画面 入力内容の確認画面でヘッダー、メニュー、フッターも表示させる。 入力エラーの画面でヘッダー、メニュー、フッターも表示させる。 送信後完了画面でヘッダー、メニュー、フッターも表示させる。 ヘッダー、メニュー、フッターはすべて同じ内容で、 問い合わせフォームのみが変化する仕様になっております。 入力内容の確認画面、入力エラーの画面、送信後完了画面の各画面のヘッダ、メニュー、フッターをCGI内にすべて記述しているのですが効率が悪いと感じております。 どのようにコーディングするのが最も効率が良いでしょうか? どうぞ宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • [戻る]のヒストリについて

     ヒストリについて、過去の質問を見るのですがいまいちわからなくって質問させて頂ます。             フォーム入力 → フォーム確認画面 -------------------------------------------------  フォーム入力内容が消えてない ← [戻る]をクリック      有効期限切れじゃない こんなことやりたいのですが、どうすればいいんでしょうか? <A HREF="#" onClick="history.back(); return false;">[戻る]</A> っと過去の質問に書いてあったのですが、これって、期限切れなしで、フォーム入力の内容も、絶対そのままの状態で戻るのでしょうか? そして、このhtmlタグだけで、javaScriptなしで良いのでしょうか? javaScript全くわかりませんので、できればスクリプト記載して教えていただけるとありがたいです。

  • フォームメール確認後の戻るについて

    教えてgooのNo.130269にも同様な質問があるのですが、教えてください。 htmlで作成した入力画面(フォーム)からcgi(perlで作成)で確認画面に行き、内容修正のための戻るボタンを設置しているのですが、戻るボタンを押すと、入力画面に戻っても、入力した内容が保持されないのですが、内容を保持する方法があれば教えてください。また、補足等が必要であればご連絡下さい。 私の使っているブラウザはIE5.5です。 確認画面では以下の両方のコードでだめでした。 <input type="button" value="内容を変更する" onclick="history.back()"> <a href="javascript:history.back()">内容を変更する</a>

    • 締切済み
    • CGI
  • history.backで戻ったときのjs処理

    はじめまして、javascript初心者です。 仕事でwebサイトを作っておりますが、わからないことがあり質問させていただきました。 history.backで前のページに戻ったときにアニメーションを実行させない方法はございますでしょうか。 トップページに外部から訪れた場合のみ、アニメーションを実行させています。 判別はreferrerを使用し、自ドメインを含んでいなかったら実行というような処理をしています。 トップページにはお問い合わせフォームがあり、お問い合わせフォーム→確認画面→戻るを押下した際にアニメーションが実行され、ページのトップへ戻ってしまいます。 「戻る」ボタンには「onClick="history.back()"」を使用しています。 aタグのリンクで処理をすればアニメーションは実行されないのですが、フォームの入力内容がリセットされてしまいます。 入力内容を維持したまま、アニメーションを実行させない方法はございますでしょうか。 ご教示いただけますようお願い申し上げます。

  • メール送信フォームについて

    HTMLのフォームに名前や住所などのいくつかの項目を入力し、送信ボタンを押すと管理者へメールが送信されるCGI(KENTWEBのメールフォームというやつ)をサーバに設置して使っていました。 今回、別のサーバに同じCGIを設置したのですが、そのサーバではCGIがまともに動いてくれません。本来送信ボタンを押すと全ての項目がプレビュー・送信されるはずなのですが、このサーバでは最後に入力した項目だけがプレビュー・送信されます。いくつかのサーバで試してみたのですが、問題のサーバ以外ではちゃんと動きます。 どなたかご存知の方いらっしゃったら対処方法などお教えいただければ幸いです。

    • 締切済み
    • CGI
  • フォーム送信後の戻るボタンの挙動について

    フォーム送信後の戻るボタンの挙動について PHPでホームページの一部を更新できるシステムを作りました。 項目一覧ページ → 編集ページ → 編集確認ページ → 更新後再度一覧ページへ、といったフローで更新がおこなわれます。 このとき、通常だと確認ページからブラウザの戻るボタン、もしくは画面内の戻るボタンを押すと、編集ページに戻り、入力時の情報がフォーム内に残っているのですが、編集ページを開いてから10分程度待ってから入力・送信後に確認ページから戻ると編集ページのフォーム内に入力したはずの入力情報が消えてしまいます。 おそらくサーバ(Apache)かPHPの設定によるものだと思うのですが、考えうる設定としてどんなものがあるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう