- ベストアンサー
リロードすると、何度も書き込まれる
htmlのフォームに書き込まれた内容をログファイルに保存してCGIで表示する(しょぼしょぼな掲示板or日記みたいなやつ) というのを勉強しています。 上記の事はうまくいきました。 でもCGIへ表示したあと、リロードボタンを押すと、最後(最新)に書き込んだ内容が追加書き込みされてしまいます。 うまく説明できないのですが、掲示板で言うなら「お前何回も同じ事書き込むなよー」っていう感じになります。 これを回避するプログラムを追加するために、私が次に勉強するべき事は何でしょうか? 自分でも、何をどう質問していいのかわからなかったのですが、にっちもさっちもいかないのできてみました。 Cookieについて勉強するがよい とかでいいので、何か教えて下さい(^^; もう少し情報が必要でしたら、補足要請下さい。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
リロードすると同じ内容が書き込まれるということは、書き込みが終了した時点でブラウザに表示されているURLが書き込みに使われているURLになっているということです。例えばプログラムがbbs_write.cgiだとすると、それがそのまま再度呼ばれるために、同じ内容が書き込まれてしまうのです。 これを回避するには、 1)書き込み完了後にURLを変える 2)同じ書き込みが連続した場合はエラーにする のどちらかが基本でしょうか。 #2の回答の方が書かれているのは、書き込み後に他のURLへ飛ばすスクリプトです(上で言うと1のほうの処理ですね)。「書き込み完了しました」という文字列と元のページへのリンクだけのHTMLを作り、書き込み完了したらそのページを表示するようにするわけです。 2の方法はいろんなテクニックがあると思うので、研究してみてください。Cookieを使ってチェックするのも一つの方法ですかね。
その他の回答 (2)
- the845t
- ベストアンサー率33% (246/743)
私は、 print "Location:$file\n\n"; exit; を使っています。
お礼
アドバイスありがとうございます。 Locationというものも使えるのですね。 手元にある本で調べてみました。なるほど。 本はあってもどういう時に使うのか、などまだ私には難しい部分も多く、こうやってアドバイスしていただけると、ひとつづつステップアップできてうれしい限りです。 ありがとうございました。
- shevy
- ベストアンサー率44% (69/156)
こんばんは。 もしよろしければ、その組まれたperlプログラムを見せていただけないでしょうか。 一部でもいいのでスクリプトを見せてくだされば、的確なアドバイスも期待できるかと思います。
お礼
こんばんは。 書き込みありがとうございます。 最初、組んだプログラムを掲載しようかとも思ったんですが、質問時で組んであったものは、本当にただ「フォーム内容をログに保存してCGIで表示する」という単純なものでしたので、回答をいただくのには不必要かと思い掲載しませんでした。 でもshevyさんに言われてやっぱりプログラムは一部でも掲載した方がよかったかと反省してみたり‥‥(^^; 今回は掲載なくアドバイスをもらえる事ができてラッキーでした。 わざわざ書き込んでいただき、本当にありがとうございました。
お礼
アドバイスありがとうございます。 あのようなわかりにくい質問に、このようなわかりやすいアドバイスをいただけて驚きです。 原因まで解説して下さったので、私のたりない頭脳でも理解できました(と思う)。 今回は#2の方のアドバイスもあったので、1の方法を試してみました。途中経過がおかしい(用意したhtmlに飛ばない)けど、結果的には問題解決しました。 これからまたじっくり時間をかけて、途中経過もちゃんとできるようになったら、2の方法にチャレンジしたいと思います。 頑張ってレベルアップします。 どうもありがとうございました。
補足
補足の場をかりて アドバイス下さった皆様、ありがとうございました。 これからも頑張ってレベルアップしたいと思います。 また何かありましたらよろしくお願いいたします。