PHP – 37. díl – návštěvní kniha I.

37. díl seriálu o PHP bude věnován praktickému příkladu – vytvoření návštěvní knihy.

Úvod

Dnes si dáme praktický příklad k využití databází. I když pro začátek bude jenom velmi jednoduchý, a to návštěvní kniha.

Návštěvní kniha umožňuje každému návštěvníkovi naší stránky pro nás zanechat jakoukoli zprávu, či vzkaz.

Databázová struktura návštěvní knihy

Nejdříve si vytvoříme databázovou strukturu návštěvní knihy. V podstatě takto bychom měli postupovat u každé úlohy a každého projektu. Tedy tak, že začneme databázovou strukturou. Tu bychom měli navrhovat velice pečlivě, protože změny v databázové struktuře se později dělají jen velmi nesnadno.

Začneme tím, že umístíme návštěvní knihu do nějaké databáze. Pokud chcete umístit návštěvní knihu přímo naostro na váš hosting, tak na výběr nejspíše nemáte, a název databáze máte přidělený od providera. Pokud budete zkoušet na lokálním počítači, nejspíše na intranetovém serveru ze 2. dílu, potom použijeme databázi s názvem pokus, kterou jsme již dříve založili.

Pokud tedy nemáte založenou databázi pokus, založte ji nyní, ať pomocí řádkového klienta (viz 26. díl), nebo pomocí phpMyAdmin (viz 32. díl). V případě, že budete zadávat přímo SQL příkazy, pak databázi pokus vytvoříte pomocí příkazu:

CREATE DATABASE pokus;

Pro návštěvní knihu nám bude stačit jedna databázová tabulka. Nazveme ji book, a umístíme do databáze pokus. SQL příkaz pro vytvoření tabulky book bude následující:

CREATE TABLE book
(
  book_id int unsigned not null auto_increment,
  write_time datetime not null,
  name varchar(30) not null,
  mail text,
  message text not null,
  primary key (book_id)
);

Význam jednotlivých sloupců je následující:

  • book_id – pořadové číslo zápisu do návštěvní knihy. Bude sloužit jako primární klíč, tedy jako jednoznačná hodnota k určení řádku v databázové tabulce.
  • write_time – datum a čas zápisu do návštěvní knihy. Zde bude uloženo kdy vlastně zápis proběhl, aby to bylo možné v knize zobrazit.
  • name – jméno, případně příjmení toho, kdo zapisuje do návštěvní knihy. Většina návštěvníků dá asi přednost tomu psát pod nějakou přezdívkou, to nám ale nevadí. Prostě co bude v kolonce name, to se zobrazí jako jméno.
  • mail – nepovinná mailová adresa toho, kdo nám píše zápis do knihy. Mailová adresa má význam v případě, že návštěvník žádá, abychom mu napsali na jeho soukromý mail.
  • message – Zde je uložená vlastní zpráva.

Databázová tabulka book tedy obsahuje naprosto všechno, co potřebujeme k uložení zpráv do návštěvní knihy.

Formulář na zadávání zpráv do návštěvní knihy

Pro zadávání zpráv je potřeba vytvořit formulář na zadávání. Samotný princip formuláře na zadávání je v podstatě velmi jednoduchý a může vypadat třeba nějak takto:

<form name="book" action="book_write.php" method="post">
<b>Jméno:</b><br>
<input name="name" size="40"><br>
<br>
<b>Mail:</b><br>
<input name="mail" size="40"><br>
<br>
<b>Zpráva:</b><br>
<textarea name="message" rows="5" cols="30"></textarea><br>
<br>
<input type="submit" value="Odeslat zprávu">
</form>

Tento formulář strčíme do stránky, která sdělí návštěvníkovi to podstatné, vychválí návštěvní knihu, případně poděkuje za všechny vzkazy, apod.

Samotný formulář má jenom tři pole – jméno, mail a zprávu. Z toho mail je nepovinná položka, zatímco jméno a zpráva jsou povinné položky. Proto můžeme zavést i JavaScript, který nám zkontroluje, zda jsou obě povinné položky vyplněné:

<script type="text/javascript" language="JavaScript"><!--
function book_test()
{
  var f = self.document.forms.book;
  if (f.name.value.length <= 0)
  {
    alert("Chybí jméno!");
    return false;
  }
  if (f.message.value.length <= 0)
  {
    alert("Chybí zpráva!");
    return false;
  }
  return true;
}
// -->
</script>
<form name="book" action="book_write.php" method="post" onsubmit="return book_test();">
<b>Jméno:</b><br>
<input name="name" size="40"><br>
<br>
<b>Mail:</b><br>
<input name="mail" size="40"><br>
<br>
<b>Zpráva:</b><br>
<textarea name="message" rows="5" cols="30"></textarea><br>
<br>
<input type="submit" value="Odeslat zprávu">
</form>

PHP skript na zapsání nové zprávy

Pokud návštěvník na stránce vyplní políčka ve formuláři a dá odeslat, čímž sděluje, že chce, aby se jeho zpráva přidala k návštěvní knize, pak se předá řízení skriptu s názvem book_write.php. Metodou POST se předají parametry zprávy a my se můžeme věnovat přidání zprávy do tabulky book.

Zprávy můžeme přidat třeba takovýmto skriptem:

<html>
<head>
<title>Zápis do návštěvní knihy</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</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.`);
}
$name = $_POST[`name`];
$mail = $_POST[`mail`];
$message = $_POST[`message`];
$sql = "INSERT INTO book(write_time,name,mail,message)"
." VALUES(NOW(),"
."`".mysql_escape_string($name)."`,"
."`".mysql_escape_string($mail)."`,"
."`".mysql_escape_string($message)."`)"
;
$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
{
  echo mysql_errno($id_spojeni),`: `,mysql_error($id_spojeni),`<br>`;
  die(`Nepodařil se SQL příkaz.`);
}
echo `Zpráva je zapsána`;
mysql_close($id_spojeni);
?>
</body>
</html>

Výše uvedený skript je samozřejmě velmi jednoduchý a ve skutečném skriptu by bylo asi trochu více grafiky a HTML. Přesto náš skript obsahuje vše potřebné, co je nutné k zapsání zprávy do tabulky book.

Příště dokončíme zobrazení návštěvní knihy.

Diskuze (11) Další článek: Pozor na vysoce kritické chyby v QuickTime

Témata článku: , , , , , , , , , , , , ,