WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ボタンを押した回数を集計する方法

前園[MAIL][URL][WriteDate : Sat Jul 8 04:31:18 2000]

はじめまして!質問させてください。
例えば、小話をいくつか書いて小話ごとに最後にボタンを
設置する。それでその小話が面白かったらボタンを押してもらう。
その回数をひそかに集計してHPで公開したい。
どの小話が人気があるか調べることができる。

ボタンの作り方は参考資料を見つけたのですが、回数をカウントする
Java scriptなどがわかりません。できましたら教えてください。

ちゃいちゃんパパ[MAIL][URL][WriteDate :Sat Jul 8 08:44:22 2000]

はじめまして。

このカウント数は、当然、前園さんも見たいわけですよね。
でしたら、CGIを利用しないといけません。
しかし、JavaScriptも併用する場合があるかも...。

とにかく、JavaScriptだけでは、アクセスした人だけで、前園さんはそのカウント数を見る事はできません。

ということで、一回目の回答とさせてもらいます。


前園[MAIL][URL][WriteDate :Sat Jul 8 10:06:42 2000]

解答ありがとうございます。
CGIですか。なるほど。
カウント数は管理人である私だけが見れればいいです。
むしろお客さんには見て欲しくない。
以前そういうボタンのあるHPがあったのですが、今はなくなってしまいました。具体例を示すことが出来ないのですが、わかりますか?

ちゃいパパ[MAIL][URL][WriteDate :Sat Jul 8 17:16:46 2000]

CGI起動時は必ず画面更新が必要ですので、今回の場合、小話を読む毎に更新してしまうので、まずいですよね。
そこで、フレームのページにして、隠れフレームを用意し、CGI起動時、カウント処理後、これを更新します。

具体的には、AフレームとBフレームのページをまず作ります。
Aフレームでカウント処理(回数集計)のCGIを仕掛け、ターゲットをBフレームします。

カウント処理CGIは、私のtcnt.cgiが参考になるかも。
http://www.parkcity.ne.jp/~chaichan/src/cgi_tcnt.htm

ちゃいパパ[MAIL][URL][WriteDate :Sat Jul 8 20:17:33 2000]

間違えました!

カウントのみで、それを表示しないので、フレームにする必要はないです。
CGIで、カウント処理後、exit;すれば...。

CGIのロジックは、以下の感じ。

#!/usr/local/bin/perl
require '../bin/cgi-lib.pl';
$htmdir = "../src/";

      &ReadParse(*in);
      $htm_name = $in{'name'};
      $htm_count = $htmdir . $htm_name;
      if((-e $htm_count) == 0){
         open COUNTERX, ">$htm_count" or die "Failed open :$!"; 
         print COUNTERX "0", "\n";
         close COUNTERX;
      }
      open COUNTERX, "+<$htm_count" or die "Failed open :$!"; 
      flock COUNTERX, 2 or die "Failed file lock :$!\n";
      $count = <COUNTERX>;
      truncate(COUNTERX, 0);
      seek(COUNTERX, 0, 0);
      ++$count;
      print COUNTERX $count;
      close COUNTERX;
      exit;

でも、このロジックはデバックしていません!
あくまでも、感じのサンプルです。



前園[MAIL][URL][WriteDate :Sun Jul 9 02:33:44 2000]

解答ありがとうございます。
うまくいきそうな気がするのですが、なにせ僕はド素人なんです・・・・。CGIのことはさっぱりわからなくて、配布してあるのを拾ってきてなんとか設置しているレベルなんです。

コピーして送ってみようかとも思いましたがちょっと怖いので止めておきました。どうしよー(泣)

ちゃいちゃんパパ[MAIL][URL][WriteDate :Sun Jul 9 08:09:10 2000]

HTMLはこんな感じ。
<FORM METHOD=POST ACTION="xxx.cgi?name=kobanashi1.cnt">
<INPUT TYPE=submit VALUE="面白い">
</FORM>

kobanashi1.cntが小話のカウント数が格納されたファイルになります。

xxx.cgi関しては、来週中にデバックして、もう一度、ここに書き込みます。
では〜

ちゃいパパ[MAIL][URL][WriteDate :Tue Jul 11 10:30:22 2000]

デバックしました。
やはり、フレーム使用しないと無理でした。
(CGIは必ず、標準出力しないといけないため)

[フレームの親HTML]
<HTML>
<HEAD>
<TITLE>TEST</TITLE>
</HEAD>
<FRAMESET ROWS="100%,*">
<FRAME NAME="chaichan1" SRC="kobana.htm">
<FRAME NAME="chaichan2" SRC="dummy.htm">
</FRAMESET>
</HTML>

[kobana.htm]
<HTML>
<BODY>
<FORM METHOD=POST ACTION="./bin/xxx.cgi" target="chaichan2"> 
<INPUT TYPE="hidden" NAME="name"  VALUE="kobanashi1.cnt">
<INPUT TYPE=submit VALUE="面白い"> 
</FORM>
</BODY>
</HTML> 

[dummy]
<HTML>
</HTML>

[xxx.cgi]
#!/usr/local/bin/perl 
require './cgi-lib.pl'; 
$htmdir = "./"; 
#
           &ReadParse(*in); 
           $htm_name = $in{'name'}; 
           $htm_count = $htmdir . $htm_name; 
           if((-e $htm_count) == 0){ 
              open COUNTERX, ">$htm_count" or die "Failed open :$!";  
              print COUNTERX "0", "\n"; 
              close COUNTERX; 
           } 
           open COUNTERX, "+<$htm_count" or die "Failed open :$!";  
           flock COUNTERX, 2 or die "Failed file lock :$!\n"; 
           $count = <COUNTERX>; 
           truncate(COUNTERX, 0); 
           seek(COUNTERX, 0, 0); 
           ++$count; 
           print COUNTERX $count; 
           close COUNTERX; 

print <<"HERE";
Content-type: text/html

<HTML>
<BODY>
Dummy
</BODY>
</HTML>

HERE
exit; 

これで、kobanashi1.cntファイルにカウントされます。
また、別の小話は
<INPUT TYPE="hidden" NAME="name"  VALUE="kobanashi1.cnt">
のkobanashi1.cntをkobanashi2.cnt様にすれば対応できます。
カウント数を見る時は、
http://〜〜〜/kobanashi1.cnt
で見れます。

では、返事お待ちしています。
回答(必須): 状態:

お名前(必須):

e-mail:

URL:




Back