Curs PHP-MySQL


Contoar downloads si accesari

Download - Nr. descarcari - 152          


In aceasta pagina e prezentata o clasa PHP care poate fi folosita pentru inregistrare, contorizare si afisare numar de accesari fisiere, precum si data ultimei accesari pentru fiecare.
Poate fi utilizata in special pentru contorizare descarcari (contor downloads). Datele sunt salvate in tabel MySQL.
Aceasta clasa, denumita CountAccess se conecteaza la baza de date MySQL folosind extensia PHP mysqli. Are trei metode si Constructor:

  • setTable(), creaza tabelul MySQLl cu trei coloane ('file', 'nrac' si 'dt'). Acestea inregistreaza numele fisierului (sau adresa URL), numarul de accesari si data ultimei accesari. Numele tabelului e "access", poate fi modificat in proprietatea $tb_name.
    - Aceasta metoda e cu atribut "private", poate fi apelata doar in codul din corpul clasei.
  • setAccess($urlf) - primeste numele fisierului (sau adresa URL). Daca acel nume nu e inregistrat in tabel, il adauga, altfel, face update, marind cu o unitate numarul de accesari (in coloana 'nrac') si actualizeaza data curenta (a ultimei accesari), in coloana "dt".
  • getAccess($urlf) - primeste numele fisierului (sau adresa URL) si selecteaza randul cu inregistrarile ei.
    - Returneaza un sir cu numarul de accesari si data ultimei accesari a acelui fisier.
  • __construct($server, $user, $pass, $db) - primeste datele pentru conectare la MySQL si retine conexiunea mysqli in proprietatea $conn.
    - Daca tabelul MySQL nu exista in baza de date, se apeleaza metoda setTable() care-l va crea.
- Pentru explicatii mai detaliate despre instructiunile PHP folosite in aceasta clasa, vedeti comentariile din codul ei.

Clasa CountAccess

&bull Sau o puteti descarca de la link-ul Download, din dreapta-sus (contine si un fisier de test).
<?php
// - Clasa CountAccess ( www.marplo.net )
// inregistreaza si contorizeaza numarul de accesari

class CountAccess {
  // defineste proprietati pentru numele tabelului si a coloanelor
  public $tb_name = 'access';
  public $tb_cols = array('urlf'=>'urlf', 'nrac'=>'nrac', 'dt'=>'dt');

  // proprietate pt. retinerea conexiunii la MySQL
  protected $conn;

  // Constructor
  public function __construct($server, $user, $pass, $db) {
    // creaza conexiunea la MySQL (o retine in proprietatea $conn)
    $this->conn = new mysqli($server, $user, $pass, $db);
    if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit; }

    // verifica daca in $db exista tabelul din $tb_name
    // daca nu exista, apeleaza metoda setTable() ca sa creeze tabelul
    $Tables_in_db = 'Tables_in_'.$db;
    if($result=$this->conn->query("SHOW TABLES IN $db WHERE `$Tables_in_db` = '$this->tb_name'")) {
      if(mysqli_num_rows($result)<=0) {
        $this->setTable();
        $result->close();
      }
    }
  }

  // metoda pt. crearea tabelului
  private function setTable() {
    // sql query pt. CREATE TABLE
    $sql = "CREATE TABLE `$this->tb_name` (
     `". $this->tb_cols['urlf']. "`  VARCHAR(88) PRIMARY KEY NOT NULL,
     `". $this->tb_cols['nrac']. "` INT(8) UNSIGNED DEFAULT 1,
     `". $this->tb_cols['dt']. "` TIMESTAMP
    ) CHARACTER SET utf8 COLLATE utf8_general_ci";

    // executa $sql pt. a crea tabelul, in caz de esec returneaza eroarea
    if (!$this->conn->query($sql) === TRUE) {
      echo 'Eroare creare tabel: '. $this->conn->error;
    }
  }

  // metoda pt. insert / update contor si data a valorii din $urlf
  public function setAccess($urlf) {
    $urlf = $this->conn->real_escape_string($urlf);       // filtrare caractere speciale pentru a fi utilizate in interogare SQL

    // sql query pt. INSERT / UPDATE
    $sql = "INSERT INTO `". $this->tb_name. "` (`". $this->tb_cols['urlf']. "`) VALUES ('$urlf') ON DUPLICATE KEY UPDATE `". $this->tb_cols['nrac']. "`=`". $this->tb_cols['nrac']. "`+1";

    // transmite $sql query la serverul MySQL, in caz de esec returneaza eroarea
    if (!$this->conn->query($sql) === TRUE) {
      echo 'Eroare: '. $this->conn->error;
    }
  }

  // metoda pt. select numar de accesari si data ultimei accesari a valorii din $urlf
  public function getAccess($urlf) {
    $urlf = $this->conn->real_escape_string($urlf);       // filtrare caractere speciale pentru a fi utilizate in interogare SQL

    // sql query pt. SELECT
    $sql = "SELECT `". $this->tb_cols['nrac']. "`, DATE_FORMAT(`". $this->tb_cols['dt']. "`, '%d-%m-%Y %H:%i') AS dt FROM `". $this->tb_name. "` WHERE `". $this->tb_cols['urlf']. "`='$urlf' LIMIT 1";

    // efectueaza interogarea si retine rezultatul
    $result = $this->conn->query($sql);

    // daca $result contine cel putin un rand
    if ($result->num_rows > 0) {
      // adauga numar de accesari si data intr-0 variabila pt. return
      while($row = $result->fetch_assoc()) {
        $re = 'Accesari: '. $row['nrac']. ', ultima in: <i>'. $row['dt']. '</i>';
      }
    }
    else { $re = 'Accesari: 0, ultima in: 0'; }

    // inchide $result, pentru a elibera memoria
    $result->close();

    return $re;          // returneaza sirul din $re
  }
}


      /* Utilizare clasa CountAccess */

