

こんにちわ。よくある、アンケートフォームのcookieの処理だと思うんですけど、名前とか住所とかを入力したあと次ページで確認画面がでてきて、修正したい場合は戻って修正するってやつありますよね。
そのときに「戻る」を押すと、テキストフィールドに入力した値が全部クリアされてしまうのですが、全部クリアされないように処理するにはどうしたらいいのでしょうか?javascriptのhistryback()を使えばできるんですけど、携帯なんでjavascriptは使えないんで、cookieでやると思うんですけど、どうやったらいいのかよくわかりません。。。
簡単でいいので処理のしかたをご存知のかたがいらしたらぜひともご教授ください。よろしくお願いします。
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'}のデータはエスケープ処理などのチェックが別途必要です。
この回答への補足
とても丁寧に答えていただいてありがとうございます。とてもわかりやすいです。
CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。
わたしが今つくっているのはフォームがHTMLファイル
とCGIがべっこなのですが、その場合はHTMLファイルの中にお名前 <input type="text" name="name" value="$FORM{'name'}">とやればいいのかなと思ったのですが、やっぱりそれだとvalueの$FORM{'name'}がテキストフィールドにでてきちゃいます。。。
そういった場合はどうやるんでしょうか?
No.5
- 回答日時:
> CGIの中にヒアドキュメントとして書いて、valueの値を連想配列にするんですね。
別にヒアドキュメントじゃなくても構いませんし、連想配列にしなくても構いません。
やっていることはただ、受け取った値をinputタグに挿入して表示しているだけです。
> わたしが今つくっているのはフォームがHTMLファイル
> とCGIがべっこなのですが
連想配列にするところまで出来ているなら、あとは単純に、そのHTMLを開いて全文をコピー、フォーム表示スクリプトファイルに以下を追加します。
print <<'EOM';
Content-type: text/html
★ここにHTMLを貼り付け
EOM
そしてinputタグに、valueとその連想配列を埋め込めば良いです。
この回答への補足
takesiさん、わたしはあなたが神様に見えます。
ここまで丁寧におしえてくださった方ははじめてです。ほんとうにありがとう!
HTMLをCGIのヒアドキュメントに埋め込めばいいんですね。まだ、試してないので自宅にもどったらやっています!素人の質問につきあってくれてありがとう!
ちゃんと動くかまだ心配ですけど(笑)
No.3
- 回答日時:
ANo.1の方に恐れ入りますが、普通はcookieは使わないと思いますよ。
データ量や閲覧環境やセキュリティなどなど問題が多く、およそ現実的ではないように思います。というか、携帯では、なおさら…。
ANo.2で捕捉されているように、確認画面のフォームに入力データを埋め込んでおき、submitされたら押されたのが「送信」ボタンなのか「戻る」ボタンなのかを判別し、「戻る」だった場合は受け取った入力データを入力フォームにデフォルト表示させる、という、ごく簡単な仕組みが一般的です。
もちろんcookieもjavascriptも使いません。
アンケートやショッピングなどの確認画面でHTMLソースを見てみると解ると思います。
なお、各ステップで、入力データを埋め込む、または入力フォームにデフォルト表示させる場合、HTMLエンコードをしておくなど若干の工夫が必要です。
この回答への補足
お返事ありがとうございます。それはHTMLベースでできるのですか?なにかjavascriptのhistryback()みたいですね。アンケートや、ショッピングの確認画面のソースはわたしも見ましたが、ほとんどが、histryback()かhostrygo(-1)でした。
takesiさんの知ってるやり方おしえてもらえませんでしょうか。
No.2
- 回答日時:
#1ですが追加します。
戻る処理をボタンにするのであれば、POST で入力値を返すという手もあります。
hiddenで各フィールドの値を書き出しておきます。
戻るボタンを押すと前の画面に遷移します。
入力画面では POST された値を各フィールドに反映します。
Aタグで戻るにリンクをする手もありますが、長さに制限があったと思うのでお勧めはしません。
No.1
- 回答日時:
その通り、クッキーでよろしいかと思います。
入力画面を作成するときにクッキーから各フィールドの値を取得して value プロパティにセットしてあげます。
最初に画面を開いた時は当然クッキーは空なので空欄になります。
submitした先の処理では、各フィールドの値をクッキーに登録します。
で、入力画面に戻れば先ほどの処理を通って値が反映されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスの返す値
-
Error: No Recipient というエ...
-
ボタンの処理
-
別formのhidden項目を自form値...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
VB初心者。小数点以下の表示で...
-
perlを難読化、暗号化させたい
-
「value」に2つの値をセットす...
-
プログラミングについての質問...
-
掲示板(kentさんの所のsunbbs...
-
MSPゴシックで、一番幅を取る文字
-
[HTML]プルダウンメニューの横...
-
EXCELとの連携
-
ラジオボタンを選択済みにする...
-
WEBページを強制的に横画面で見...
-
サーバー上のPDFにCGIでパスワ...
-
iis+cgiでmultipart/form-data...
-
INPUT TYPE
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスの返す値
-
別formのhidden項目を自form値...
-
複数フィールドの値を一つのVAL...
-
メールフォームの内容を送信者...
-
フォームがFirefoxで動作するの...
-
perlの文法について
-
パスワードの連携について
-
&ReadParseについて
-
確認画面で表示される商品名に...
-
チェックボックスでのvalue値の...
-
YOMIサーチのソース教えてくだ...
-
複数の発行スタンドのメルマガ...
-
チェックBOXにチェックを入...
-
cgi(サイト内検索?)について。
-
VBAでWEBもっと見るを押して...
-
ボタンの処理
-
cgiの改造なんですけど助けてく...
-
CGIでラジオボタンの選択結果を...
-
<FORM TARGET="">で開く窓の大...
-
CGIでチェックボックスを使...
おすすめ情報