Curs Php-mysql


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:

- Pentru explicatii mai detaliate despre instructiunile PHP folosite in aceasta clasa, vedeti comentariile din codul ei.

Clasa CountAccess

• Sau o puteti descarca de la link-ul Download, din dreapta-sus (contine si un fisier de test).
<?php
// - Clasa CountAccess ( 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;

  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; }
    $this->conn->query('SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";');

    // 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";
    $result = $this->conn->query($sql);  // efectueaza interogarea si retine rezultatul

    // 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';

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

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

  // metoda pt. select top $nr accesari
  public function topAccess($nr){
    $re ='';
    $sql ="SELECT `". $this->tb_cols['urlf']. "`, `". $this->tb_cols['nrac']. "` FROM `". $this->tb_name. "` ORDER BY `". $this->tb_cols['nrac']. "` DESC LIMIT ". intval($nr);
    $result = $this->conn->query($sql);

    // daca $result contine cel putin un rand, creaza LI cu numele din adresa
    if($result->num_rows >0){
      while($row = $result->fetch_assoc()){
        $ar = explode('/', $row['urlf']);
        $re .='<li>'. $ar[count($ar)-1] .' ('. $row['nrac']. ')</li>';
      }
    }
    $result->close();

    return '<ul>'. $re .'</ul>';
  }
}


      /* 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 (sau descarcati clasa de la link-ul Download de sus).
2.   In acest cod (la sfarsitul lui), modificati valoarea variabilelor: $server, $user, $pass, $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:     - "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>
<html lang="ro">
<head>
<meta 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=download/Smile.zip" title="Download Smile">Download Smile</a> - 
<?php echo $objCA->getAccess('download/Smile.zip'); ?>
<br>
<h4>Top 3 Accesari:</h4>
<?php echo $objCA->topAccess(3); ?>

</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

Top 3 Accesari:

- 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');
    - Ca sa afisati Topul celor mai multe $nr accesari apelati:   echo $objCA->topAccess($nr);
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
echo $objCA->topAccess(3);  // afiseaza top 3 accesari
?>

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

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag adauga rand nou in paragraf?
<b> <br> <p>
Prima linie ...<br>
Alta linie...
Ce proprietate CSS seteaza spatiu dintre litere?
text-size word-spacing letter-spacing
#id {
  letter-spacing: 2px;
}
Ce functie obtine accesul la un element HTML cu un anumit ID?
getElementById() getElementsByTagName() createElement()
var elm = document.getElementById("theID");
var content = elm.innerHTML;
alert(content);
Clic pe instructiunea "echo" utilizata corect.
echo "CoursesWeb.net" echo "CoursesWeb.net"; echo ""CoursesWeb.net";
echo "Adresa URL: http://CoursesWeb.net";
Care din urmatoarele expresii cu "paint" (a picta) se foloseste pentru forma Negativa?
will paint not paint have painted
She does not paint that landscape.
- Ea nu picteaza acel peisaj.
Care din urmatoarele expresii cu "cantar" (a canta) se foloseste pentru propozitie Negativa?
ir a cantar cantaba no cantar
Ella no canta esa canciĆ³n.
- Ea nu canta acel cantec.
Contoar downloads si accesari

Last accessed pages

  1. Coduri pt culori (66247)
  2. Articolul din limba engleza - The article (66885)
  3. Creare link-uri (18684)
  4. Jokes - Glume, Bancuri, Humor (3) (1890)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (120700)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1187)
  2. Curs HTML gratuit Tutoriale HTML5 (931)
  3. Coduri pt culori (675)
  4. Creare si editare pagini HTML (544)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (496)