• ベストアンサー

アンケートフォームで前のページへ戻るをクリックしてもテキストフィールドの値が消えないようにするには。

こんにちわ。よくある、アンケートフォームのcookieの処理だと思うんですけど、名前とか住所とかを入力したあと次ページで確認画面がでてきて、修正したい場合は戻って修正するってやつありますよね。 そのときに「戻る」を押すと、テキストフィールドに入力した値が全部クリアされてしまうのですが、全部クリアされないように処理するにはどうしたらいいのでしょうか?javascriptのhistryback()を使えばできるんですけど、携帯なんでjavascriptは使えないんで、cookieでやると思うんですけど、どうやったらいいのかよくわかりません。。。 簡単でいいので処理のしかたをご存知のかたがいらしたらぜひともご教授ください。よろしくお願いします。

  • CGI
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.4

> それはHTMLベースでできるのですか? そのアンケートフォームのCGIスクリプトで対応します。 > なにかjavascriptのhistryback()みたいですね。 ブラウザにとっては「戻る」のではなく「進む」です。その進んだ先に、「入力済みデータが入ったフォーム」をサーバー側で用意しておく、という方法です。 > アンケートや、ショッピングの確認画面のソースはわたしも見ましたが、 > ほとんどが、histryback()かhostrygo(-1)でした。 そのようなフォームが、戻ったときにクリアされてしまうフォームですよね。 よほど小規模なものや個人のページは別として、いまどきは私はあまり見ませんが…。 それはいいとして、スクリプトの方は難しくありません。 私の知ってるやり方というより、ごく一般的に、普通はこうやる、というものです。 以下Perlという前提です。 受け取ったデータが $FORM{'name'} とか $FORM{'address'} に入っているとします。 で、入力フォームを表示する部分は、たいて以下のような感じになっていますよね? print <<"EOM"; お名前 <input type="text" name="name"> ご住所 <input type="text" name="address"> ~ EOM これを以下のように変えるだけです。 print <<"EOM"; お名前 <input type="text" name="name" value="$FORM{'name'}"> ご住所 <input type="text" name="address" value="$FORM{'address'}"> ~ EOM これで、受け取ったデータをそのままデフォルト表示するようになります。 次に確認画面ですが、普通、確認画面には元々 <input type="hidden" name="name" value="$FORM{'name'}"> というようなものが入っているはずです。 なので、戻るためのボタンを追加するだけでいいと思います。 呼ばれたスクリプトが、押されたのが「送信」なのか「戻る」なのかを判別できればいいわけですが、一番簡単なのは、submitボタンを、 <input type="submit" name="mode.input_form" value="戻る"> などというように書いておけば、あとはスクリプトの方で、受け取ったデータの中に「mode.input_form」という名前のフィールドが存在したら、戻るボタンが押されたと判断できます。その場合は、そのまま入力フォーム表示処理を行えば良いだけです。 なお、$FORM{'name'}のデータはエスケープ処理などのチェックが別途必要です。

ayako0401
質問者

補足

とても丁寧に答えていただいてありがとうございます。とてもわかりやすいです。 CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。 わたしが今つくっているのはフォームがHTMLファイル とCGIがべっこなのですが、その場合はHTMLファイルの中にお名前 <input type="text" name="name" value="$FORM{'name'}">とやればいいのかなと思ったのですが、やっぱりそれだとvalueの$FORM{'name'}がテキストフィールドにでてきちゃいます。。。 そういった場合はどうやるんでしょうか?

その他の回答 (4)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.5

> CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。 別にヒアドキュメントじゃなくても構いませんし、連想配列にしなくても構いません。 やっていることはただ、受け取った値をinputタグに挿入して表示しているだけです。 > わたしが今つくっているのはフォームがHTMLファイル > とCGIがべっこなのですが 連想配列にするところまで出来ているなら、あとは単純に、そのHTMLを開いて全文をコピー、フォーム表示スクリプトファイルに以下を追加します。 print <<'EOM'; Content-type: text/html ★ここにHTMLを貼り付け EOM そしてinputタグに、valueとその連想配列を埋め込めば良いです。