// datele pt. conectare la baza de date mysql (adresa_server, utilizator, parola si nume_baza_date)
$server = 'localhost';
$user = 'utilizator';
$pass = 'parola';
$db = 'nume_baza_date';

// creaza conexiunea MySQL si o instanta de obiect la clasa CountAccess 
$objCA = new CountAccess($server, $user, $pass, $db);

// daca exista $_GET['urlf']
if (isset($_GET['urlf'])) {
  $urlf = trim(strip_tags($_GET['urlf']));        // sterge tag-uri si spatii exterioare

  // apeleaza metoda setAccess() pt. insert / update numar accesari
  $objCA->setAccess($urlf);

  // Redirectioneaza browser-ul la adresa din $urlf
  header("Location: " . $urlf); exit;
}
?>

Cum se foloseste clasa CountAccess

1.   Copiati codul de deasupra si salvati-l intr-un fisier PHP (de exemplu "class.CountAccess.php") pe server.
2.   In acest cod, modificati valoarea variabilelor: $server, $user, $pass si $db, cu datele dv. pentru conectare la baza de date MySQL. Aceste variabile se gasesc dupa linia cu: "/* Utilizare clasa CountAccess */".
3.   Creati link-urile de download dupa urmatoarea formula:
  • <a href="path/class.CountAccess.php?urlf=dir/file_name.zip" title="Download title">Download</a>
    - "path/class.CountAccess.php" - este calea (adresa) catre fisierul PHP in care e codul clasei CountAccess.
    - "dir/file_name.zip" - este adresa si numele fisierului pentru download.

4.   In pagina PHP unde doriti sa afisati numarul de accesari (descarcari), includeti fisierul cu aceasta clasa (cu include('class.CountAccess.php'); ).
Apoi apelati echo $objCA->getAccess($urlf), unde $urlf este adresa si numele fisierului pentru download, acelasi folosit in link, la "href", dupa "urlf=".
                De examplu:     echo $objCA->getAccess('dir/file_name.zip');

Urmatorul exemplu arata o pagina PHP care foloseste clasa CountAccess pentru doua link-uri de download:
<?php
// include fisierul cu clasa CountAccess
include('class.CountAccess.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Contor Downloads</title>
</head>
<body>

<h3>Download</h3>
<!-- Link-urile de Download, prin fisierul class.CountAccess.php -->
<a href="class.CountAccess.php?urlf=download/test.zip" title="Download test">Download Test</a> - 
<?php echo $objCA->getAccess('download/test.zip'); ?>
<br />
<a href="class.CountAccess.php?urlf=Smile.zip" title="Download Smile">Download Smile</a> - 
<?php echo $objCA->getAccess('Smile.zip'); ?>

</body>
</html>
Acest cod va afisa ceva similar cu:

Download

Download Test - Accesari: 2, ultima in: 21-04-2011 18:54
Download Smile - Accesari: 3, ultima in: 21-04-2011 18:58
- Sirul care arata numarul de accesari (downloads) poate fi modificat din metoda getAccess(), in clasa CountAccess.
- Formatul datei poate fi schimbat in getAccess(), la instructiunea "... DATE_FORMAT(`". $this->tb_cols['dt']. "`, '%d-%m-%Y %H:%i') ...", modificati ('%d-%m-%Y %H:%i'), daca stiti cum.

• Aceasta clasa poate fi folosita pentru inregistrare, contor si afisare numar accesari pentru orice element: link, nume, adresa de pagina (dupa un nume sau adresa URL).
    - Includeti clasa CountAccess in fisierul PHP in care doriti sa o folositi.
    - Pentru insert / update numar de accesari, apelati metoda:   $objCA->setAccess('name');
    - Pentru a afisa contorul (numarul de accesari si data), apelati:   echo $objCA->getAccess('name');
Exemplu:
<?php
// include fisierul cu clasa CountAccess
include('class.CountAccess.php');

$name = 'o_valoare_de_tip_sir';
$objCA->setAccess($name);                 // insert / update numar accesari pentru $name
echo $objCA->getAccess($name);       // afiseaza numarul de accesari si data
?>

Clasa este gratuita si nu se acorda suport. Daca aveti intrebari sau opinii despre aceast script, puteti sa scrieti pe Forum.

Lectii / Tutoriale

Diverse PHP

Scripturi

  • PHP Script Chat
  • CMS Blog cu Ajax
  • Script Upload
  • Uploader
  • Multi-Uploader
  • Contoar pagina
  • Contor 2
  • Contoar click-uri
  • Contor Downloads
  • Numar Vizitatori si Utilizatori Online
  • Script inregistrare
  • Inregistrare Utilizatori
  • Curs valutar
  • Curs valutar 2
  • Mailer
  • Formular contact
  • Script comentarii
  • Script comentarii 2
  • Script comentarii 3
  • Vizitatori online
  • Script Paginare
  • Clasa Paginare
  • Script Page Rank
  • Script Chat
  • Numarare cuvinte
  • Recomanda pagina
  • Sistem notare
  • Countdown timer
  • Mini_Trafic Site
  • Subiecte forum
  • Clasa cautare Google
Contoar downloads si accesari
2008 - 2012 Webmaster, Webdesigner : MarPlo