Počítadlo na webu, druhý díl
19.04.2008Komentáře (0) Kategorie: Tvorba webu » PHP

Jak jsem v minulém díle slíbil, dnes si ukážeme jak vytvořit počítadlo přístupů na webu pomocí databáze. Minule jsme tento úkol řešili s použitím souboru, do kterého jsme si ukládali data, což nebylo zrovna výhodné. Nejen že je to pomocí databáze jednodušší, ale i přehlednější. Tento tutoriál není určen pro začátečníky, kteří nikdy nepracovali s databází, ale pro ty, co databázi alespoň trochu rozumí a znají základní SQL dotazy. Začátečníkům bych doporučil nejdřív vyzkoušet minulý příklad.

Nejdříve si vytvoříme tabulku. Cíl je stejný jako minule, uložit údaj o přístupu jednohu uživatele jenom jednou denně. Vytvoříme si tabulku, která bude mít tři sloupce. IP, DEN a ČAS. Samozřejmě všechno bez diakritiky. Můžeme to udělat pomocí PHPMyAdmina. nebo následujícím SQL dotazem:

CREATE TABLE pocitadlo (
ip VARCHAR( 25 ) NOT NULL ,
den DATE NOT NULL ,
cas TIME NOT NULL
) ENGINE = MYISAM ;

Tabulku tedy máme. Nyní si vytvoříme soubor pocitadlo.php, do kterého budeme přidávat následující části kódu:


<?php
   
    /* Nastavení připojení k databázi */
    define("SERVER","localhost");
    define("USER","root");
    define("PASS","");
    define("DB","tutorialy");

?>
 

Záměrně budu používat novou práce s databází a to MySQL improved. V nějakém dalším článku si jí můžeme projít a říct v čem je lepší. Pro nás to v tuto chvíli znamená jen to, že místo funkcí mysql() budeme psát mysqli(). Je to jen jedno i na konci a dělá divy. Protože MySQLi sada podporuje objektovou formu, ukážeme si jak tento příklad vyřešit pomocí objektů. Samozřejmě lze všechno dělat pomocí staré sady, pouze použijete patřičné funkce. Nyní se vrhněme na připojení k databázi. Funckí set_charset nastavíme kódování, v jakém bude databáze pracovat. Je dobré nastavovat stejné kódování, v jakém je tento soubor uložen a jaké je nastaveno na naší stránce. Já jsem použil UTF-8.


<?php
   
    $db = mysqli_connect(SERVER,USER,PASS,DB);
    $db->set_charset("utf-8");
   
    if (mysqli_connect_errno()) {
        echo "Nepodařilo se připojit k databázi!";
        die();
    }
 
?>
 

Pokud se script k databázi z nějakého důvodu nepřipojí, vypíše se chybová hláška a průběh scriptu se ukončí. Nyní jsme připojeni k databázi a první co uděláme je to, že si do proměnných uložíme uživatelovu IP adresu, datum a čas. Zároveň provedeme na databázi dotaz, který nám zjistí počet IP adres, které jsou shodné s tou naší a je u ní dnešní datum.


<?php

    $ip = $_SERVER["REMOTE_ADDR"];
    $date = date("Y-m-d");
    $time = date("H:i:s");
   
    $sql = "SELECT COUNT(*) AS pocet FROM pocitadlo WHERE ip = '$ip' AND den = '$date' LIMIT 1";
    $res = $db->query($sql);
    $count = mysqli_fetch_assoc($res);
 
?>
 

Dnešní počet přístupů naší IP adresy je nyní uložen v poli $count s indexem „pocet“. Z toho jednoduše zjistíme, zda už jsme na stránce dnes byli, nebo ne. V případě že jsme tu dnes poprvé, vložíme do tabulky údaje o našem přístupu. V případě že jsme tu už byli, nic neprovedeme.


<?php

    if($count["pocet"] == 0)
    {
        $sql = "INSERT INTO pocitadlo (ip,den,cas) VALUES ('$ip','$date','$time')";
        $db->query($sql);
    }
   
?>
 

Tímto je celé počítadlo hotové. Když tento script naincludujete do každé stránky pomocí funkce include(); nebo require(); budou se vám o každém uživateli zaznamévat data. Nyní jsou data uložená, a teď si ukážeme, jak data z databáze vybrat. Pro jednoduchost příkladu pokračujeme v souboru pocitadlo.php, v běžném provozu pak bude tato část kódu jistě v jiném souboru, který nám bude počet vypisovat třeba do statistik na stránce. Samozřejmě nesmíme zapomenou se připojit k databázi a opět se odpojit.


<?php
   
    $sql = "SELECT *, COUNT(ip) AS zaden, MAX(cas) AS posledni, MIN(cas) AS prvni, DATE_FORMAT(den, '%e. %c. %Y') AS pekne_datum FROM `pocitadlo` GROUP BY den ORDER BY den DESC";
    $res = $db->query($sql);

?>
 

Tento SQL dotaz je poněkud složitější. Ve skutečnosti ale říká, vyber vše, počet IP adres, ten pojmenuj „zaden“, dále vyber datum prvního a posledního přístupu, pojmenuj je „prvni“ a „posledni“ a nakonec zformátuj datum a vyber ho jako „pekne_datum“. To celé seskupuj do skupin podle dne a seřaď výstup sestupně od nejnovějšího data po starší. Nyní si vytvoříme pole, z kterého budeme číst a vždy vypíšeme údaje do stránky:


<?php

    echo "<h1>Počítadlo přístupů</h1>";
    while($den = mysqli_fetch_assoc($res))
    {
        echo "<b>Dne: ";
        echo $den["pekne_datum"] . "</b> ";
        echo " započítáno <b>" . $den["zaden"];
        echo "</b> unikátních přístupů, první přístup v <b>" . $den["prvni"];
        echo "</b>, poslední přístup v <b>" . $den["posledni"] . "</b>
"
;
    }

?>
 

Nyní je počítadlo kompletní a nám už nezbývá nic jiného než se odpojit od databáze.


<?php
   
    $db->close();

?>
 

Samozřejmě, že nebudeme do statistiky vypisovat všechny dny. Pro výběr určitého dne by SQL dotaz mohl vypadat následovně:


<?php

    $sql = "SELECT * FROM `pocitadlo` WHERE den = '2008-04-14' ORDER BY den DESC";

?>
 

V tomto příkladu se nám zase vypíšou všechny přístupy za jeden den. Pomocí funkce mysqli_num_rows(); se dá zjistit kolik přístupů za tento den máme.

Při celém příkladu nesmíme zapomenout že databáze podporuje jeden druh formátování data a času, a to RRRR-MM-DD a HH:MM:SS, čili ve skutečnosti třeba 2008–15–01 23:12:59. To je pro dnešek vše. Příště si ukážeme, jak takovéto počítadlo udělat graficky.



Hodnocení: 6.8/10 (17 hlasováno)

Komentáře (0)
  Neregistrovaní uživatelé nemohou přidávat komentáře k článkům.