• 締切済み

アフィリエイトのようなカウントシステム

アフィリエイトのように自分で配布したURLごとにカウントするというものを作りたいと思っています。 リンクを <a href="jump.php?no=1">マイHP</a> <a href="jump.php?no=2">マイHP</a> <a href="jump.php?no=3">マイHP</a> として、$_GET['no'] の値を見てカウント集計するという感じで考えてはいるのですが、どうすれば「no」ごとにカウントを取れるのかがわかりません。 単にカウントを取るプログラムは組めるんですが・・・ --------------------------------------------- <? header("Location: http://www.○○○.php"); ?> <?php $filename = "count.dat"; $file = fopen($filename, "r"); $count = fread($file, filesize($filename)); fclose($file); $count = $count + 1; print "$count"; $file = fopen($filename, "w"); fwrite($file, $count); fclose($file); ?> --------------------------------------------- このプログラムを応用して「no」ごとのカウントは出来るでしょうか?それとも、他のやり方の方がいいのでしょうか? どうかお教え願います。

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

//update count set count=count + 1 where no = $no if (!mysql_affected_rows()) {  //insert into count (no, count) VALUES($no, 1) } > 766でいいのでしょうか? たぶん大丈夫かと。

fight-nao
質問者

お礼

お返事ありがとうございます。 おかげさまで思ったとおりのことが(データベースでのカウント管理)出来るようになりました。ほんと感謝です。 >たぶん大丈夫かと。 やはりファイルが自動で作成されませんでした。 なんでだろう? いろいろと四苦八苦やってみたいと思います。 でも、データベースでの管理が出来るようになったので、こっちの方でいきたいと思います。 ほんとにありがとうございました。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

ディレクトリに書き込み権限があれば fopen($file, 'w') でファイルが無くても作成されます。 新規登録なら $sql = "insert into count_table values ({$id}, 1)"; count++は $sql = "update count_table set count = count + 1 where id = {$id}"; みたいなSQLを実行すればいいかと。

fight-nao
質問者

お礼

ご返信ありがとうございます。 おかげさまで、データベースでの管理に成功しました。ありがとうございます。 ただ、 count++の方はできたのですが 新規登録ができません。 よろしければ見ていただけないでしょうか? ----------------------------------------- if (strlen($no)>0) { $con=mysql_connect("○○○○","*****","×××"); $selectdb=mysql_select_db("*****",$con); $sql = "update count set count=count + 1 where no='$no'"; $result=mysql_query($sql,$con); } else { $sql = "insert into count (no, count) VALUES('$no','1');"; $result=mysql_query($sql,$con); } ----------------------------------------- なのですが、 「$noがデータベース内に登録されていない時に新規登録をする」 という風に考えたのですが、条件文がうまく書けていないためか書き込みをしてくれません。 また、 >ディレクトリに書き込み権限があれば これはフォルダの属性を変更すればいいのでしょうか?もしそうだとしたら、766でいいのでしょうか? どうかよろしくお願いします。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

自動作成にすれば作成しなくてもいいです。 膨大な数になるなら1ファイルにしない方がいいかと思います。 データベースを利用できれば1番よいですが。

fight-nao
質問者

お礼

お返事ありがとうございます。 自動作成ですか・・・すいません。知識が乏しく自動作成のプログラムの作り方がわからないです。 よろしければ、お教えください。 >データベースを利用できれば1番よいですが。 確かにデータベースはいいですね。思いつきませんでした・・・うまくいくイメージができました。 おそらく初歩的な質問ですが、いいでしょうか? データベースにcountというテーブルを作り +----------+------------+ lField lType +----------+------------+ lno lint lcount lint +----------+------------+ としたとして、 「no」ごとにカウントした数字を、このデータベース内にそれぞれ挿入していくプログラムとは、どんな感じなんでしょうか? どうか、お教えください。 質問が多くて申し訳ないです。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

<?php $no = isset($_GET['no']) ? $_GET['no'] : null; $filename = "count_{$no}.dat"; if (!file_exists($filename)) { die(); } $file = fopen($filename, "r"); $count = fread($file, filesize($filename)); fclose($file); $count = $count + 1; print "$count"; $file = fopen($filename, "w"); fwrite($file, $count); fclose($file); ?>

fight-nao
質問者

お礼

>tany180sxさん 書き込みありがとうございます。お返事遅くなってしまいすいません。 tany180sxさんのおかげで、だんだんとイメージが出来てきました。ありがとうございます。 質問なのですが、 $filename = "count_{$no}.dat"; というのはdatファイルを$noの数、作成しなければならないのでしょうか? $noの数が膨大に増えた時のことも想定し、1ファイルで管理できたらと考えています。 複数の$noを1ページ内にまとめてカウント数を表示することは可能でしょうか? どうか、よろしくお願いします。

関連するQ&A

専門家に質問してみよう