Tema 3
Enunt
Contor (pe langa cel de la trafic sau de la google analytics)
Varianta simpla ce foloseste numai javascript: la accesul pe site este afisat tipul browserului utilizatorului si de cate ori a mai accesat site-ul (se folosesc cookies si obiectul navigator http://www.w3schools.com/js/js_browser.asp ) Varianta complexa - se foloseste ajax pentru a pastra vizitele intr-o baza de date si se actualizeaza live pe site (o data la 30 de secunde) numarul de pagini vizitate si de vizitatori unici.
Inainte de codul efectiv, ar fi de mentionat ca toata secventa de cod PHP este scrisa separat, intr-u fisier, iar acel fisier este inclus ca sursa in codul HTML paginii unde este folosit. Folosirea propriu zisa se face cu functia onLoad al head-ului codului paginii, astfel ca se va executa de fiecare data cand pagina se incarca. Se poate insa apela de oricunde din cod, nu numai pe baza proprietatii onLoad a head-ului HTML-ului.
< ?php
session_start();
$con = mysql_connect("localhost","nume_site","parola");
$db = mysql_select_db("numebd", $con) or die("Could not connect to the database: $sqlDatabase!");
if (!isset($_COOKIE["userId"])){ // nu are cookie, deci pp ca nu a mai fost niciodata pe site
//Alocam un nou id pentru acest utiliator in baza de date
$sql = "SELECT MAX(UserID)+1 as UserID FROM user";
$query = mysql_query($sql) or die($sql);
$row = mysql_fetch_object($query);
$newUserID = $row->UserID;
//Il inregistram in baza de date
$sql = " INSERT INTO user(`UserID`, `uName`, `uVisits`, `uIP`) VALUES ('".$newUserID."','unknown','1','".$_SERVER["REMOTE_ADDR"]."')";
$query = mysql_query($sql) or die($sql);
//Setam cookiurile
setcookie( "interweb_userId", $newUserID, time()+60*60*24*7);
setcookie( "interweb_visitsNo", 1, time()+60*60*24*7);
//Incrementam numarul de vizite totale
$sql = " UPDATE variable SET varValue = varValue + 1 WHERE varName='PageRequests' ";
$query = mysql_query($sql) or die($sql);
//Marcam in sesiune faptul ca acest utilizator a trecut pe aici (macar 1 pagina)
$_SESSION["userId"] = $newUserID;
//Incrementam numarul de user unici
$sql = " UPDATE variable SET varValue = varValue + 1 WHERE varName='Visitators' ";
$query = mysql_query($sql) or die($sql);
//Afisam ceva pentru utilizator
echo "Bine ati venit pe siteul InterWeb !
Sunteti la prima vizita.";
}
else { // are cookie, deci a mai fost pe site
if ( !isset($_SESSION["userId"]) ){ // nu are sesiune, deci e prima accesare din vizita aceasta
//Setam sesiunea
$_SESSION["userId"] = $_COOKIE["userId"];
//Actualizam numarul de vizite din cookie
setcookie( "visitsNo", $_COOKIE["visitsNo"] + 1, time()+60*60*24*7 );
//Actualizam numarul total de vizite din baza de date
$sql = "UPDATE variable SET varValue = varValue + 1 WHERE varName = 'PageRequests' ";
$query = mysql_query($sql) or die($sql);
//Actualizez numarul de vizite ale acestui user
$sql = "UPDATE User SET uVisits = uVisits + 1 WHERE UserID = '".$_COOKIE["userId"]."' ";
$query = mysql_query($sql) or die($sql);
}
? >
In timp ce o functie AJAX se va ocupa doar sa afiseze intr-un div
dorit, ceea ce retuneaza codul PHP de mai sus.
function register( showZone )
{
var xmlhttp = itcCreateXMLHttpRequestObject();
xmlhttp.open("GET", "/register.php",true);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState!=4)
return;
if (xmlhttp.status != 200)
{
alert("Eroare la primire date de la server ! \n");
return;
}
// Aici am primit raspunsul de la server. Raspunsul este in format HTML si il afisam
document.getElementById(showZone).innerHTML = xmlhttp.responseText;
}
xmlhttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2007 00:00:00 GMT" );
xmlhttp.setRequestHeader( 'Accept', 'message/x-formresult' );
xmlhttp.send(null);
return false;
}