Curs Php-mysql



Script-ul din aceasta pagina inregistreaza si afiseaza numar de utilizatori si vizitatori online (din ultimile 2 minute).
Principiul este acesta: fiecare utilizator /vizitator este inregistrat intr-un fisier text pe server, sau intr-o baza de date, impreuna cu timpul (Timestamp) ultimei accesari. De fiecare data cand o pagina din site e accesata, scriptul PHP sterge toate inregistrarile mai vechi de un anumit timp (aici 2 minute), adauga utilizatorul /vizitatorul curent apoi preia numarul de inregistrari ramase.


Utilizatorii si vizitatorii online pot fi stocati intr-un fisier pe server, sau intr-un tabel MySQL.
In acest caz, cred ca utilizarea unui fisier text in care sa fie adaugate si citite inregistrarile e mai rapida decat stocarea lor intr-un tabel MySQL, deoarece sunt necesare mai multe interogari SQL.

Mai intai e prezentata varianta cu inregistrarea intr-un fisier text pe server, apoi metoda cu adaugare in tabel MySQL.

Arhiva ce poate fi descarcata de la link-ul Download de mai sus contine ambele variante, plus fisierele cu exemplele de test prezentate mai jos in aceasta pagina.

• Ambele script-uri pot fi incluse si folosite in fisiere "*.php" (cu include()), si in fisiere "*.html" (cu <script>), dupa cum puteti vedea in exemplele de la sfarsitul paginii; dar serverul trebuie sa ruleze PHP.

Stocare utilizatori si vizitatori online in fisier text

Pentru a adauga cu PHP date intr-un fisier pe server, trebuie sa setati permisiuni CHMOD 0766 (sau CHMOD 0777) la acel fisier, astfel PHP poate sa scrie date in el.

1. - Creati un fisier text pe server (de exemplu, denumit "userson.txt") si dati-i permisiuni CHMOD 0766 (in programul FTP pe care-l folositi, clic-dreapta pe acel fisier, alegeti Properties, apoi selectati optiunile Read, Write, si Execute ).
2. - Creati un fisier PHP (denumit "usersontxt.php") si adaugati in el codul urmator, apoi copiati acest fisier pe server, in acelasi director unde e si "userson.txt".

Codul pentru usersontxt.php

<?php
// Script Utilizatori si vizitatori Online - marplo.net/php-mysql/
if(!isset($_SESSION)) session_start();         // porneste sesiunea, daca nu e deja pornita

$filetxt = 'userson.txt';  // fisierul in care sunt adaugati utilizatorii si vizitatorii
$timeon = 120;             // numarul de secunde considerat / retinut online
$sep = '^^';               // charactere utilizate pt. a desparti nume_utilizator de Timestamp
$vst_id = '-vst-';         // identificator pt. a sti ca e vizitator, nu utilizator logat

/*
 Daca aveti un script de Inregistrare /Logare,
 inlocuiti $_SESSION['nume'] cu variabila, sau sesiunea in care e retinut numele utilizatorului
 Un script gratuit de Inregistrare /Logare e la:
    https://marplo.net/php-mysql/utilizatori-inregistrare-autentificare-logare-s.php
*/

// preia numele de utilizator, daca e logat, sau IP-ul vizitatorului (la acesta adauga un identificator de vizitator)
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp pt. recunoastere rand cu vizitator
$nrvst = 0;                                      // va contine numar vizitatori

// seteaza linia cu utilizator /vizitator, si timestamp-ul curent, ce va fi adaugata in $filetxt
$addrow[] = $uvon. $sep. time();

// verifica daca fisierul din $filetxt exista si poate fi scris
if(is_writable($filetxt)) {
  // preia intr-un array liniile adaugate in fisierul din $filetxt
  $ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $nrrows = count($ar_rows);            // numarul de linii

  // daca e cel putin o linie, parcurge array-ul din $ar_rows
  if($nrrows>0) {
    for($i=0; $i<$nrrows; $i++) {
      // ia fiecare linie si separa utilizator /vizitator si timestamp
      $ar_line = explode($sep, $ar_rows[$i]);

      // verifica timpul si retine in array-ul $addrow inregistrarile din ultimile $timeon secunde
      if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
        $addrow[] = $ar_rows[$i];
      }
    }
  }
}

$nruvon = count($addrow);                   // total online
$usron = '';                                // pt. numele utilizatorilor logati
// parcurge $addrow pt. a obtine numarul de vizitatori si utilizatori
for($i=0; $i<$nruvon; $i++) {
 if(preg_match($rgxvst, $addrow[$i])) $nrvst++;       // incrementeaza vizitatori
 else {
   // preia si adauga nume utilizator
   $ar_usron = explode($sep, $addrow[$i]);
   $usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
 }
}
$nrusr = $nruvon - $nrvst;              // obtine nr. utilizatori (total - vizitatori)

// codul HTML cu datele ce vor fi afisate
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Vizitatori: '. $nrvst. '<br/>Utilizatori: '. $nrusr. $usron. '</div>';

