6.18. Programování serverových databází - PHP 2

6.18.1. Opakování

Výběr funkcí pro napojení MySQL:

1 Stáhněte si přes FTP z fileserveru pomocí účtu anonym soubor php02.zip a extrahujte jej tak, aby rozbalený soubor byl ve složce c:\temp\php02 FileZilla
2 Editujte v PSPadu soubor c:\temp\php02\kniha_navstev.sql a prověřte existenci příkazů pro vytvoření tabulky a vložení řádků PSPad
3 Spusťte z řídícího panelu XAMPP servery Apache a MySQL XAMPP
4 Spusťte phpMyAdmin tlačítkem Admin nebo zadáním adresy localhost/phpmyadmin v www prohlížeči XAMPP, prohlížeč
5 Vytvořte v phpMyAdmin novou databázi jprijmeni_php02 s porovnáváním  utf8_czech_ci, kde jprijmeni nahraďte svým prvním písmenem ze jména a příjmením bez diakritiky phpMyAdmin
6 Nastavte novou databázi jako aktuální a importujte soubor c:\temp\php02\kniha_navstev.sql do nově vytvořené databáze pomocí záložky Import a proveďte kontrolu načtení dat phpMyAdmin

6.18.2. HTML formuláře

Projekt kniha návštěv

7 Nastavte v PSPadu kódování UTF-8 (Formát - Kódování) a otevřte nový HTML5 dokument (Soubor-Nový-Podle šablony-HTML5)
8 Mezi značky <title></title> napište "Jméno Příjmení - Kniha návštěv"
9 Za <body> napište nadpis (do značek h1) "Kniha návštěv"
10 Dokument uložte jako c:\Programy\xampp\htdocs\jprijmeni_kniha.php a ověřte jeho vzhled v prohlížeči na adrese localhost/jprijmeni_kniha.php

Vlastní formulář:

11 Přidejte v dokumentu jprijmeni_kniha.php za nadpis obálku formuláře:
<form name="kniha" action="jprijmeni_kniha.php" method="get">
</form>
12 Do značek formuláře přidejte tabulku s poli (místo "x" a "y" doplňte maximální počty znaků ze struktury tabulky):
<table width="100%">
<tr>
<td>Jméno:</td><td><input name="jmeno" size="30" maxlength="x"></td>
</tr><tr>
<td>Mail:</td><td><input name="email" size="50" maxlength="y"></td>
</tr><tr>
<td>Zpráva:</td><td><textarea name="zprava" rows="5" cols="60"></textarea></td>
</tr></table>
13 Před značku ukončení formuláře přidejte odesílací tlačítko:
<input type="submit" value="Odeslat a uložit zprávu">
14 Uložte dokument a otestujte v prohlížeči funkčnost formuláře (zápis do polí) a odesílacího tlačítka (musí se zobrazovat stejná stránka). Všimněte si po odeslání adresního řádku - obsahuje data z polí.

6.18.3. Formuláře a PHP

První průchod a ošetření prázdných polí

15 Vložte za formulář kód: 
<?php if (isset($_REQUEST['zprava'])) { echo '<p>Další spuštění</p>'; /**/} else { echo '<p>První spuštění</p>'; } ?>
- - ověřte syntaxi (Ctrl+F9) a v prohlížeči pravdivost hlášení (sledujte také adresní řádek - zkuste smazat z adresy řetězec za otazníkem)
16 V předchozím příkazu přidejte do části prováděné při dalším spuštění (před /**/) kód:
if ($_REQUEST['zprava']=='') { echo '<p>Chyba: nebyla zadána zpráva!</p>'; exit(); }
- -
ověřte v prohlížeči pravdivost hlášení
17 Podobně přidejte kontrolu pro pole jmeno a email

Vkládání hodnot do polí

18 Přidejte k inputu pro email parametr value="jmeno.prijmeni@domena.cz" a po uložení vyzkoušejte zobrazení předvyplněné hodnoty ve formuláři
19 Přidejte k inputu pro jmeno parametr value="<?php if (isset($_REQUEST['jmeno'])) echo $_REQUEST['jmeno']; ?>"
a po uložení vyzkoušejte zobrazení vyplněné hodnoty po odeslání formuláře
20 Podobně upravte input pro email

Ošetření vkládání HTML značek

