Statistiky v PHP 2. díl – Struktura a zápis do databáze

V prvním dílu jsme si ukázali, jaké proměnné budeme používat. Dnes si tyto hodnoty zapíšeme do databáze a začneme s nimi pracovat.
Nejdříve si musíme vytvořit tabulky, do kterých budeme proměnné ukládat. Měly by vypadat asi takto (databázi nazveme třeba „statistiky“):

CREATE TABLE den (
  id int(11) NOT NULL auto_increment,
  ip text NOT NULL,
  domena text NOT NULL,
  referer text NOT NULL,
  browser text NOT NULL,
  system text NOT NULL,
  cas int(11) NOT NULL,
  pristupy int(11) DEFAULT 1 NOT NULL,
  PRIMARY KEY (id),
  KEY id (id)
);

CREATE TABLE prehled (
  id int(11) NOT NULL auto_increment,
  lidi int(11) NOT NULL,
  stranek int(11) NOT NULL,
  datum text NOT NULL,
  time int(11) NOT NULL,
  PRIMARY KEY (id),
  KEY id (id)
);

CREATE TABLE referer (
  id int(11) NOT NULL auto_increment,
  nazev text NOT NULL,
  pocet int(11) NOT NULL,
  PRIMARY KEY (id),
  KEY id (id)
);

CREATE TABLE stranky (
  id int(11) NOT NULL auto_increment,
  stranka text NOT NULL,
  zobrazeni int(11) NOT NULL,
  PRIMARY KEY (id)
);

Při každém přístupu se do každé tabulky zapíší hodnoty, které získáme při každém zobrazení jakékoliv stránky na našem serveru. Zdrojový kód, který bude pod tímto textem, doporučuji uložit do souboru jako count.php – ten potom pomocí

<?
include("count.php");
?>

můžete vložit do každého skriptu, který má být započítán, když si ho uživatel vašich stránek nechá zobrazit. Soubor count.php nebude nic vypisovat, bude sloužit k zapsání hodnot uživatele do databáze.

A zde je zdrojový kód souboru count.php:

<?
/* $stranka obsahuje nazev prave provadeneho skriptu */
$stranka=$PHP_SELF;

/* toto je skript, ktery jsme si ukazali v minulem dile - pomoci neho ziskame promenne, ktere budeme ukladat do databaze, nezapomente umazat posledni radek s vypsanim promennych! */
include("udaje.php");

/* zjistime presny cas ve vterinach */
$sek = Time();

/* zde si nadefinujeme promenne pro pristup k MySQL, pro praci na svem serveru si nezapomente udaje zmenit! */
$server = "localhost";
$login = "";
$pass = "";
$database = "statistiky";

/* pripojime se k serveru a hned potom k prave vytvorene databazi */
mysql_connect($server, $login, $pass);
mysql_select_db($database);

/* podivame se, jestli v tabulce neni stejny zaznam - nemusime ho tak znovu pridavat... */
$vysledek=mysql_query("select id, ip, domena, browser from den where ip=`$ip` and domena=`$host` and browser=`$browser` and system=`$system`");

/* promenna $pocet obsahuje pocet vybranych zaznamu z tabulky */
$pocet = mysql_num_rows($vysledek);

/* kdyz bude $refer obsahovat "Prime volani", do databaze zapiseme pouze prazdnou hodnotu  */
if ($refer=="Prime volani") {
$refer = "";
}

/* kdyz v tabulce nebude zadny zaznam o tomto uzivateli, rovnou o nem pridame zaznam */
if ($pocet=="0") {
mysql_query("insert into den values(``, `$ip`, `$host`, `$refer`, `$browser`, `$system`, `$sek`, `1`)");
}

/* ale v pripade, ze tomu bude jinak a zaznam uz v databazi bude, vybereme podle vysledku selectu id prislusneho radku a pomoci update pricteme jeden pristup k jiz existujicimu navstevnikovi a zaroven prepiseme stare datum za nove */
else {
while ($zaznam = MySQL_Fetch_Array($vysledek)):

$id = $zaznam["id"];

endwhile;
mysql_query("update den set pristupy=pristupy+1, cas=`$sek` where id=`$id`");
}



/* ted ulozime nazev a cestu ke strance, ktera byla zobrazena, nyni zjistime, jestli je v tabulce stranky obsazena prave zobrazena stranka, a nasledne ulozime do promenne $počet, kolik zaznamu jsme vlastne nasli */
$vysledek=mysql_query("select id, zobrazeni from stranky where stranka=`$stranka`");
$pocet=mysql_num_rows($vysledek);

