人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php+mysqlアクセスカウンターに関する質問です。

count.phpにアクセスするたびにmysqlのテーブル(acc_log)のフィールド(count)の数値が1増えます。
この場合のcount.phpの記述内容を教えてください。

低レベルな質問で申し訳ありません。
よろしくお願い致します。

●質問者: xptree
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL PHP アクセス アクセスカウンター フィールド
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●20ポイント

MySQL 関数を利用し、こんな感じでどうでしょうか。

$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

// テーブルが無い場合には新規作成する
$sql = 'create table if not exists データベース名.acc_log (フィールドの定義);'
$res = mysql_query($sql, $con);

//countを調べる
$sql = 'select * from acc_log where 1;';
$res = mysql_query($sql, $con);

//まだcountが記録されていない場合
if (mysql_num_rows($res) == 0) {
 $sql = 'insert into acc_log (count) values (1);';
 $res = mysql_query($sql, $con);
} else {
 $row = mysql_fetch_array($res);
 $sql = "update acc_log set count='" . $row['count'] + 1 . "' where count='" . $row['count'] . "';";
}
mysql_close($con);

◎質問者からの返答

回答ありがとうございます。

1以上数値が増えないのですが…


2 ● b-wind
●40ポイント

主なところは1番の回答の通りでいいけど、同時アクセス時にちゃんとカウントされないね。


わざわざデータとってこなくても、後半部分はこれでいいと思うんだけど。

$sql = 'update acc_log set count = count + 1 ';
$res = mysql_query($sql, $con);

テーブルの作成と最初のレコードの生成は別途行っておくこと。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.4 UPDATE 構文

◎質問者からの返答

回答ありがとうございます。

回答者1さんの

$sql = 'insert into acc_log (count) values (1);';

$res = mysql_query($sql, $con);

$sql = 'update acc_log set count = count + 1 ';

$res = mysql_query($sql, $con);

に変更したのですが

カウントされるたびに数値が増えるのではなくて

レコード(count)が増えてしまいます…


3 ● pahoo
●20ポイント

#2で b-wind さんがご指摘した通りです。修正したプログラムを下記に掲げます。

$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

// テーブルが無い場合には新規作成する
$sql = 'create table if not exists データベース名.acc_log (フィールドの定義);'
$res = mysql_query($sql, $con);

//countを調べる
$sql = 'select * from acc_log where 1;';
$res = mysql_query($sql, $con);

//まだcountが記録されていない場合
if (mysql_num_rows($res) == 0) {
 $sql = 'insert into acc_log (count) values (1);';
 $res = mysql_query($sql, $con);
} else {
 $sql = 'update acc_log set count = count + 1; ';
 $res = mysql_query($sql, $con);
}
mysql_close($con);
◎質問者からの返答

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