21 Zapište do pole jmeno ">Vložený text<b a odešlete formulář - sledujte změnu vzhledu formuláře - zobrazte si zdroj (Ctrl+u)
22 Přidejte u inputů jmeno a email funkci htmlspecialchars - např. místo
echo $_REQUEST['jmeno'];
vložte:
echo htmlspecialchars($_REQUEST['jmeno']);
- ověřte znovu odeslání formuláře s hodnotou z předchozího zadání

6.18.4. Napojení na databázi MySQL

Napojení na MySQL

23 Přidejte do php části prováděné při dalším spuštění (za kontrolu polí a před /**/) kód pro připojení k MySQL databázi jprijmeni_php02
$pripojeni = mysqli_connect("localhost", "root", "", "jprijmeni_php02");
//kontrola chyby
if (mysqli_connect_errno()) {
echo "Spojení selhalo: ".htmlspecialchars(mysqli_connect_error(), ENT_QUOTES);
exit(); }  else echo "<p>Připojení k MySQL proběhlo úspěšně.</p>";
//odpojeni
mysqli_close($pripojeni);
24 Ověřte syntaxi (Ctrl+F9), uložte dokument a otestujte

Uložení návštěvy z odeslaného formuláře do databáze

25 Přidejte do části prováděné při dalším spuštění (před //odpojeni) kód pro přípravu SQL dotazu:
// Vytvoření SQL příkazu typu INSERT
$sql_prikaz =
"INSERT INTO kniha_navstev (jmeno,email,zprava) "
."VALUES('"
.mysqli_real_escape_string($pripojeni,$_REQUEST['jmeno'])
."','"
.mysqli_real_escape_string($pripojeni,$_REQUEST['email'])
."','"
.mysqli_real_escape_string($pripojeni,$_REQUEST['zprava'])
."')";
echo "<p>Prováděný SQL příkaz: ".$sql_prikaz."</p>";
 
26 Ověřte syntaxi (Ctrl+F9), uložte dokument a otestujte  
27 Přidejte před //odpojeni kód pro uložení zprávy a ošetření chyby:
mysqli_query($pripojeni, $sql_prikaz);
//kontrola chyby
if (mysqli_errno($pripojeni)) {
echo "Chyba - INSERT nebyl proveden: ".htmlspecialchars(mysqli_error($pripojeni), ENT_QUOTES);
exit(); } else echo "<p>Nová zpráva byla uložena</p>";
28 Ověřte syntaxi (Ctrl+F9), uložte dokument a přidejte přes prohlížeč alespoň 3 zprávy - ověřte jejich uložení do databáze v phpMyAdminu

Výpis návštěv

29 Doplňte místo tří teček SQL příkaz pro výpis všech sloupců a řádků tabulky kniha_navstev:
$sql_prikaz = "...";
30 Přidejte kód pro výpis výsledků dotazu:
echo "<p>Nejčerstvější zprávy:</p>";
$vysledek = mysqli_query($pripojeni, $sql_prikaz);
if (mysqli_errno($pripojeni)) {
echo "Chyba - příkaz select nebyl proveden: ".htmlspecialchars(mysqli_error($pripojeni), ENT_QUOTES);
exit(); }
while ($radek = mysqli_fetch_array($vysledek)) { /*vraci pole hodnot radku*/
echo '<hr><p>Datum: '.$radek['datum'].'<br>Napsal: '.$radek['jmeno'].' ('.$radek['email'].')<br>'
.'Zpráva: '.$radek['zprava'].'</p>';
}
mysqli_free_result($vysledek);
31 Ověřte syntaxi (Ctrl+F9), uložte dokument, ověřte uložení zprávy a jejich výpis přes prohlížeč

Závěrečné úkoly:

32 Upravte SQL dotaz tak, aby byl výpis řazený od nejnovějších zpráv po nejstarší a aby se ve výpisu zobrazovaly jen poslední 3 zprávy - otestujte
33 Upravte kód tak, aby se zprávy vypisovaly v HTML tabulce <table>...</table> se sloupci datum, jmeno, email, zprava

Ukončení práce:

34 Poslední výpis v prohlížeči uložte jako kniha.htm
35 Oba soubory c:\Programy\xampp\htdocs\jprijmeni_kniha.php + kniha.htm uložte na fileserver do nově očíslované složky