PHP – 38. díl – návštěvní kniha II.

V dnešním pokračování oblíbeného seriálu o programování v PHP se budeme podruhé věnovat vytvoření jednoduché návštěvní knihy.

Úvod

Dnes dokončíme programování návštěvní knihy jakožto praktického příkladu.

PHP skript na zobrazení záznamů v návštěvní knize

Teď se podíváme na skript, který zobrazuje záznamy v návštěvní knize. Skript je trochu složitější, a bude chtít asi trochu vysvětlení:

<html>
<head>
<title>Návštěvní kniha</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<style type="text/css"><!--
.nk-1 { background-color:#FFE384; }
.nk-2 { background-color:#FFFFFF; }
--></style>
</head>
<body>
<?php
$id_spojeni = mysql_connect(`localhost`,`root`,``);
if (!$id_spojeni)
  die(`Spojení s MySQL databází se nezdařilo.`);
$vysledek_zvoleni_db = mysql_select_db(`pokus`,$id_spojeni);
if (!$vysledek_zvoleni_db)
{
  echo mysql_errno($id_spojeni),`: `,mysql_error($id_spojeni),`<br>`;
  die(`Nepodařilo se vybrat databázi pokus.`);
}
$sql =
"SELECT "
."DATE_FORMAT(write_time,`%e.%c.%Y %H:%I:%S`) AS write_time,"
."name,"
."IFNULL(mail,``) AS mail,"
."message "
."FROM book "
."ORDER BY write_time DESC"
;
$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
{
  echo mysql_errno($id_spojeni),`: `,mysql_error($id_spojeni),`<br>`;
  die(`Nepodařilo se vykonat SQL dotaz.`);
}
?>
<table width="100%">
<?php
while(is_array($data = mysql_fetch_array($id_vysledku)))
{
  $write_time = $data[`write_time`];
  $name = $data[`name`];
  $mail = $data[`mail`];
  $message = $data[`message`];
  echo `<tr class="nk-1">`;
  echo `<td><b>Autor: </b>`;
  if (strlen($mail) > 0)
    echo `<a href="mailto:`,htmlspecialchars($mail),`">`,htmlspecialchars($name),`</a>`;
  else
    echo htmlspecialchars($name);
  echo `; <b>Datum: </b>`,$write_time;
  echo `</td>`;
  echo `</tr>`;
  echo `<tr class="nk-2">`;
  echo `<td>`;
  echo htmlspecialchars($message);
  echo `</td>`;
  echo `</tr>`;
}
?>
</table>
<?php
mysql_free_result($id_vysledku);
mysql_close($id_spojeni);
?>
</body>
</html>

Začátek skriptu je standardní a to nejdříve se připojíme k databázi pomocí funkce mysql_connect a vybereme pomocí funkce mysql_select_db databázi pokus. To už jsme dělali mnohokrát předtím. Potom si připravíme SQL dotaz. Ten je tentokrát trochu složitější a tak si zaslouží vysvětlení:

SELECT DATE_FORMAT(write_time,`%e.%c.%Y %H:%I:%S`) AS write_time, name, IFNULL(mail,``) AS mail message FROM book ORDER BY write_time DESC

Základem tohoto trochu složitějšího SQL dotazu je myšlenka, že pokud databáze za nás může udělat nějakou práci, nechť ji udělá.

Proto využijeme možnosti databáze MySQL a necháme si vrátit položku write_time přesně ve formátu, v jakém jí chceme vypsat. K tomu slouží funkce DATE_FORMAT použitá přímo uvnitř SQL příkazu. Funkce DATE_FORMAT má dva parametry. Prvním parametrem je nějaká datumová položka, druhým parametrem je formátovací řetězec, kterým ovlivňuje tvar, v jakém bude datum vypsán. V následující tabulce jsou popsány významy formátovacích znaků použitých v našem SQL dotazu. Podrobnější popis všech formátovacích znaků přinesu v dalších dílech:

 Formát   Popis
 %e  číslo dne v měsíci (0 až 31)
 %c  číslo měsíce (1 až 12)
 %Y  čtyřmístné číslo roku
 %H  dvouciferné číslo hodiny (00 až 23)
 %I  dvouciferné číslo minuty (00 až 59) 
 %S  dvouciferné číslo sekund (00 až 59) 

Další použitou funkcí v SQL dotazu je funkce IFNULL, která testuje výraz na hodnotu NULL, a pokud má výraz takovou hodnotu, nahradí jej hodnotou předanou jako druhý parametr. Protože položka mail může dosahovat hodnoty NULL, pro lepší manipulaci s ní použijeme funkci IFNULL, která nahradí její hodnotu prázdným řetězcem, pokud narazí na NULL hodnotu.

Další novinkou je klauzule AS použitá v příkazu SELECT. Klauzule AS umožňuje pojmenovat výraz nějakým názvem. Hodí se tehdy, když chceme přejmenovat sloupec ve výsledku, nebo pro pojmenování výrazu.

Celkem standardní už je klauzule ORDER BY, která nám umožní seřadit záznamy v návštěvní knize podle času zápisu od nejnovějšího k nejstaršímu.

Nyní máme k dispozici vše, co potřebujeme pro návštěvní knihu. Máme k dispozici skript, který vypisuje záznamy v návštěvní knize, dále máme formulář pro zadávání dalšího zápisu do návštěvní knihy a skript, který další zápis do návštěvní knihy přidává. Teď už je to jenom otázka, jak tyto 3 části uspořádáme.

Asi nejlogičtější je, připojit formulář na zadávání dalšího zápisu do návštěvní knihy buď na začátek, nebo na konec výpisu záznamů v návštěvní knize. Bude tak možné prohlížet záznamy v návštěvní knize, a pokud návštěvník ucítí potřebu připojit svůj zápis, má možnost to rovnou udělat. Skript, který ukládá další zápis by pak měl po své funkci rovnou vypsat návštěvy v návštěvní knize, tedy přesměrovat URL adresu přímo na výpis záznamů.

Diskuze (6) Další článek: Nová služba na sledování pozice stránek ve vyhledávačích

Témata článku: Software, Programování, PHP, Kniha, Díl, Order, Message, Echo, Nejstarší typ, Zeus


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

AMD uvádí grafické karty Radeon RX 6800, 6800 XT a 6900 XT. Útočí přímo na modely od Nvidie

AMD uvádí grafické karty Radeon RX 6800, 6800 XT a 6900 XT. Útočí přímo na modely od Nvidie

** AMD představilo tři nové grafické karty ** Všechny s architekturou RDNA2, kterou používají i PS5 a Xbox Series ** Karty útočí přímo na GeForce RTX 3000

Karel Javůrek | 78

Karel Javůrek
Radeon RX 6000Grafické kartyAMD
Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

Fedora 33 prostě funguje. Linux si zaslouží dobýt laptop, je to ale asi opět marné

** Desktopový Linux funguje a vypadá stále lépe ** Fedora 33 není výjimkou ** Ve stínu Windows a macOS tu vyrostly skvělé alternativy

Jakub Čížek | 162

Jakub Čížek
FedoraOperační systémyLinux
Google spouští vlastní VPN a konkurenci se to vůbec nelíbí
Lukáš Václavík
SoukromíVPNGoogle
Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

** Obtěžují vás neustálé dotazy webů, zda chcete zobrazovat oznámení? ** Můžete je zakázat, a to jak kompletně, tak i pro jednotlivé stránky ** Připravili jsme návody pro Chrome, Firefox, Edge a Operu

Karel Kilián | 11

Karel Kilián
Jak na InternetTipyProhlížeče
Google vymyslel technologii superpřesného GPS. Už ji podporuje Pixel 5 a dorazí i na ostatní telefony

Google vymyslel technologii superpřesného GPS. Už ji podporuje Pixel 5 a dorazí i na ostatní telefony

** Kvalita GPS ve městech občas stojí za starou bačkoru ** Mohou za to odrazy signálu od okolních budov ** Google má jejich 3D model, a tak spolupracuje s výrobci GPS čipů

Jakub Čížek | 41

Jakub Čížek
NavigaceTechnologieGoogle
Starlink podle betatesterů: Rychlejší a levnější než satelitní internet v Česku

Starlink podle betatesterů: Rychlejší a levnější než satelitní internet v Česku

** Reddit se začíná plnit zkušenostmi se Starlinkem ** Při přímé viditelnosti dá i 120 Mb/s ** Klasický satelitní internet už teď dalece překonává

Jakub Čížek | 48

Jakub Čížek
StarlinkPoskytovatelé internetu
Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

** Uspořádání kabelů můžete vnímat i jako podivný druh umění ** To nejkrásnější se skrývá v datacentrech a serverovnách ** Podívejte se na skutečné „cableporn“ z optiky i kroucené dvojlinky

Vojtěch Malý | 52

Vojtěch Malý
DatacentraServery
CZ.NIC bezplatně naděluje USB/NFC klíče. Jak jej získat?
Lukáš Václavík
CZ.NICeGovernment

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5