/* kdyz v tabulce nebude zadny zaznam o aktualni strance, hned ho pridame */
if ($pocet=="0") {
mysql_query("insert into stranky values(``, `$stranka`, `1`)");
}

/* v pripade, ze zaznam bude existovat, opet vybereme jeho id a pricteme k zobrazeni hodnotu 1 */
else {
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$id = $zaznam["id"];
endwhile;
mysql_query("update stranky set zobrazeni=zobrazeni+1 where id=`$id`");
}


/* jak vidite, tyto tri skripty se vzajemne velice podobaji, je to dano tim, ze nikdy do tabulky neulozime dva stejne zaznamy */

/* touto casti skriptu ulozime adresu, ze ktere navstevnici nejvice chodi, pri vypisovani muzeme vypsat jakysi zebricek pro nas nejlepsich stranek, ze kterych uzivatele prisli*/
$vysledek=mysql_query("select * from referer where nazev=`$refer`");
$pocet=mysql_num_rows($vysledek);

if ($pocet=="0") {
mysql_query("insert into referer values(``, `$refer`, `1`)");
}
else {
while ($zaznam = MySQL_Fetch_Array($vysledek)):
$id = $zaznam["id"];
endwhile;
mysql_query("update referer set pocet=pocet+1 where id=`$id`");
}
?>

Po zapsání do databáze budou po několika reloadech skriptu tabulky vypadat přibližně takto:

Tabulka den:

id ip domena Referrer browser system cas pristupy
1 127.0.0.1 localhost http://localhost/statistiky MSIE Windows 982162623 14

Tabulka referer:

id Nazev pocet
1 http://localhost/statistiky 14

Tabulka stranky:

id Stranka zobrazeni
1 /statistiky/count.php 14

To by bylo k zapsání do databáze všechno. Určitě jste si všimli, že tabulka prehled zůstala prázdná, o ní si totiž řekneme až příště.

Diskuze (7) Další článek: Kdy bude skutečně uveden VIA Samuel 2?

Témata článku: Software, PHP, Programování, Statistika, Nota, Browser, Login, NAS Server, Select, Prime, Str, Díl, Elsa, Zápis, Pass, Databáze, Struktura


Určitě si přečtěte

Wi-Fi 6 konečně začíná dostávat smysl. Poradíme, jak ji využít

Wi-Fi 6 konečně začíná dostávat smysl. Poradíme, jak ji využít

** Na trh míří první levné Wi-Fi 6 routery ** Nabídka zařízení, zejména notebooků, každý den roste ** Poradíme, jak nejlépe přejít s domácností na Wi-Fi 6

Tomáš Holčík | 28

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

** Mapy.cz neslouží jen k zobrazení podkladů a plánování tras ** Nabízejí celou řadu dalších praktických funkcí a možností ** Vybrali jsme třináct tipů a triků, o kterých možná nevíte

Karel Kilián | 36

Google dosáhl revolučního milníku v kvantové nadvládě. IBM ale nesouhlasí

Google dosáhl revolučního milníku v kvantové nadvládě. IBM ale nesouhlasí

** Google představil nový kvantový čip s 53 qubity ** Oznámil, že díky němu lidstvo poprvé dosáhlo kvantové nadvlády ** IBM toto tvrzení zlehčuje

Karel Javůrek | 15

Nejlepší notebooky do 10 000 korun: Co koupit a čemu se raději vyhnout

Nejlepší notebooky do 10 000 korun: Co koupit a čemu se raději vyhnout

** Do deseti tisíc korun lze dnes koupit slušné notebooky ** V nabídce ale i tak převládají zastaralé a pomalé modely ** Poradíme, jak dobře vybrat i s omezeným rozpočtem

David Polesný | 103

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 6

10 mýtů a polopravd o bateriích, kterým možná ještě věříte

10 mýtů a polopravd o bateriích, kterým možná ještě věříte

** Kolem baterií a akumulátorů koluje řada mýtů, nepravd a polopravd ** Dnes vám devět z nich zkusíme vyvrátit na základě faktů ** Většina z nich totiž neplatí pro moderní lithiové baterie

Karel Kilián, David Polesný | 99


Aktuální číslo časopisu Computer

Megatest: 20 powerbank s USB-C

Test: mobily do 3 500 Kč

Radíme s výběrem routeru

Tipy na nejlepší vánoční dárky