// adauga in $filetxt datele cu liniile retinute
if(!file_put_contents($filetxt, implode("\n", $addrow))) {
  $reout = 'Eroare: Fisierul de inregistrare nu exista sau nu poate fi scris.';
}

// daca e accesare prin <script>, cu GET 'uvon=showon',
// adauga sirul ce va fi returnat intr-o instructiune JavaScript
// cu acest cod, script-ul va putea fi utilizat si in fisiere .html
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /afisare rezultat
?>

3. - Daca vreti sa includeti scriptul de mai sus intr-un fisier ".php", adaugati codul urmator in locul unde doriti sa afisati numar utilizatori si vizitatori online:
<?php include('usersontxt.php'); ?>

4. Pentru a afisa numarul de vizitatori si utilizatori intr-un fisier ".html", adaugati in el acest cod:
<script type="text/javascript" src="usersontxt.php?uvon=showon"></script>

Acest script (si cel prezentat mai jos) folosesc $_SESSION. La inceputul fisierului PHP in care-l includeti trebuie sa adaugati:   session_start();.

Adaugare utilizatori si vizitatori online in tabel MySQL

Pentru a inregistra si afisa numar vizitatori si utilizatori online folosind un tabel MySQL, trebuie efectuate trei interogari SQL:
  1. Stergere (Delete) randuri mai vechi de un anumit timp.
  2. Adaugare (Insert) rand cu utilizatorul /vizitatorul curent, sau daca e deja adaugat, actualizare (Update) data in coloana cu timpul Timestamp.
  3. Selectare (Select) randurile ramase.
Iata codul pt. un script de inregistrare utilizatori si vizitatori online intr-un tabel MySQL (denumit "userson").

1. - Mai intai se creaza tabelul "userson", cu 2 coloane (uvon, dt). In coloana "uvon" e adaugat numele utilizatorului (daca e autentificat /logat), sau IP-ul vizitatorului. In coloana "dt" e adaugat un numar cu timpul in format Timestamp (timpul Unix) cand accesarea e facuta.
- Adaugati urmatorul cod intr-un fisier php (de exemplu, cu numele "create_userson.php"):

Codul pt. create_userson.php

<?php
header('Content-type: text/html; charset=utf-8');

// AICI Adaugati datele dv. de conectare la baza de date MySQL
$host = 'localhost';           // adresa server MySQL
$user = 'root';                // Nume utilizator
$pass = 'parola';              // Parola de access
$dbname = 'baza_date';         // Nume baza de date

// conectare la baza de date MySQL
$conn = new mysqli($host, $user, $pass, $dbname);

// verificare conectare
if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());

// codul SQL pt. creare tabel "userson"
$sql = "CREATE TABLE `userson` (
 `uvon` VARCHAR(32) PRIMARY KEY,
 `dt` INT(10) UNSIGNED NOT NULL
 ) CHARACTER SET utf8 COLLATE utf8_general_ci"; 

// Executarea interogarii $sql si crearea tabelului
if ($conn->query($sql) === TRUE) echo 'Tabelul "userson" a fost creat';
else echo 'Eroare: '. $conn->error;

$conn->close();
?>

2. - Acum se creaza scriptul pt. comenzile Insert/Update, Delete, si Select date in tabelul "userson" (Explicatii despre cod sunt in comentariile din script).
- Adaugati codul de mai jos in alt fisier php (denmit "usersmysql.php"):

In ambele fisiere trebuie sa adaugati datele dv. pentru conectare la baza de date MySQL, in variabilele: $host, $user, $pass, $dbname .

Codul pt. usersmysql.php

<?php
// Script Utilizatori si vizitatori Online - marplo.net/php-mysql/
if(!isset($_SESSION)) session_start();         // porneste sesiunea, daca nu e deja pornita

// AICI Adaugati datele dv. de conectare la baza de date MySQL
$host = 'localhost';           // adresa server MySQL
$user = 'root';                // Nume utilizator
$pass = 'parola';              // Parola de access
$dbname = 'baza_date';         // Nume baza de date

/*
 Daca aveti un script de Inregistrare /Logare,
 inlocuiti $_SESSION['nume'] cu variabila, sau sesiunea in care e retinut numele utilizatorului
 Un script gratuit de Inregistrare /Logare e la:
    https://marplo.net/php-mysql/utilizatori-inregistrare-autentificare-logare-s.php
*/

// preia numele de utilizator, daca e logat, sau IP-ul vizitatorului (la acesta adauga un identificator de vizitator)
$vst_id = '-vst-';         // identificator pt. a sti ca e vizitator, nu utilizator logat
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp pt. recunoastere rand cu vizitator
$dt = time();                                    // timpul curent (timestamp)
$timeon = 120;               // numarul de secunde considerat / retinut online
$nrvst = 0;                                     // va contine numar vizitatori
$nrusr = 0;                                     // va contine numar utilizatori
$usron = '';                                    // pt. numele utilizatorilor logati

// conectare la baza de date MySQL
$conn = new mysqli($host, $user, $pass, $dbname);

