- ベストアンサー
アンケートフォームで前のページへ戻るをクリックしてもテキストフィールドの値が消えないようにするには。
こんにちわ。よくある、アンケートフォームのcookieの処理だと思うんですけど、名前とか住所とかを入力したあと次ページで確認画面がでてきて、修正したい場合は戻って修正するってやつありますよね。 そのときに「戻る」を押すと、テキストフィールドに入力した値が全部クリアされてしまうのですが、全部クリアされないように処理するにはどうしたらいいのでしょうか?javascriptのhistryback()を使えばできるんですけど、携帯なんでjavascriptは使えないんで、cookieでやると思うんですけど、どうやったらいいのかよくわかりません。。。 簡単でいいので処理のしかたをご存知のかたがいらしたらぜひともご教授ください。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> それは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'}のデータはエスケープ処理などのチェックが別途必要です。
その他の回答 (4)
- taseki
- ベストアンサー率66% (155/233)
> CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。 別にヒアドキュメントじゃなくても構いませんし、連想配列にしなくても構いません。 やっていることはただ、受け取った値をinputタグに挿入して表示しているだけです。 > わたしが今つくっているのはフォームがHTMLファイル > とCGIがべっこなのですが 連想配列にするところまで出来ているなら、あとは単純に、そのHTMLを開いて全文をコピー、フォーム表示スクリプトファイルに以下を追加します。 print <<'EOM'; Content-type: text/html ★ここにHTMLを貼り付け EOM そしてinputタグに、valueとその連想配列を埋め込めば良いです。
補足
takesiさん、わたしはあなたが神様に見えます。 ここまで丁寧におしえてくださった方ははじめてです。ほんとうにありがとう! HTMLをCGIのヒアドキュメントに埋め込めばいいんですね。まだ、試してないので自宅にもどったらやっています!素人の質問につきあってくれてありがとう! ちゃんと動くかまだ心配ですけど(笑)
- taseki
- ベストアンサー率66% (155/233)
ANo.1の方に恐れ入りますが、普通はcookieは使わないと思いますよ。 データ量や閲覧環境やセキュリティなどなど問題が多く、およそ現実的ではないように思います。というか、携帯では、なおさら…。 ANo.2で捕捉されているように、確認画面のフォームに入力データを埋め込んでおき、submitされたら押されたのが「送信」ボタンなのか「戻る」ボタンなのかを判別し、「戻る」だった場合は受け取った入力データを入力フォームにデフォルト表示させる、という、ごく簡単な仕組みが一般的です。 もちろんcookieもjavascriptも使いません。 アンケートやショッピングなどの確認画面でHTMLソースを見てみると解ると思います。 なお、各ステップで、入力データを埋め込む、または入力フォームにデフォルト表示させる場合、HTMLエンコードをしておくなど若干の工夫が必要です。
補足
お返事ありがとうございます。それはHTMLベースでできるのですか?なにかjavascriptのhistryback()みたいですね。アンケートや、ショッピングの確認画面のソースはわたしも見ましたが、ほとんどが、histryback()かhostrygo(-1)でした。 takesiさんの知ってるやり方おしえてもらえませんでしょうか。
- ttyp03
- ベストアンサー率28% (277/960)
#1ですが追加します。 戻る処理をボタンにするのであれば、POST で入力値を返すという手もあります。 hiddenで各フィールドの値を書き出しておきます。 戻るボタンを押すと前の画面に遷移します。 入力画面では POST された値を各フィールドに反映します。 Aタグで戻るにリンクをする手もありますが、長さに制限があったと思うのでお勧めはしません。
- ttyp03
- ベストアンサー率28% (277/960)
その通り、クッキーでよろしいかと思います。 入力画面を作成するときにクッキーから各フィールドの値を取得して value プロパティにセットしてあげます。 最初に画面を開いた時は当然クッキーは空なので空欄になります。 submitした先の処理では、各フィールドの値をクッキーに登録します。 で、入力画面に戻れば先ほどの処理を通って値が反映されます。
補足
とても丁寧に答えていただいてありがとうございます。とてもわかりやすいです。 CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。 わたしが今つくっているのはフォームがHTMLファイル とCGIがべっこなのですが、その場合はHTMLファイルの中にお名前 <input type="text" name="name" value="$FORM{'name'}">とやればいいのかなと思ったのですが、やっぱりそれだとvalueの$FORM{'name'}がテキストフィールドにでてきちゃいます。。。 そういった場合はどうやるんでしょうか?