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ů.