// Definire comenzi SQL pt Delete, Insert/Update, si Select
// Sterge randurile mai vechi de $timeon secunde, Adauga /Update user curent, Selecteaza pe cei ramasi
$sqldel = "DELETE FROM `userson` WHERE `dt`<". ($dt - $timeon);
$sqliu = "INSERT INTO `userson` (`uvon`, `dt`) VALUES ('$uvon', $dt) ON DUPLICATE KEY UPDATE `dt`=$dt";
$sqlsel = "SELECT * FROM `userson`";

// Executa comenzile SQL
if(!$conn->query($sqldel)) echo 'Eroare: '. $conn->error;
if(!$conn->query($sqliu)) echo 'Eroare: '. $conn->error;
$result = $conn->query($sqlsel);

// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
  // parcurge setul de rezultate si seteaza numar vizitatori si utilizatori online ($nrvst, $nrusr)
  while($row = $result->fetch_assoc()) {
    if(preg_match($rgxvst, $row['uvon'])) $nrvst++;              // incrementeaza vizitatori
    else {
      $nrusr++;                   // incrementeaza utilizatori
      $usron .= '<br/> - <i>'.$row['uvon']. '</i>';          // adauga nume utilizator
    }
  }
}

$conn->close();                  // inchide conexiunea MySQL

// codul HTML cu datele ce vor fi afisate
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Vizitatori: '. $nrvst. '<br/>Utilizatori: '. $nrusr. $usron. '</div>';

// daca e accesare prin <script>, cu GET 'uvon=showon',
// adauga sirul ce va fi returnat intr-o instructiune JavaScript
// cu acest cod, script-ul va putea fi utilizat si in fisiere .html
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /afisare rezultat
?>

3. - Dupa ce ati creat aceste doua fisiere php pe server, accesati in browser "create_userson.php" (de exemplu, http://localhost/create_userson.php) ca sa creati tabelul "userson".
4. - Includeti "usersmysql.php" in fisierul php in care doriti sa afisati numarul de utilizatori si vizitatori online.
<?php include('usersmysql.php'); ?>

5. Sau, daca fisierul e de tip ".html", adaugati acest cod:
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>

Exemple utilizare aceste doua scripturi

• Includere "usersontxt.php" in fisier PHP:
<?php
// Inainte de alt cod ce transmite date, se porneste sesiunea
session_start();

// Apoi se poate adauga restul scriptului si codul paginii
?>
<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Numar Vizitatori si Utilizatori Online</title>
 <meta name="description" content="Script PHP pt. afisare numar Vizitatori si Utilizatori Online" />
 <meta name="keywords" content="utilizatori online, vizitatori online" />
</head>
<body>

<?php
// Includere script ("usersontxt.php", sau "usersmysql.php")
// in locul unde doriti sa fie afisat nr. vizitatori si utilizatori online
include('usersontxt.php');
?>

</body>
</html>

• Includere "usersmysql.php" in fisier .html:
<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Numar Vizitatori si Utilizatori Online</title>
 <meta name="description" content="Script PHP pt. afisare numar Vizitatori si Utilizatori Online" />
 <meta name="keywords" content="utilizatori online, vizitatori online" />
</head>
<body>

<!-- Includere script ("usersontxt.php", sau "usersmysql.php") -->
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>

</body>
</html>

Ambele script-uri (cu stocarea datelor intr-un fisier pe server, sau intr-un tabel MySQL) vor afisa un rezultat ca acesta:

Online: 8

Vizitatori: 5
Utilizatori: 3
- MarPlo
- Marius
- Admin

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce atribut face un buton radio sau checkbox sa fie selectat?
checked="checked" selected="selected" disabled="disabled"
<input type="checkbox" name="a_name" value="value" checked="checked" />
Ce valoare CSS redimensioneaza imaginea de fundal pana la marimea elementului?
repeat-x contain linear-gradient
#id {
  background:url("path_to_image.png");
  background-size:contain;
  background-repeat:no-repeat;
}
Ce operator se foloseste pentru restul impartirii a doua numere?
% * /
var rest8_7 = 8 % 7;
alert(rest8_7);
Indicati functia PHP care rotunjeste numarul la valoarea intreaga mare.
floor() ceil() abs()
$nr = ceil(3.5);
echo $nr;        // 4
Indicati articolul corect la cuvantul "bike" in propozitia: "Alex wants to buy ... bike".
An The A
Alex wants to buy a bike.
- Alex vrea sa cumpere o bicicleta.
Indicati articolul nedefinit corect pentru cuvantul: "libros" (carti)
unos una un
LeĆ­ unos libros.
- Am citit niste carti.
Inregistrare, Afisare numar vizitatori si utilizatori Online

Last accessed pages

  1. Articole definite si nedefinite 1 (5824)
  2. Prezentul simplu si continuu - Present Tense Simple and Continuous (148374)
  3. Gramatica limbii spaniole. Indrumator si prezentare generala (67629)
  4. Pronume direct (2313)
  5. Numere cardinale 1-10 (4866)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (99)
  2. Exercitii engleza - English Tests and exercises - Grammar (56)
  3. Prezentul simplu - Exercitii si teste incepatori (47)
  4. Cursuri limba engleza gratuite si lectii online (45)
  5. Gramatica limbii engleze - Prezentare Generala (39)