このテーブルはvisits
とし、ページIDはid
、ユーザのIPアドレスはip
の2つのフィールドがあるとします。ページビューカウンタ、コードが提供されています、それは最善の方法ですか?
私はこのコードを書いており、それが最良の方法であるかどうか疑問に思っていますか?
$ip=$_SERVER['REMOTE_ADDR'];
$id=$_GET['id'];
$query = "SELECT
(SELECT COUNT(ip) FROM visits WHERE id = '{$id}' AND WHERE ip ='{$ip}') as visited,
(SELECT COUNT(ip) FROM visits WHERE id = '{$id}') as pageHits";
$result=mysql_query($query, $connection);
$row=mysql_fetch_array($result);
$pageHits=$row['pageHits'];
$visited=$row['visited']; //it's either 0 or 1;
if($visited==0){
$query ="INSERT INTO visits (ip , id) VALUES ('{$ip}', {$id})"
$result=mysql_query($query, $connection);
$pageHits++;
}
echo $pageHits;
ユーザーがページのいずれかを訪問したら、それは1に訪れたフラグを設定し、そのカウンターをヒット将来他のページのいずれか。 IPアドレスはすべてのページで同じになるので –
'(ip、id)'に 'UNIQUE'制約を追加する方が良いでしょう。そうでなければ競合状態になります。 – Amber
GETパラメータのサニタイズを確認してください。現在のようにコードにオープンな脆弱性 – xbonez