• 締切済み

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

アフィリエイトのように自分で配布した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

  • PHP、外部ファイルにテキストを書きだす。

    こんにちは、皆様。 下記のソースを実行したいと思います。期待する結果としては、外部ファイルに行列に書き出すことです。 <?php $count_file="count.dat"; if(file_exists($count_file)){ $file = fopen("count.dat", "a") or die("file can not open"); $order_no = fgets($file) + time(); print $order_no; }else{ $file = fopen($count_file, "w") or die("file can not open"); $order_no = time(); } set_file_buffer($file,0); flock($file, LOCK_EX); fputs($file , $order_no); flock($file, LOCK_UN); fclose($file); ?> このソースの結果は配列として書き込まれてました。こんな感じです。 129835261512983526501298355377129835537912983566121298356635 このソースを実行する度にcount.datファイルに順次書き出したと思います。 1298352615 1298352650 1298355377 1298355379 1298356612 1298356635 まだまだPHP勉強中なのでわかる方教えてください。 (1)この行で$order_no = fgets($file) + time(); 改行記号をどう付ければ良いでしょうか? (2) C言語のようにポインターで指定しなければならないですか?書き方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • カウンターを一定数でリセットしたい

    はじめまして。 レッツPHPのカウンタを使っています。 <?php $fp = fopen("count.txt","r+") or die("Error!"); $count = fgets($fp, 64); $count++; rewind($fp); //set_file_buffer($fp, 0); flock($fp, LOCK_EX); fputs($fp, $count); fclose($fp); echo $count; ?> count_file.txt にはA00と記入しているのでA99になったら次はB00~Z99までカウントされるのを、F99まできたらリセットしA00から始めたいのですが式が分りません。$count++;を書き換えればいいのだとは思いますが・・・ よろしくお願いいたします。 PHP4.3.3

    • ベストアンサー
    • PHP
  • 何がおかしいのでしょうか?

    $filename1 = 'ymd.dat'; $fp1 = fopen($filename1, "r+"); $day2 = fgets($fp1,9); $day = date('Ymd'); //今日のアクセス数カウント。日付が変われば0になる。 $filename2 = 'ymd2.dat'; $fp2 = fopen($filename2, "r+"); $count2 = fgets($fp2,32); if($day==$day2){ $count2++; fseek($fp1, 0); fputs($fp1, $day); fclose($fp1); }else{ $count2 = 0; fseek($fp1, 0); fputs($fp1, $day); fclose($fp1); } fseek($fp2, 0); fputs($fp2, $count2); fclose($fp2);

    • 締切済み
    • PHP
  • サーバでの動作について

    私は現在サイトを開設しています。PHPについては初心者です。 最近無料でレンタルしていたサーバがサービス提供を止めてしまったので、サーバを移転しました。移転前のサーバでは普通に動いていましたが、移転先のサーバでは上手く表示されず行き詰ってます。 サイトの中でカウンター、アンケート、問い合わせ、掲示板にPHPを使用しています。 カウンターはTOPページの下部に挿入しているのですが、HTMLファイルにPHPを埋め込んでます。 拡張子はhtmlにして.htaccessファイルに下記1行を記述して使用しています。 AddType application/x-httpd-php html TOPページに記述してあるPHPのコードは、 <?php $filename = "./count.txt"; // カウントを記憶するファイル $keta = 5; //カウンタ表示桁数 $file = fopen($filename,"r+"); $buffer = fread($file,filesize ($filename)); list($count,$ip) = explode("<>",$buffer); $myip = getenv("REMOTE_ADDR"); if($myip != $ip){ $count++; } $count = sprintf("%0".$keta."d",$count); echo "Total: $count"; ftruncate($file,0); rewind($file); flock($file,LOCK_EX); fwrite($file, $count."<>".$myip); flock($file,LOCK_UN); fclose($file); ?> 現在はこのコードがそのままTOPページに表示されています。 カウントを記録するファイルのパーミッションは設定しました。 『ディレクトリの設定はいらない』と記述してあったのでPHPのパスの設定はしていません。 移転後のサーバはロリポップサーバです。 有料サーバでサポートもしているようですが、CGIはサポート対象外という事で困っています。 解決方法をご存知の方いらっしゃいましたらご教授ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPアクセスカウンター

    <?php $filename = 'count.dat'; $fp = fopen($filename, "r+"); $count = fgets($fp,32); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); echo ($count); ?> これを日付が変わったら0にリセットしてくれるシステムにしたいんですが、どうしたらいいですか??

    • ベストアンサー
    • PHP
  • ローカルでは動くのにサーバーにアップするとエラーがでる

    最近PHPを勉強を始めました。 とりあえず、参考書の通りに作っていくことから始めています。 アクセスカウンタを設置したく、参考書の通りに記述しました。 <?php $cnt_file = "count.dat"; $cnt_len = 10000; if (file_exists($cnt_file)) { $file = fopen($cnt_file, "r+"); $count = fgets($file, $cnt_len); $count = $count + 1; } else { $file = fopen($cnt_file, "w"); $count = 1; } rewind($file); flock($file, LOCK_EX); fputs($file, $count, $cnt_len); flock($file, LOCK_UN); fclose($file); echo $count; ?> という感じです。 ローカルでは動くのですが、サーバーにアップするとエラーがでて困っています。 ローカルではXAMPPをインストールしていてPHP5なようです。 サーバーはPHP4.4らしいですが、調べても対応している命令をだしているようなのですが、何故かエラーがでています。 問題を解決したいのですが、何分初心者で行き詰まっている状況です。 わかるかたよろしくお願いします。

    • ベストアンサー
    • PHP
  • fopenしてくれない。。。

    こんにちは。PHP初級者です。 postgresqlに入れたデータをCSVファイルに書き込んで、出力してみたいと思って以下のプログラムを作ってみました。 $file_name ="insatu.csv"; //データベースから呼び出し以下の$arrayへいれるデータは省略します。 //今回は1行のみのデータを入力プログラムになってますが、本当は何行もやるプログラムとなってます。 $array = compact("a","b","c","d","e","f","g","h","i","j","k","l"); $string = implode("," , $array); $file = fopen($file_name, "a") or die ("openエラー $file_name"); flock($file, LOCK_EX); fputs($file, $string."\n"); flock($file, LOCK_UN); fclose($file); $file = fopen($file_name, "r"); while($array = fgetcsv($file, 1000, ",")){ echo "<hr> \n"; for($i=0; $i< count($array); $i++){ echo $array[$i]."<br>"; } } fclose($file); なぜか最初の fopenで dieの方へ行って OPENエラーメッセージが出てきます。 この作業をするためには何かあらかじめ入れなくてはいけない構文とかあるんでしょうか?何か間違っていますでしょうか? それともphp.iniを設定するとかしなくてはいけないんでしょうか? php5を使用してますが、php.iniやphp.ini-distはともに見つからず。 困り果ててます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpで二重書込みできないプログラムを作りたい

    PHP初心者です。 テキストファイルに、ある文字列を書き込むプログラムを作ろうとしています。 ファイル内容に同じ文字列があれば書き込まず、 同じ文字列が無ければファイルに書き込むという プログラムを作りたいのですが、 うまくいきません。 どなたかアドバイスをお願いします。 <?php $name = "文字列"; $fp = @fopen("file.txt", "r"); $contents = @file_get_contents($fp); if(ereg($name, $contents)) { print "登録済みです。" ; } else { $fpa = @fopen("file.txt", "a"); fputs($fpa, "$name\n"); fclose($fpa); print "登録しました。"; } fclose($fp); ?>

    • 締切済み
    • PHP
  • カウンター 増えないのは?

    お世話になります。 下記、サンプルを参考にちょっとカウンターのスクリプトを書いてみたのですが、どうもカウントがアップしません。 どこがおかしいのかご指摘いただけると幸いです。 <?php //カウンターファイル $cnt_file = "count.dat"; //カウンター桁数 $cnt_len = 10; //カウンターファイルが存在すればカウンター値を読取る if(file_exists($cnt_file)){ $file = fopen($cnt_file, "r+"); $conut = fgets($file, $cnt_len); $count = $count + 1; } //ファイルなし新規作成 else { $file = fopen($cnt_file, "w"); $conut = 1; } //ファイルポインタを先頭にセットする rewind($file); //ロック flock($file, LOCK_EX); //書きこみ fputs($file, $conut, $cnt_len); //ロック解除 flock($file, LOCK_UN); //閉じる fclose($file); ?>

    • ベストアンサー
    • PHP
  • C言語でファイルを出力

    ファイルの中に変数をいれて複数のファイルをつくろうとしたのですが、 できたファイルの後に?マークがついてきます。 file = fopen("filename.txt", "w"); for(j=0; j<30; j++){ fprintf(file ,"%d.dat\n",j ); } fclose(file); file2 = fopen("filename.txt", "r"); として、ファイル名を書いたファイルをつくってから、 for(k=0; k<30; k++){ fgets(fp,sizeof(fp),file2); file_out = fopen(fp,"w"); 省略 fprintf(file_out, %e %e \n",a ,b); fclose(file_out); } fclose(file2); をして、30個のファイルを出力すると、 0.dat? 1.dat? 2.dat? . . . 29.dat? というファイルができてしまいます。 ファイルの中はしっかりできています。 なにか解決法を知っている方がおりましたら、どうか教えて下さい。