• 締切済み

ボタン押したときだけカウント

http://www.sic.shibaura-it.ac.jp/~p00050/ でホームページを作っています。 左下のほうにあるリンクをクリックしたときだけ、カウントが上がるようにしたいんです。 でも表示更新したときにもカウントが上がってしまいます。 左下の部分のフレームはcount.cgiで、ソースは次のとおり。 #!/usr/local/bin/perl $data = 'data.dat'; open(F, "$data"); $count = <F>; close(F); $count++; open(F, ">$data"); print F "$count"; close(F); print "content-type:text/html\n\n"; print "<body bgcolor=black topmargin=0 leftmargin=0 bottommargin=0 rightmargin=0>\n"; print "<font color=lightgrey size=2><p align=center>ポイント <b>$count</b><br>\n"; print "このページに共感した人は、<br>好きなだけ<a href=count.cgi target=count>ここ</a>を押してください。"; print "</p></font></body>\n";

みんなの回答

  • Sephy
  • ベストアンサー率35% (7/20)
回答No.6

まず print << 'END'; Cache-Control: no-cache\n Pragma: no-cache\n Location: count.html\n\n END の部分ですが、改行は \n を使わないでそのまま改行してください。 例 print << 'END'; Cache-Control: no-cache Pragma: no-cache Location: count.html END それと日本語の扱いには注意が必要です。 2バイト文字の場合、どちらかのバイトが " 等の文字と同じだったりすると、Perlはそれを " と解釈してしまいます。 文字の前後に\を置いたりすると解消されます。 解消法の例 ×print"表示"; ↓ ○print"表\示"; 補足 #!/usr/local/bin/perl -w とすると文法エラーなんかに警告を出してくれるようになります。 蛇足 <meta charset=shift-jis> が不明です。 meta要素の属性に charset ってありましたっけ?・・・ 例 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

haporun
質問者

補足

eucで書いているので、2倍と文字が"になることはないのでは。 とりあえずエラーはなくなりましたが、やはり効果はないようで。 しかし、"ここ"をクリックして表示更新すると、このフレームが表示されなくなって、再度このページを表示した後、1度表示更新したら現れる、というこの症状は何でしょう。 とりあえず、count.txt更新しておきました。

  • Sephy
  • ベストアンサー率35% (7/20)
回答No.5

×nocache ↓ ○no-cache らしいです。 HTTPについてはあまり詳しくないので わかりませんが・・・ RFCには no-cache と書いてありました。

haporun
質問者

補足

エラーが解消できません。 http://www.sic.shibaura-it.ac.jp/~p00050/count.txt にソースを置いときます。 あと、表示更新をしたり、ページを初めて開いたばかりのときにカウント部分が表示できなくなってしまうのはなぜでしょう。

  • Sephy
  • ベストアンサー率35% (7/20)
回答No.4

キャッシュを読ませないようにするために Cache-Control: nocache とか Pragma: nocache とかを Location: ~ の前に書いてください。 例 print << 'END'; Cache-Control: nocache Pragma: nocache Location: ~ END

noname#9414
noname#9414
回答No.3

補足読みました。 「http://...」の部分には、 「http://www.sic.shibaura-it.ac.jp/~p00050/list.html」 と書けばいいでしょう。 しかし、なにやら無駄なループが入っているよう なのですが、可能ならばソースを補足してください。 ではでは☆

  • Sephy
  • ベストアンサー率35% (7/20)
回答No.2

Kanataさんのやり方で構わないと思います。 とりあえず「回答しろ」と命令されてしまったので別解。(笑) CGIへアクセスがかかったらカウントアップし、 print"Location:count.html\n\n"; のようにしてあらかじめ作っておいたページへ飛ばす。 表示するページにカウント数を表示させたい場合は・・・ 1.HTMLファイルを書き換えてから飛ばす。 2.表示用CGIを別に作ってそのCGIへ飛ばす。 3.HTMLに引数を渡し、JSを使ってそれを表示させる。 ・・・等の方法があります。 3 については私のサイトの「JavaScriptの部屋」を参照していただければと思います。

参考URL:
http://w3.to/sephy
haporun
質問者

補足

1の方法を試してみました。 HTMLは書き換わっているのですが、その書き変わったHTMLを表示してくれません。 キャッシュでも読みに行っているのでしょうか。 そのあと表示側が自発的に表示更新すると、カウントが上がったHTMLが表示されます。

noname#9414
noname#9414
回答No.1

なるほど、TOPページを表示したときには、 カウントしないで、リンクをクリックしたときに カウントアップするようにしたいのですね? ということは、HTTP_REFERERを使っては どうでしょう。こんな感じです。 if($ENV{'HTTP_REFERER'} eq 'http://...') {  カウントアップ } 確かこんな感じでできるはず。 ではでは☆

haporun
質問者

補足

http://... の ... の部分には、ソースファイルのURLを書けばいいのでしょうか。 かなり初心者なので、その辺もお願いします。

関連するQ&A