this starting of new project. this a complete till i setup more in the db. left out config.php.
index.php
<?php
include('controls.php');
include('session.php');
startSession();
echo "Welcome, Guest! Enjoy the stay! <br/>";
include('tracking.php');
?>
controls.php
include('config.php');
if(!isset($_GET['tracking'])){
$tracking = "simple";
}else{
$tracking = "details";
}
session.php
<?php
include('database.php');
include('information.php');
function startSession(){
session_start();
$_SESSION['referrer'] = $_SERVER['SCRIPT_NAME'];
removeInactiveVisitors();
addOrUpdateVisitor();
}
?>
database.php
<?php
function addOrUpdateVisitor(){
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$timeout = time()-5*60;
$ip = getRealIpAddr();
$sql = "SELECT * FROM visitors WHERE ip = ".$ip." and time = ".$timeout;
if ($result = mysqli_query($link, $sql)) {
$row_cnt = mysqli_num_rows($result);
}
if($row_cnt == 0){
$ip_data = locateIp($ip);
addVisitor($ip_data);
}else{
updateVisitor();
}
mysqli_close($link);
}
function addVisitor($ip_data){
$rightNow = time();
$nextRow = numberActiveVistors() + 1;
$referrer = $_SESSION['referrer'];
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$sql = "INSERT INTO `beta_jcws2010`.`visitors`(`id`,`time`,`ip`,`countryCode`,`country`,`region`,`city`,`postalCode`,`latitude`,`longitude`,`timezone`,`pageOn`) VALUES('$nextRow','$rightNow','$ip_data[ip]','$ip_data[country_code]','$ip_data[country_name]','$ip_data[region_name]','$ip_data[city]','$ip_data[zippostalcode]','$ip_data[latitude]','$ip_data[longitude]','$ip_data[timezone]','$referrer')";
$result = mysqli_query($link, $sql) or die(mysql_error());
mysqli_close($link);
}
function updateVisitor(){
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$sql = "UPDATE visitor SET time = ". time() ." WHERE ip = ".$ip;
$result = mysqli_query($link, $sql) or die(mysql_error());
mysqli_close($link);
}
function removeInactiveVisitors(){
$timeout = time()-5*60;
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$sql = "DELETE FROM `visitors` WHERE 'time' < $timeout";
$result = mysqli_query($link, $sql) or die(mysql_error());
mysqli_close($link);
}
function numberActiveVistors(){;
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$sql = "SELECT * FROM visitors";
if ($result = mysqli_query($link, $sql)) {
$row_cnt = mysqli_num_rows($result);
mysqli_free_result($result);
}
return $row_cnt;
}
function visitorsByConrties(){
$link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die('Connect Error: ' . mysqli_connect_error());
$sql = "SELECT countryCode, country, count(countryCode) AS numVisitors FROM visitors GROUP BY countryCode";
$result = mysqli_query($link, $sql) or die(mysql_error());
$visitorsConrties = array();
while ($row = mysqli_fetch_assoc($result)) {
$visitorsConrties[] = $row;
}
return $visitorsConrties;
mysqli_close();
}
?>
information.php
<?php
function getRealIpAddr(){
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function locateIp($ip){
$d = file_get_contents("http://www.ipinfodb.com/ip_query.php?ip=$ip&output=xml&timezone=true");
if (!$d){
$backup = file_get_contents("http://backup.ipinfodb.com/ip_query.php?ip=$ip&output=xml&timezone=true");
$answer = new SimpleXMLElement($backup);
if (!$backup) return false;
}else{
$answer = new SimpleXMLElement($d);
}
$country_code = $answer->CountryCode;
$country_name = $answer->CountryName;
$region_name = $answer->RegionName;
$city = $answer->City;
$zippostalcode = $answer->ZipPostalCode;
$latitude = $answer->Latitude;
$longitude = $answer->Longitude;
$timezone = $answer->TimezoneName;
//Return the data as an array
return array('ip' => $ip, 'country_code' => $country_code, 'country_name' => $country_name, 'region_name' => $region_name, 'city' => $city, 'zippostalcode' => $zippostalcode, 'latitude' => $latitude, 'longitude' => $longitude, 'timezone' => $timezone);
}
?>
tracking.php
<?php
if($tracking == "details"){
echo "<p>Currently ". numberActiveVistors() ." guest/s viewing this site!</p>";
foreach (visitorsByConrties() as $vconrties) {
echo "<tr><td>" . htmlspecialchars($vconrties['numVisitors']) ." in the " . htmlspecialchars($vconrties['country']) . "</td></tr>";
}
echo "<p><a href='index.php'>Non-Detailed Visitor Information.</a></p>";
}else{
echo "<p>Currently <a href='index.php?tracking=details'>". numberActiveVistors() ." guest/s</a> viewing this site!</p>";
}
?>