我的基于php的客户端IP跟踪器没有';为什么不总是触发?

我的基于php的客户端IP跟踪器没有';为什么不总是触发?,php,ip,client,tracking,Php,Ip,Client,Tracking,更新不管它是否正常工作,我写它的目的是,如果同一个网站被浏览了不止一次,它就不会被再次添加,而是被增加。。。哈哈,我不知道自己的密码 我在这里写了这个脚本,它有点多余,因为它写入两个不同的表,但唯一的区别是一个计算视图,另一个计算新IP。我想我可以重做一次 问题是跟踪器并不总是被触发。为什么会这样 <?php mysqli_report(MYSQLI_REPORT_OFF); error_reporting(E_ALL); error_reporting(-1); ini_set('di

更新不管它是否正常工作,我写它的目的是,如果同一个网站被浏览了不止一次,它就不会被再次添加,而是被增加。。。哈哈,我不知道自己的密码

我在这里写了这个脚本,它有点多余,因为它写入两个不同的表,但唯一的区别是一个计算视图,另一个计算新IP。我想我可以重做一次

问题是跟踪器并不总是被触发。为什么会这样

<?php

mysqli_report(MYSQLI_REPORT_OFF);
error_reporting(E_ALL);
error_reporting(-1);
ini_set('display_errors',true);

function track() {

$ip = "my ip";

$client_ip = $_SERVER['REMOTE_ADDR'];

require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR.'dbconnect.php');
$link = new mysqli("$servername", "$username", "$password", "$dbname");

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

if($client_ip!=$ip){

$stmt = $link->prepare('SELECT website_url FROM website_views where website_url=?');
$stmt->bind_param('s',$actual_link);

if($stmt->execute())
{
    // means it exists
    $stmt->bind_result($website_url_from_db);
    if($stmt->fetch())
    {
    $link = new mysqli("$servername", "$username", "$password", "$dbname");
    $id = "";
    $stmt = mysqli_prepare($link, "UPDATE website_views SET views=views+1 where website_url=?");
    $stmt->bind_param('s',$actual_link);
    $stmt->execute();

    $link = new mysqli("$servername", "$username", "$password", "$dbname");
    $stmt = $link->prepare('SELECT client_ip FROM views where client_ip=?');
    $stmt->bind_param('s',$client_ip);
    if($stmt->execute()){

    $link = new mysqli("$servername", "$username", "$password", "$dbname");
    $stmt = mysqli_prepare($link, "UPDATE views SET num_times=num_times+1 where client_ip=? and website_url=?");
    $stmt->bind_param('ss',$client_ip,$actual_link);
    $stmt->execute();

    }else{

    $num_times = 1;
    $link = new mysqli("$servername", "$username", "$password", "$dbname");
    $stmt = mysqli_prepare($link, "INSERT INTO views VALUES (?,?,?,?)");
    $stmt->bind_param('issi',$id,$actual_link,$client_ip,$num_times);
    $stmt->execute();
    }
    }else{
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$id = "";
$website_url = $actual_link;
$views = 1;
$ip = $client_ip;
$num_times=1;

$stmt = mysqli_prepare($link, "INSERT INTO website_views VALUES (?,?,?)");
$stmt->bind_param('isi',$id,$website_url,$views);
$stmt->execute();
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$stmt = mysqli_prepare($link, "INSERT INTO views VALUES (?,?,?,?)");
$stmt->bind_param('issi',$id,$actual_link,$client_ip,$num_times);
$stmt->execute();
}

}
}
}

track();

?>

试试看


另外,请检查打印服务器($\u服务器)以确保它能满足您的期望。

您有SQL注入漏洞。在哪里?你怎么说哈哈。。。顺便提一下你得了癌症,但我不会告诉你在哪里$实际链接?谢谢我修改了它们,问题仍然是只有某些页面触发跟踪,即使它们都有。是什么导致了这种差异?我想知道我是否应该通过onload而不是只使用ajax而不是php来触发它当你说track()fx并不总是被触发时,你怎么知道这一点(除了明显的no-sql调用)?你确定你每次都会进入外汇市场吗?是否有一个if块或其他东西会阻止track最初被调用-这里没有显示的东西?这是完整的代码,我把它放在每个网站的顶部。我进入phpmyadmin,我测试一个工作站点,递增,测试另一个站点,不递增。所以我想知道为什么它在某些情况下不起作用。我使用tor browser获得不同的IP,我意识到由于我的IP是动态的,在顶部声明一个固定IP进行比较是不好的,理想的是在将来我会使用会话值,例如登录,但不是我的每个网站都需要登录。在每一页甚至是一个需要文件和传输文件夹的页面上都包含所有这些内容,这似乎也是一种痛苦。这是为什么?我将检查数组\u键\u是否存在
$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
    $ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}