• ベストアンサー

フォーム終了画面で更新すると・・・(T_T)

フォーム送信終了時に終了画面で更新すると (ブラウザの更新ボタンを押すと) 再送信してしまうようなのですが、これが普通なのでしょうか? これを簡単に防止する方法がありますか? また防止するにあたってユーザビリティが悪くなりますか?

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

  • ベストアンサー
  • VARIMASI
  • ベストアンサー率44% (162/366)
回答No.1

根本的に、いかなるフォームの送信でも、その後の更新は厳禁です。 それが暗黙のルールです。 何故なら、掲示板では二重投稿にもなりかねませんし、ネットショッピングならば1つでいいものを、2つ注文したりと二度送信されてしまう場合がある。 逆に、なぜ送信後に、更新しなければならないのか、疑問ですが。 それで、一応相手(サイト)側にも【1分以内の同一者のフォーム二重送信は無効】等の機能が付いているCGIもありますが、 こちら側では、どうにも出来ませんし、それがマナーですので送信後の更新はお止め下さい。

takumana20
質問者

お礼

試行錯誤で 今のところ Location: でやってみます。 とても勉強になり、ありがとうございました。

takumana20
質問者

補足

そのマナーは知りませんでした・・・ 今フォームを作っていて確認画面で微調整や変更を確認するのに 更新して確認するのですが、その度に再送信になっていたので 不具合なのか心配だったところです。安心しました。 って事は、単純に確認画面から別画面に飛ばせばいいのかしら? それも悪いような・・・

その他の回答 (2)

  • s1m00py
  • ベストアンサー率0% (0/4)
回答No.3

えっと、これは質問者さんはフォームデータ受け取りのCGIをいじれる環境なのでしょうか? HTML書き換えれるって話なら大丈夫なのかなぁ。。。 もしそれが可能であれば、5分以内(変更可)に同一ホストから、同一の内容のポストを受け取ったときは、そのデータは破棄するってCGIに書けばいいのではないでしょうか。

takumana20
質問者

お礼

知識がないので (≧∇≦)キャハ 簡単なLocation: を使って回避しました。ありがとうございました。

takumana20
質問者

補足

perl CGI初心者です。すいません。 あ、それが希望なのですが フォーム一体型CGIは検索でたくさんあったのですが その部分だけのソースが見つかんないのです。教えてください。 open(DAT と open(MAIL が順にありますのでその前あたりで何か書くんですよね?

  • VARIMASI
  • ベストアンサー率44% (162/366)
回答No.2

それでしたら、通常フォーム送信後に出る「送信完了しました!」等の画面は、別画面が基本です。 そして、その別画面で開いた「送信完了しました!」の下に「このブラウザは閉じて下さい」等と一言入れたりします。

takumana20
質問者

お礼

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

takumana20
質問者

補足

えーとですね、submitで送信すると最終画面(完了)に移るんですが、 そこで更新(再読み込み)するって事なんです。 って事は、その画面はそのままにして、 その前画面のsubmit送信をjavascriptでopenにするって事ですね。 うーん。その連動が大規模と言うか私には難解そうな。。。 ちなみに送信後の完了画面をmetaで飛ばしてみたら FxではOK IEではCGI付属のエラー画面に飛びます(T_T)

関連するQ&A