ayako0401
質問者

補足

takesiさん、わたしはあなたが神様に見えます。 ここまで丁寧におしえてくださった方ははじめてです。ほんとうにありがとう! HTMLをCGIのヒアドキュメントに埋め込めばいいんですね。まだ、試してないので自宅にもどったらやっています!素人の質問につきあってくれてありがとう! ちゃんと動くかまだ心配ですけど(笑)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

ANo.1の方に恐れ入りますが、普通はcookieは使わないと思いますよ。 データ量や閲覧環境やセキュリティなどなど問題が多く、およそ現実的ではないように思います。というか、携帯では、なおさら…。 ANo.2で捕捉されているように、確認画面のフォームに入力データを埋め込んでおき、submitされたら押されたのが「送信」ボタンなのか「戻る」ボタンなのかを判別し、「戻る」だった場合は受け取った入力データを入力フォームにデフォルト表示させる、という、ごく簡単な仕組みが一般的です。 もちろんcookieもjavascriptも使いません。 アンケートやショッピングなどの確認画面でHTMLソースを見てみると解ると思います。 なお、各ステップで、入力データを埋め込む、または入力フォームにデフォルト表示させる場合、HTMLエンコードをしておくなど若干の工夫が必要です。

ayako0401
質問者

補足

お返事ありがとうございます。それはHTMLベースでできるのですか?なにかjavascriptのhistryback()みたいですね。アンケートや、ショッピングの確認画面のソースはわたしも見ましたが、ほとんどが、histryback()かhostrygo(-1)でした。 takesiさんの知ってるやり方おしえてもらえませんでしょうか。

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

#1ですが追加します。 戻る処理をボタンにするのであれば、POST で入力値を返すという手もあります。 hiddenで各フィールドの値を書き出しておきます。 戻るボタンを押すと前の画面に遷移します。 入力画面では POST された値を各フィールドに反映します。 Aタグで戻るにリンクをする手もありますが、長さに制限があったと思うのでお勧めはしません。

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

その通り、クッキーでよろしいかと思います。 入力画面を作成するときにクッキーから各フィールドの値を取得して value プロパティにセットしてあげます。 最初に画面を開いた時は当然クッキーは空なので空欄になります。 submitした先の処理では、各フィールドの値をクッキーに登録します。 で、入力画面に戻れば先ほどの処理を通って値が反映されます。

関連するQ&A

  • テキストフィールドに入力した値の移動

    JavaScriptで、以下のことを実行したいのですが 初歩的なところでつまずいていて困っております。 --- フォーム[form1]内に、テキストフィールド[t1],[t2]と、 ボタン[btn]があります。 [t1]に文字を入力し、[btn]をクリックすると [t1]の値が[t2]に移動する --- *フレームは使っておりません。 簡単と思っていたのですが、 JavaScriptの基礎がわかっていないため 応用がきかなく固い頭のため困っています。 どうか宜しくお願いいたします。

  • テキストボックスフォームフィールドについて

    稟議書のテンプレートを作るのに、テキストボックスフォームフィールドのabボタンを使って入力フォーマットを作ってくれと言われて、ワードの本などでテキストボックスフォームフィールドを調べていますが、本にも、なかなか載っていなくて・・・フォームをダブルクリックすると、ダイアログボックスが出て、既定の文字列などでてきますが、入力してもらう時は、それぞれ、ダブルクリック後ダイアログボックスの既定の文字列に入力してもらうのでしょうか?いまいち使い方がよくわかりません。この機能を使うと、マルマル年マルマル月マルマル日などの年 月 日 がずれずに、入力できるそうなのですが、どのようにabボタンを使い フォームを使って、テンプレートを作り、第三者が入力していけばいいのでしょうか?教えてください。

  • 値をフォームに反映させるには…

    JavaScriptで得た値をフォームに反映させたいと思っています。 テキストボックス(InputタグのType='text')でしたら、「document.フォーム名.textオブジェクト名.value 」に値を入れれば反映されますが、ただの文字(ラベル)として反映させることはできないでしょうか? DIVタグやLabelタグやPタグなど色々と試しましたがうまくできませんでした。 なにか良い方法をご存知のかたがおりましたら教えてください。

  • フォーム上にある1つのテキストボックスで複数フィールドの値を抽出する

    フォーム上に配置している非連結のテキストボックスに任意の値を入力して,同じフォーム上に抽出結果を表示させる方法について,1つのフィールドのみを抽出対象にする場合, Private Sub 抽出_Click() 'フィルタを設定 Me.Filter = "担当 ='" & Me!所員抽出 & "'" 'フィルタを実行 Me.FilterOn = True End Sub で可能ですが,抽出したいフィールドが担当フィールドだけでなく,担当2…担当8まである場合,どのように条件をつなげていったら良いでしょうか。 担当…担当8の各フィールドにはデータが入っていたり,いなかったりします。

  • テキスト入力フォームの値を画面遷移なしで関数に渡す。

    <form>によるテキスト入力フォームに入力されている値を、javascript関数に渡したいと思います。 ページ遷移させずに渡す方法はありますでしょうか? onclickで関数を呼び出しても、ページが再読込されてしまいます。 <a href="javascript:xxxxxx">で関数を呼び出して、ページ遷移なしで、値を渡すことはできました。 これと同様の効果を、テキスト入力フォームでも行いたいと思っています。 お分かりの方がいらっしゃいましたら、お教え願いたいと思います。 よろしくお願い致します。

  • ユーザーフォームにテキストフィールドを作りたい

    エクセルでユーザーフォームに、テキストフィールド(テキストを複数行に渡って入力でき、右側に上下に動かせるバーがあるもの)を作りたいんですが、どうやって作れば良いのでしょうか? ご存知の方、ご教授ください。 Excel2003です。

  • テキストフォームのテキストをクリックで消す方法

    メールアドレスを入力させるテキストフォームに「メールアドレスを入力してください」と表示させておき、クリックするとそのテキストが消え入力できる状態にする方法を探しています。 javascriptでの方法はあったのですが、Flashでのactionscriptではどのように記述したらよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 1つ前のレコードのフィールドをコピーするVBAについて

    あるフィールドに入力する時、1つ前のレコードと同じ値であれば、Ctrl+2で簡単に入力出来ますね。 それで、更に入力の手間を省くために、これもVBAで自動化しようと思ったのですが、はてどうしたらと行き詰まってしまいました。 入力用のフォームを作っておいて、いくつかのフィールドに入力するテキストボックスをいくつか作って、そのうち1つはほとんど同じ値を持つとすれば、このフォームの更新前のイベントプロシージャが適切かと思います。このフォームに入力しようとしたら、即座にほとんど決まった値を持つフィールドに、1つ前のレコードの値が入るというようなコードになるかと思います。そのコードの1例を教えて頂けますか?また、他のいい方法はあるのでしょうか? 以上、よろしくお願い致します。

  • Webブラウザにてページのりロードを行ってもフィールド値を消さない方法?

    どうしても解らない為教えてください。Webブラウザにてアンケート入力フォームが有るとします。アンケート入力フォームには複数の入力フィールドがあり、そのフィールドに値が入っている状態でページのリロードを行うとフィールド値が消えてしまいます。ページのリロードを行い、且つフィールド入力値を保持する方法は有りますでしょうか?リロードはフォーム上にボタンを作成しonclickイベントでlocation.reload()にてリロードしています。宜しくお願い致します。

  • Accessで、親フィールドに子フィールドの値を入れたいのですが

    親フィールドの[テキストボックスA]に [テキストボックスB]-子フィールドのフッターにある[テキストボックスC] という式の値を表示させたいのですが。 Aのコントロールソースに = [B]-[子フィールド名].フォーム![C] と入力すると「#Name?」となり、「フォーム」を「Form」とすると空欄になるのですが、どこを直せばいいのでしょうか。 [B]は数値です。 [C]はsum関数が入っていて、普通に表示されてます。 宜しくおねがいします。

専門家に質問してみよう