• 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.


    Sursele :

    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; }