- 締切済み
クリックカウンタ
クリック(送信)ボタンとカウント数を表示するindex.php カウント処理をするcounter.php カウント数を保存するdata.php index.phpにはカウンタを複数設置します。 送信するときにname=個別ID、value=そのIDの現在のカウンタ数+1 表示するときはdata.phpから対応するIDの数を表示します index.phpからcounter.phpにpostかgetで送信する。 送信はAjaxで行っていますので気にしないでください。 例index.phpでdata.phpを読み込み なんらかの方法でhoge1、huge2のクリック数を表示 今現在hoge1は20クリックとする hoge1の送信でcounter.php?hoge1=21 と送ると $_GET[hoge1]=21をdata.phpのhoge1の部分を21に更新する というような動作を実現したいのですが、ファイル操作やこういう場合の保存方法がわかりません(PHP暦二日目) クリックカウンタがひとつだけならアクセスカウンターの要領でいけるのですが・・・ 何かききたいことがあれば理解できる範囲で精一杯答えます。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- UmJammer
- ベストアンサー率58% (115/196)
?hoge1=21という渡し方をするよりclicked=yesみたなパラメータを渡した方がより正確なクリック数を記録できると思いますが、それはさておきファイルにデータを保存したいということなので、必要なのはファイル操作に関する情報ですね。 二日目ということなのでとりあえず以下に目を通してからの方が良さそうです。 http://jp.php.net/manual/ja/function.fopen.php http://jp.php.net/manual/ja/function.fwrite.php http://jp.php.net/manual/ja/function.fclose.php
お礼
追記、かなりcount.txtが最悪ですが count.txt <?php $dis123=0; $dis001=0; $hoge01=0; ?> counter.php <?php include "count.txt"; $vote = $_GET[vote]; $fp = fopen("count.txt", "r+"); if ($fp == false) { printf("count.txt を開けませんでした。\n"); return; } $count = 0; while (!feof($fp)) { $strs[$count] = fgets($fp); // 読み込み $count++; } $length = count($strs); for ($i = 0; $i < $length; $i++) { // 書き込み fputs($fp, $strs[$i]); fputs($fp, "\n"); } if ($vote===dis123){ ++$dis123; fputs($fp,"<?php \n"); fputs($fp,"$$vote=$dis123;\n"); fputs($fp,"?> \n"); } if ($vote===dis001){ ++$dis001; fputs($fp,"<?php \n"); fputs($fp,"$$vote=$dis001;\n"); fputs($fp,"?> \n"); } if ($vote===hoge01){ ++$hoge01; fputs($fp,"<?php \n"); fputs($fp,"$$vote=$hoge01;\n"); fputs($fp,"?> \n"); } fclose($fp); echo "dis123は".$dis123."点<br>"; echo "dis001は".$dis001."点<br>"; echo "hoge01は".$hoge01."点<br>"; ?> 目標 ifの処理をひとつだけにして代入で処理できるようにする 追記ではなく上書きにする、もう少しスマートにならないかな? ファイルロックのこと。 ちょっとずつ頭がまわってきたような気がするPHP暦3日目。 です、ヒントまたは、正解をください。よろしくお願いします。
補足
どう伝えればいいかが判らなかったのでログ飛びの問題とか考えずに簡易的なものをつくってみました。 count.txt <?php $dis123=0; ?> counter.php今回では、counter.php?vote=dis123 <?php include "count.txt";//中身$dis123=0 counter.php?vote=dis123が送られたときの動作 $vote = $_GET[vote]; $fp = fopen("sample.txt","w"); fputs($fp,"<?php \n"); fputs($fp,"\$dis001=1; \n");//count.txtから読み込んだ内容をそのまま入れていきたい fputs($fp,"\$hoge01=5; \n");//今のままではもちろん無理、イメージではこんなかんじで入ってくれるといいなと if ($vote===dis123){//ここではdis123としているが、count.txtに存在するidどれかにしたい ++$dis123;//ここも上と連動、またdis123がcount.txtに存在しない場合新たに作るようにしたい fputs($fp,"$$vote=$dis123;\n");//この際count.txtにあった前のデータの同じidのところを上書きしたい } fputs($fp,"?> \n"); fclose($fp); echo "dis123は".$dis123."点<br>"; echo "dis001は".$dis001."点<br>"; echo "hoge01は".$hoge01."点<br>"; ?>