$ip_address = $_SERVER["REMOTE_ADDR"]; $page_name = $_SERVER["SCRIPT_NAME"]; $query_string = $_SERVER["QUERY_STRING"]; $current_page = $page_name."?".$query_string; /** @var PDO $dbh */ if(isset($_SESSION["tracking"])){ //update the visitor log in the database, based on the current visitor //id held in $_SESSION["visitor_id"] $visitor_id = isset($_SESSION["visitor_id"])?$_SESSION["visitor_id"]:0; if($_SESSION["current_page"] != $current_page) { $sql = "INSERT INTO visitor_tracking (ip_address, page_name, query_string, visitor_id) VALUES ('$ip_address', '$page_name', '$query_string', '$visitor_id')"; $f = $dbh->prepare($sql); $f ->execute(); $_SESSION["current_page"] = $current_page; } } else { //set a session variable so we know that this visitor is being tracked //insert a new row into the database for this person $sql = "INSERT INTO visitor_tracking (ip_address, page_name, query_string) VALUES ('$ip_address', '$page_name', '$query_string')"; $f = $dbh->prepare($sql); $f ->execute(); //find the next available visitor_id for the database //to assign to this person $_SESSION["tracking"] = true; $entry_id = $dbh->lastInsertId(); $lowest_sql = ($dbh->prepare("SELECT MAX(visitor_id) as next FROM visitor_tracking")); $lowest_sql->execute(); $lowest_sql = $lowest_sql->fetch(PDO::FETCH_ASSOC); $lowest = $lowest_sql["next"]; if(!isset($lowest)) $lowest = 1; else $lowest++; //update the visitor entry with the new visitor id //Note, that we do it in this way to prevent a "race condition" $ffexecute= ($dbh->prepare("UPDATE visitor_tracking SET visitor_id = '$lowest' WHERE entry_id = '$entry_id'")); $ffexecute->execute(); //place the current visitor_id into the session so we can use it on //subsequent visits to track this person $_SESSION["visitor_id"] = $lowest; //save the current page to session so we don't track if someone just refreshes the page $_SESSION["current_page"] = $current_page; }