讓我們假設我們有這個名爲visits
的表,它有兩個字段id
用於頁面ID和ip
用於用戶的IP地址。頁面查看計數器,提供代碼,是最好的方法嗎?
我寫了這段代碼,我想知道這是否是最好的方法?
$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地址相同 – 2012-02-07 06:51:25
你可能會更好地在'(ip,id)'上添加一個'UNIQUE'約束 - 否則你會遇到競爭狀態。 – Amber 2012-02-07 06:52:11
確保您清理GET參數。它是目前代碼中的一個開放式漏洞 – xbonez 2012-02-07 06:57:29