- ベストアンサー
perl CGIが開くと勝手に処理してしまうのを防ぎたい
BBSを作成中で、そのBBSに記事ナンバーをつけようと奮闘中です。そこで質問があります。Flashを使って作製していますが、CGIの質問は非常に稚拙だと思いますので、お助けください。 記事のナンバーカウントの値がアップする仕組みをCGIファイルに 組み込んだのですが、書き込みボタンが押されていないのに、 最初にページを開いた瞬間に、カウントがアップしてしまう状態になってしまっています。それ以後は、ページを閉じない限りは、書き込みボタンが押されるたびにカウントの値は1ずつきちんと増えていきます。 要するに、ページを開いたときにカウントが1増えるのを防ぎたいのです。 ちょっとうまく伝えにくいのですが、 以下のような仕組みになります。 count.datファイルの中の数値が一つずつあがっていくようになっています。 #----- ファイルを読み込む $countfile = "./count.dat"; #-----カウントの値の読み込み open(COM,"$countfile"); $cnt=<COM>; close(COM); #-----カウントの値に1プラスする $cnt++; open(COM,">$countfile"); print COM $cnt; close(COM); と、以上のような単純な仕組みなのですが、 最後の「カウントの値に1プラスする」という処理が勝手に実行されてしまいます。 CGIファイルの一番下にカウントの値を1プラスする処理を実行するスクリプトを置いたのですが、 最初に実行されてしまうようです。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
初めにFLASH側でCGIに記事の取得をしているんですねぇ~ その際にカウントアップされるってことですね。 う~っと 簡単な方法としては2つのCGIを用意する方法です。 1つ目は記事取得のCGI専用 2つ目は記事書き込み専用 どうでしょうか? ※別に2つにしなくても隠しフィールドを利用したり、変数によってCGI側でIF文などで判別する方法もあります。 あんまし参考にならなかったかなぁ?すまそん >これは、かなり非効率なことをしています・・? いや いいと思いますよ。結果オーライですもんねぇ♪
その他の回答 (2)
- karogon
- ベストアンサー率75% (6/8)
CGIが記事を表示する(FLASHに渡す)処理、書き込み処理を 行っているのであれば、これらをサブルーチンにて分けるなどをしていると思います。 で、あれば書き込み処理を行うサブルーチン内で カウント処理をすればいいのではないでしょうか?
お礼
ありがとうございます。 サブルーチンに分けるという処理も、 使えますね。 色々試して行きたいと思います。 ありがとうございました。
- kosa
- ベストアンサー率25% (379/1464)
えっとFlash掲示板ってことですよね? >初にページを開いた瞬間に、カウントがアップしてしまう FLASH側で書き込みを押した時にのみCGIを呼び出すようにしていますか? 余計なところでCGIを呼び出しているとか・・・ このCGIではカウントするファイルを掲示板ログとが別々のようですが一緒にした方がのちのち便利ではないでしょうか?(削除記事指定とか)
お礼
ありがとうございます。 そうなんです。Flash掲示板です。 Flash側では、まず、LoadAndVarsによって、掲示板の記事を取得するために、CGIにアクセスして、 そこから記事を表示されるという方法をとっておりますので、 どうしても最初はCGIを呼び出さないと駄目な仕組みになっています。 カウントするファイルを別々にしていますが、 書き込み時に、カウントした番号を掲示板ログの先頭に書き込むようにしています。 って、これは、かなり非効率なことをしています・・? 通常、カウントはどのようにして実行していくものなのでしょう。 最初にCGIが実行される仕組みになっていると、 通し番号を実現するのは難しいのでしょうか。 お助けください。
お礼
ありがとうございます。 なるほどぉ・・・。。。 二つCGIがあれば、問題は解決しちゃいますよね。 要するに書き込み専用のほうに、 例のカウント値を増加させるコードを書いておけばいいんですね。 早速作ってみようと思います。 ですが、一番気になるのは、 kosaさんがほのめかした隠しフィールドと、 IF文です。IF文は私も考えてみたのですが、 どのように条件分岐させればいいのか、今回のケースでは思いつきませんでした。 ちょろっと教えていただけないでしょうか。 隠しフィールドについては全くわからないので、 そちらもちょろっとお願い致します。
補足
kosaさん、ありがとうございます。 2つのcgiでうまく実現できました。 やはりこれが一番簡単なようでした。 ありがとうございました。