【無料配信♪】Renta !全タテコミ作品第1話

過去ログやあちこちのサイトで同様のトピックをたくさん読んだのですが、
私の知識不足もあり、汎用性の高い解決策が見つけられなかったので教えてください。

HTMLのヘッダーでキャッシュ制御などをしていないのに、
掲示板やフォームのCGIで、プレビュー画面に行き、
<input type=button value='前画面に戻る' onClick='history.back()'>
などのボタンで戻ると、時々ページがリロードされてしまい、
入力した内容が消えてしまうことがありますよね?
一説によればこの現象はブラウザ(特にIE)のご機嫌的なもののようで、
バージョンにはほとんど関係なく、ゆえに対応策を講じていない
掲示板やフォームが多いのかな?という印象を受けました。

これに対して、入力された値をどこかに一時的にキープしておき、
投稿画面に戻った時にそれを渡すような形で対応できている
超シンプルな掲示板やフォームのCGIはありますか?
(もしかしてクッキー処理というものでしょうか???)

プログラミング初心者の私ですが、ちょっと勉強してみたいので、
オススメの良いサンプルがありましたら、ぜひご紹介ください。
よろしくお願いいたします!

A 回答 (2件)

確かに、「もどる」ボタンを押すと、入力した項目が消えてしまう事ってありますよね(^^;



こういう事が嫌なので、私もユーザーさんにガッカリしてほしくないと思い、入力をキープする事ができるCGIを使用しています。

http://apps.cside.com/
上記で配布されている「ThemeResMail」と言うのが、設定の仕方によって入力項目をキープする事ができます。
http://apps.cside.com/theme/tmresmail/

マニュアルを読むだけでも結構大変なのですが、ひょっとしたフォームであればできると思います。

結構高機能なCGIなので、このCGIで「何ができるのか」を一通り把握する事ができたら、良いものが作れますよ。
メールフォーム限定になってしまいますが。。。

私がみてきたメールフォームCGIの中では、このプログラムが一番高機能だと思います。
投稿内容もCSV形式で保存されるので、エクセルなどで分析する事もできますし。

それでは。。。

参考URL:http://apps.cside.com/
    • good
    • 0
この回答へのお礼

ありがとうございます!
高機能なCGIとのことで、私のレベルではまだちょっと
教材の対象としては難しすぎるかもしれませんが、
とりあえずDLさせていただきたいと思います。

やはり超シンプルな掲示板やフォームで
この機能を兼ね備えたものというのは難しいのでしょうか・・・。

お礼日時:2007/10/30 19:22

簡単な掲示板やメールフォームで言えば、入力して投稿ボタン(送信ボタン)を押すと、確認画面が出るようなタイプのCGIであれば、確認画面に設置してある「もどるボタン(訂正ボタン)」を押して、入力画面に戻れるようになっているタイプであれば、入力した内容が消えてしまうと言う事は少ないと思います。



完全に消えないとは言い切れませんが、一応代用できるかと。
※JavaScriptで全画面に戻るようなタイプであれば、消えてしまう事もあるかも

入力する側も、入力には気を付けていると思いますので、商用での利用でなければそれほど気にする事でもないかもしれません。

では。。。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
(お礼が遅くなり失礼いたしました。)

>簡単な掲示板やメールフォームで言えば、入力して投稿ボタン
>(中略)
>入力した内容が消えてしまうと言う事は少ないと思います。

これが仕組みがわかっていないといともあり、
意外と見つけられず苦労しておりまして、(T-T)
具体的なスクリプト名をご紹介いただけるとすごく助かります。

ちなみに現在私がお借りしているのはKent WebさんのWeb Forumです。
私の使っているバージョンもそうですが、現在の公開されているサンプルを見る限り、
残念ながら戻るボタンには、JavaScriptのhistory.back()が使われているようです。

仕方がないので、今はJavaScriptを使って、送信ボタンが押された時に、
記入された内容をユーザーPCのクリップボードにコピーし、
万が一、戻って記入内容が消えてしまっていた場合は
それをテキストフィールドに書き出す「復旧作業」ボタンを自分で組みこんでいます。
が、いかんせん、禁止設定がされていないIE+Win PCユーザーにのみ対応ですし、
作業の途中でクリップボードが上書きされてしまうと全てが水の泡になるので、
あくまで暫定的な処理でしかなく・・・。
(そもそもMozillaユーザーにはそもそもあまり起こらない現象のようなので、
心配は無用かもしれませんが。(^^;)

ご回答ありがとうございました。

引き続き、何か良いシンプルなCGIスクリプトがありましたら、
ぜひご紹介をお願いいたします。m(_ _)m

お礼日時:2007/11/03 11:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q戻ると、記入フォームの内容が消えるのはなぜ?

よくあるWEB上のアンケートフォームなどで、
記入したあとOKボタンを押し、「記入漏れがあります」と指摘されて、ブラウザのバックキーで戻ると(あるいは指定のボタンで戻ると)、記入した内容がすべて消えていて、またイチから入力し直し…ということがたまにあります。
これは一般的には、ユーザー側の問題なのでしょうか? サイト側の問題なのでしょうか?
詳しい方がいましたらどうぞ教えてください。m(_ _)m

Aベストアンサー

基本的にはユーザー側の問題だと思いますが、サイト側でキャッシュさせないようにすることは可能だと思います。
そもそも記入した内容が消えているというのは、記入した状態のページがキャッシュされておらず、再度ページが新規に読み込まれるという症状です。ということは、例えばユーザー側がキャッシュをオフにしたりしておくと、通常は消えてしまうということになります。
ただ、キャッシュが設定してあっても、何かのはずみに消えてしまうことは実際にあって、そのあたりは良く分かりません。100%消えないで戻れるように作ることは、サイト側ではできないと思います。
したがって、そういう必要があるサイトでは、Backボタンではなく「再編集」とか「前に戻る」とかいう機能を、ちゃんとボタンで設定してあるはずです。ここOKWebもそうですね。

Q入力フォームの値が消える

フォーム送信後、入力値を間違えたので戻ろうとすると、入力フォームの値が消えてしまっています。

入力値が保持されているサイトと消えてしまうサイトとあるようなのですが、

これはどこで制御されているのでしょうか?コード?サーバ設定?よろしければ教えてください。

よろしくお願い致します。

Aベストアンサー

>サーバにポストされたデータを再びCGIに
>埋め込み直すというような感じでしょうか。
そうですね。そんな感じです。

>するとフォーム画面は.htmlファイルでなく
>.cgiファイルでしょうか?
これは、ちょっと違います。
サーバー上では、プログラムが動きます。
拡張子はそれぞれだいたい決っていて、
.php .asp .jsp などもあります。
.cgiは、perlのプログラムであったり、
シェルプログラムであったり、または
c言語で作成されたものであったりと、
いろいろです。

「戻る」を押したときは、サーバー上のプロフラムが、
(1)戻るを想定して表示している
(2)たまたま、表示されている
のどちらかです。

よって、うまくいったり行かなかったりします。

まずは、ブラウザーとサーバーの関係を
勉強してみると良いと思います。

Qページ移動した場合の、フォームデータの保持

PHP初心者です。

私が作っているPHPのシステムで、ユーザーがフォームデータ入力途中に、他のページに移動すると、「戻る」ボタンなどですぐに戻ってきても、入力したフォームデータが消えてしまいます。

例えば、この「教えてgoo」の「新しい質問をする」のフォームはPHPで生成されていますが、

http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256

途中でちょっと他のページに行っても、(すぐ戻れば?)入力したデータは保持されますよね。

こんなふうにしたいのですが、どうすればよいでしょうか?
「戻る」ボタンで戻ったときに、サーバーから毎回新しいXHTMLをロードしてくるので、入力データがクリアされてしまうのでしょうか?

フォーム入力⇒確認画面⇒「戻る」ボタンで戻るとフォームデータが保持されないということではなく、あくまでフォーム入力中に、ちょっと他のページに行って戻ってくるという設定です。

よろしくお願いします。

Aベストアンサー

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどちらもキャッシュを保持しますが、
privateだとクライアントマシンのみキャッシュを保持します。
どちらが良いのかは使い方によると思いますし、
nocacheでないと困る時もありますから。

session_startを削除してしまって良いかどうかは、
他の部分の処理との関連が分からないので何とも言えないです。

一度試してみて下さい。

参考URL:http://jp.php.net/session_cache_limiter

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどち...続きを読む

Q入力フォームで戻るボタンで戻ると入力情報が消えている

ネットショップとかなにかのアンケートとかモニターとかで広く使用されている入力フォームがありますが、入力しているとき、誤って必須入力項目を未入力にして送信ボタンをおしてしまうことがあります。
その時、画面の案内で「未入力部分があるので戻って再度入力してください」というコメントが出ますが、それに従って特設されている戻るボタンか、ブラウザの戻るボタンで入力フォームページへ戻ったとき、今まで入力していたものが全て消えてしまいました。

これを消えないようにすることはできないのでしょうか?
サイト側の制作の不備である場合は仕方ないですが、サイト側はしっかり制作していても消えてしまう場合、自分のPCの方の、例えばブラウザの設定だったり、ウィルスソフトの問題であったりがあると聞いていますが、どうすれば自分のPCの設定をバッチリにできますでしょうか?
環境はWindows2000です。
宜しくお願い致します。

Aベストアンサー

コーディングの仕方や、PCのセキュリティ設定によるのですが、そういった場合の対処として、ブラウザバック(戻る)の時にPOSTで値をSubmitします。

したがって、サイト側の作り方が親切ではないということです。

Qブラウザの戻るボタンを押したときのデータの保持の仕方

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらいました。
その時はselectタグにidを仕込んでおき、「window.onload」でgetElementByIdを使用するやり方を
教わったのですが、今回はそれでうまくいきません。

ネットで検索していてcookieを使用してデータを保持しておくというやり方も見かけたのですが、
一番効率のよいやり方はどのようなものになるのでしょうか。

どうかよろしくお願いします。


以下ソースとなります。



<html>
<head>
<title>テストテスト</title>
<script language="JavaScript"><!--
menuItem = [ [ ],
["あああ","あああ2","あああ3","あああ4","あああ5"],
["いいい","いいい2"],
["ううう","ううう2","ううう3"],
["えええ","えええ2","えええ3","えええ4"] ];
function clearOption(len){
var i;
for (i=0; i<len; i++){
document.aaa.bbb.options[i] = null;
}
}

function setMenuItem(n){
optlen = document.aaa.bbb.options.length;
while(optlen > 0){
clearOption(optlen);
optlen = document.aaa.bbb.options.length;
}

if (menuItem[n].length > 0){
for (i=0; i<menuItem[n].length; i++){
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]);
for( j=1; j<=4; j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
}
}
window.onload = function(){
setMenuItem(document.getElementById('q1').value);
//alert(document.getElementById('q2').value);
}
// --></script>
</head>
<body>
<form name="aaa" action="./next.html" method="POST">
<select name="Maker" id="q1" onChange="setMenuItem(this.selectedIndex)">
<option value="" selected>--- 選択してください ---</option>
<option value="1">ひとつ</option>
<option value="2">ふたつ</option>
<option value="3">みっつ</option>
<option value="4">よっつ</option>
</select>
<select name="bbb" id="q2">
<option value="" selected>--- 選択してください ---</option>
</select>
<input type="submit" name="ok" vakue="ok">
</form>
</body>
</html>

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらい...続きを読む

Aベストアンサー

ブラウザによって動作が変わってしまいそうな気がしますね。
検証はしてないですが。

どなたかが仰るように、クッキーで値を変えてあげると良いかも知れませんね。

cookieなんですが、この情報はjavascriptの方で取得してあげる必要があります。
javascriptでは、document.cookieでドメイン上のcookieが取得できると思うので、取得した後parserなどの関数を用意して必要な値を得る必要があると思います。

cookieの発行はsubmit後のページで、サーバーサイドから出してあげた方が良いと思います。

ただ、戻るの動作によってはページの表示自体がおかしくなりそうな気もしますね。

上手く動いたら教えてください!

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

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

こんにちわ。よくある、アンケートフォームのcookieの処理だと思うんですけど、名前とか住所とかを入力したあと次ページで確認画面がでてきて、修正したい場合は戻って修正するってやつありますよね。

そのときに「戻る」を押すと、テキストフィールドに入力した値が全部クリアされてしまうのですが、全部クリアされないように処理するにはどうしたらいいのでしょうか?javascriptのhistryback()を使えばできるんですけど、携帯なんでjavascriptは使えないんで、cookieでやると思うんですけど、どうやったらいいのかよくわかりません。。。

簡単でいいので処理のしかたをご存知のかたがいらしたらぜひともご教授ください。よろしくお願いします。

Aベストアンサー

> それは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'}のデータはエスケープ処理などのチェックが別途必要です。

> それはHTMLベースでできるのですか?

そのアンケートフォームのCGIスクリプトで対応します。

> なにかjavascriptのhistryback()みたいですね。

ブラウザにとっては「戻る」のではなく「進む」です。その進んだ先に、「入力済みデータが入ったフォーム」をサーバー側で用意しておく、という方法です。

> アンケートや、ショッピングの確認画面のソースはわたしも見ましたが、
> ほとんどが、histryback()かhostrygo(-1)でした。

そのようなフォームが、戻ったときにクリアされてしまうフォームで...続きを読む

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

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

Aベストアンサー

> 戻るボタンには、前と同じくhistory.back()を設定しています。
> この状態で試しているのですがやはり値が消えてしまっています。

history.back() では、hiddenの値が入力画面に渡されません。
戻るボタンのonClickで、formのaction属性を入力画面のURLに書き換えた上で、そのformをsubmit() するような処理が必要です(JavaScriptで記述します)。

また、上記とは別の方法もあります。history.back() で戻れないのは、入力画面がクライアントにキャッシュされていないためです。キャッシュされていないのは、セッションを使用しているためです。

PHP の session_cache_limiter() 関数を使う(入力画面を表示するプログラム内で、privateに設定する)ことで、history.back() が効くようになると思います。

ただ、一般的にはhistory.backを使わない方法を取ることが多いと思います。

QフォームPOST後「戻る」時のチェック値の取得

フォームでPOSTをしたあと、history.backや戻るボタンで戻ったときに、POST時に選択したラジオボタンのcheckedもfalseになってしまうのですが、チェックされているものを取得することはできるのでしょうか。

■form部分
<form name="form1" method="post" action="...">
<input type="radio" name="radio1" value="1">1<br />
<input type="radio" name="radio1" value="2">2<br />
<input type="radio" name="radio1" value="3">3<br />
</form>

■JavaScript部分
var radio1 = document.form1.radio;
for(var i=0;i<radio1.length;i++) {
if (radio1[i].checked) {
alert(i);
}
}

このようなコードで、選択してPOST後、「戻る」で入力ページ表示時にJavaScriptを実行しても、
radio1[i].checkedは全てfalseになってしまいます。

また選択→POST→戻る→そのままPOSTとすると、選択したvalue値は正しくサーバーに送られます。

「戻る」でのページ表示時に選択したものを取得する方法があれば教示いただけますか。

フォームでPOSTをしたあと、history.backや戻るボタンで戻ったときに、POST時に選択したラジオボタンのcheckedもfalseになってしまうのですが、チェックされているものを取得することはできるのでしょうか。

■form部分
<form name="form1" method="post" action="...">
<input type="radio" name="radio1" value="1">1<br />
<input type="radio" name="radio1" value="2">2<br />
<input type="radio" name="radio1" value="3">3<br />
</form>

■JavaScript部分
var radio1 = document.form1.radio;
for(var i=...続きを読む

Aベストアンサー

どのブラウザのどのバージョンで確認されているのでしょうか。
記憶では、質問の挙動は、ブラウザによって異なると思いますよ。
仮に、質問の挙動に限定するならば、初回の送信時に、cookieやLocal Storageに保存すれば参照できます。
また、複数回の送信をされたくない場合は、明示的にJSで値をリセットするか、あるいは、ajaxで通信すれば、そもそも履歴に残らないので、「戻る」では送信前のページには戻りません。

QIEでフォームに入力して戻ると消える

例えば、何かに登録しようと住所など全て入力して、その中に未入力項目などがあった場合、『ブラウザの戻る』で戻れというので戻ると先ほど入力したものが全て消えてしまっており、また一から入力しなおしです。
一つのサイトではなく、どのサイトでもそうなります。
おそらく自分の設定が悪いのだと思うのですが。。。

Aベストアンサー

インターネット一時ファイルがこわれちゃったかも

おまじないとして、
IEのツール→インターネットオプションから
1.「全般」タブの「ファイルの削除」をクリック
 「すべてのオフラインコンテンツも削除する」
 にチェックを入れて「OK」をクリック
2.「全般」タブの「履歴のクリア」をクリック
ですね。お試しください。
((((*・o・*)†~~~アーメン


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング