页面查看计数器,提供代码,这是最好的方法吗?

时间:2012-02-07 06:46:06

标签: php mysql counter

我们假设我们有一个名为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;

2 个答案:

答案 0 :(得分:0)

很大程度上取决于您的用例。对于内部网络中的平凡计数器,这可能就足够了。

虽然我不太清楚" pageHits"实际上很重要似乎是我不会打电话的唯一身份访问者的数量" pageHits"。

对于每个人都可见的网站,这种方法存在问题。一个显而易见的问题是通过" id"参数。

当然,有很多库可以进行这种计算,并且具有不同程度的复杂性。如果没有进一步的细节和实际用例,很难判断您是否需要编写更复杂的代码。

答案 1 :(得分:0)

我甚至不会检查数据库中的现有条目。

UNIQUEip(合并)上添加id密钥,然后运行INSERT IGNORE

$ip=$_SERVER['REMOTE_ADDR'];
$id=$_GET['id'];

$query = 'INSERT IGNORE INTO visits (ip, id) VALUES ('.$ip.', '.intval($id).')';
mysql_query($query, $connection);

// and now select the visits:
$query = 'SELECT COUNT(ip) as pageHits FROM visits WHERE id = '.intval($id);
$result = mysql_query($query, $connection);
list($pageHits) = mysql_fetch_array($result);
echo $pageHits;