【问题标题】:Creating PHP analytics for each user profile为每个用户配置文件创建 PHP 分析
【发布时间】:2018-03-08 06:51:08
【问题描述】:

我正在尝试为每个用户个人资料创建分析数据,告诉他们有多少来自城市和国家/地区的访问者访问了他们的个人资料。

这就是我目前正在做的事情。

session_start();

$analyticsuser = $_SESSION["analyticsuser"];

if($analyticsuser!=$author) //$author is where the id of each profile is stored.
{        
    $ip = $_SERVER['REMOTE_ADDR']; 
    $query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
    if($query && $query['status'] == 'success') 
    {
        $userip = $query['query'];
        $usercountry = $query ['country'];
        $usercity = $query['city'];

        $connection = mysqli_connect("HOSTNAME","USERNAME","PASSWORD","leo_site") or die("Error " . mysqli_error($connection));
        $sqlanalytics = "INSERT INTO member_analytics VALUES(NULL,\"$userip\",\"$author\",\"$usercity\",\"$usercountry\",now());";
        $resanalytics = mysqli_query($connection, $sqlanalytics) or die("Error " . mysqli_error($connection));

    } 
    else {    echo 'Unable to get location';    }
}    

$_SESSION["analyticsuser"] = $author;

我正在尝试了解有多少访问者来自不同的城市和国家/地区访问了他们的个人资料。

我现在面临的问题是,如果我在访问另一个配置文件后再次访问一个配置文件,数据仍然会被记录。这不应该发生,因为我们已经记录了该个人资料的访问者。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    有很多方法可以解决这个问题,我最常用的方法之一是mysql的一个特性。 首先使用 author 和 userip 创建一个复合键。 之后在插入运行替换查询的地方。根据替换查询的性质,如果它找到相同的作者和 userip 组合字段,它将用新数据替换该行,如果没有找到组合,它将插入它。

    $sqlanalytics = "REPLACE INTO member_analytics VALUES(NULL,\"$userip\",\"$author\",\"$usercity\",\"$usercountry\",now());";
    

    【讨论】:

    • 我正在尝试了解有多少访客访问了来自不同城市和国家的个人资料。 Sql 工作正常,它的 le 逻辑我很困惑。
    【解决方案2】:

    我已经解决了我的问题,您必须每次读取会话 ID 以检查访问者是否已经访问过个人资料。

    下面是正确的代码。

    session_start();
    
    $new_sessionid = session_id();
    
    $connection = mysqli_connect("HOSTNAME","USERNAME","PASSWORD","leo_site") or die("Error " . mysqli_error($connection));
    $sqlcanalytics = "SELECT * FROM member_analytics WHERE sessid=\"$new_sessionid\" AND uid=\"$author\";";
    $rescanalytics = mysqli_query($connection, $sqlcanalytics) or die("Error " . mysqli_error($connection));
    $numcanalytics = mysqli_num_rows($rescanalytics);
    if($numcanalytics==0)
    {
        $ip = $_SERVER['REMOTE_ADDR']; 
        $query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
        if($query && $query['status'] == 'success') 
        {
            $userip = $query['query'];
            $userisp = $query['isp'];
            $organization = $query['org'];
            $usercountry = $query ['country'];
            $userregion = $query['regionName'];
            $usercity = $query['city'];
    
            $sqlanalytics = "INSERT INTO member_analytics VALUES(NULL,\"$userip\",\"$author\",\"$new_sessionid\",\"$usercity\",\"$usercountry\",now());";
            $resanalytics = mysqli_query($connection, $sqlanalytics) or die("Error " . mysqli_error($connection));
        } 
        else { echo 'Unable to get location'; }
    }
    

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 2019-05-23
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多