20 prosince 2012

Seriál o PHP a MySQL 1. díl - Dynamické stránky v PHP


No bezva. První díl a já už se ztrácím. Co to je "dynamická stránka"?


Stránku označujeme za dynamickou, pokud se její obsah mění, například na základě akcí uživatele, ale i dalších událostí (plynutí času apod.). Příklady najdeme všude, kam se podíváme ...
  • E-shop - výpis zboží lze třídit podle kategorií, ceny, názvu, a bůhví čeho ještě. Obsah stránky se tak mění podle toho, jak si to uživatel přeje.
  • Facebook - ten je někdy dynamický až moc :) Každý uživatel vidí stránky uzpůsobené přímo pro něj: výpis přátel a jejich aktivit, cílené reklamy, různá hejblátka a zatržítka, kterými může obsah stránek měnit.
  • E-mailový klient, ve kterém můžete své zprávy nejen psát a číst, ale i mazat, třídit, archivovat, přiřazovat různé štítky, cítit se trapně, když najdete rok starou zprávu... (no dobře, to už nemá tolik společného s dynamikou stránek)

Dobře, snad chápu. Jen pro pořádek - jak říkáme stránkám, co se nijak nemění?

Pokud se obsah nemění a zůstává v podobě, v jaké ho autor vytvořil, mluvíme o stránce statické. Poslední dobou už je to spíše vzácnost a i ty nejjednodušší stránky mají nějaký dynamický prvek. 
Pozor - když si na statickou stránku přidáš animovaný obrázek tančícího Santa Clause nebo nějakou jinou hrůzu, ještě to neznamená, že jsi vytvořil stránku dynamickou.

Nepleť mi hlavu Santa Clausem a řekni mi radši, jak to celé funguje

Dobře. Předem podotýkám, že to budu vysvětlovat hodně zjednodušeně. Časem zabrousíme do větších podrobností, ale nechci ti zbytečně motat hlavu hned ze začátku.
Takže, na jakém principu vlastně funguje zobrazování webových stránek:
  1. Struktura a obsah stránky je definovaná pomocí HTML kódu
  2. Pokud v prohlížeči (Internet explorer, Firefox, Chrome ...) zadáme adresu stránky, webový server nám vrátí právě HTML kód
  3. Prohlížeč tomuto kódu rozumí a umí podle něj stránku vykreslit
pozn. Prohlížeč je v tomto vztahu tzv. "klient", tedy zjednodušeně ten, co něco chce. Naopak "server" je ten, co něco poskytuje

Takže zpracování statické stránky asi bude jednodušší, viď? 

Vlastně ano. U statických stránek je HTML kód uložen v nějakém souboru (nejčastěji má příponu .html nebo .htm) a server prostě klientovi vrátí obsah tohoto souboru


A u dynamických je to jak?

Dynamický obsah stránek zajišťují skriptovací jazyky. Jak název tohoto seriálu dost napovídá, budeme se věnovat jazyku PHP. Další, se kterými by ses mohl setkat jsou např. Ruby, ASP.NET, Java a řada dalších.
Jak jsem uvedl výše (body 1 až 3), prohlížeč rozumí pouze HTML kódu. Kdyby dostal PHP kód, moc velkou radost by z toho neměl. Resp. jemu by to bylo jedno, ale uživatel by asi docela koukal.
Proto musí server nejprve PHP kód zpracovat a vygenerovat opět pouze HTML.
Ke klientovi se ze serveru dostává vždy pouze HTML

Takže to PHP se zpracovává už na serveru. Existuje i nějaký skriptovací jazyk, který pracuje na straně klienta?

Ano, jmenuje se Javascript a určitě se s ním ještě často setkáme. Teď se s ním ale zbytečně netrap. Nejdůležitější je, jak jsi spávně podotkl (a já to raději ještě zdůrazním), že

PHP se zpracovává na serveru

Prima, budu na to myslet. Přece jen jsi k tomu dal ten vykřičník a tak ...

Je to opravdu důležité, jak ostatně uvidíš i v následujícím příkladě.

Příklad? Bezva, zrovna jsem tě chtěl o nějaký poprosit

Nebude to zatím žádný konkrétní návod nebo cvičení. Jelikož zatím nemáme nastavený server s PHP a ani neznáme syntaxi jazyka, budeme se o tom bavit stále v teoretické rovině.

Nejprve si demonstrujeme statickou stránku
Dejme tomu, že si vytvoříš soubor "stranka.html" a do něj napíšeš:
<strong>Dobrý den</strong>
Když ho otevřeš v prohlížeči, zobrazí se ti tučný nápis "Dobrý den". Jak jsem říkal, prohlížeč rozumí HTML a tak vše mezi značkami "strong" převedl na tučný text.
To samé bys viděl, pokud bys soubor nahrál na server a zadal bys adresu stránky. Klient (prohlížeč) by dostal naprosto stejný kód.

Teď něco dynamického
Představ si, že vytvoříš soubor "stranka.php" a do něj napíšeš PHP kód, který by dělal třeba toto:
Pokud je aktuální čas menší než 12:00, vypiš "Dobré ráno",jinak vypiš "Dobré odpoledne".Vygeneruj náhodné číslo od 1 do 100
(Znovu pro jistotu opakuji, že toto není opravdový PHP kód, protože zatím nevíme, jak se píše. V příštím díle to už ale napravíme).
Takový soubor v prohlížeči jen tak neotevřeš. Respektive otevřeš, ale viděl by si opět jen svůj kód tak, jak jsi ho napsal. A to není přesně co chceme.
Nahrajeme ho tedy na server (vím, že se budu opakovat, ale ... PHP se zpracovává na serveru), zadáme jeho adresu a v prohlížeči uvidíme třeba:
Dobré ráno
42
Kdybys stránku v prohlížeči obnovoval, byla by (téměř) vždy jiná - změnilo by se náhodné číslo a v závislosti na čase možná i pozdrav. Chovala by se tedy dynamicky. Přesto, že byla definována pouze jedním souborem, měla by mnoho různých podob.
Navíc, pokud by sis zobrazil její zdrojový kód, neviděl bys PHP, ale vždy pouze vygenerované HTML, které klient obdržel od serveru.

Myslím, že tomu rozumím

To jsem rád. Mohl by jsi mi tedy říct, jaký by měla naše dynamická stránka hlavní nedostatek? 

Nedostatek? Ty mi ukážeš první příklad a hned má nějaký nedostatek? Co jsem taky mohl čekat za ty peníze, že jo ... 

Neboj, udělal jsem to schválně.  Napovím ti, že to souvisí s tím, co jsem ti několikrát zdůrazňoval.

Už vím! Říkal jsi, že PHP se zpracovává na serveru. Takže i ten aktuální čas se vyhodnocuje podle serveru, ne podle klienta

Přesně tak. Server neví, jaký čas je u klienta. Zná jenom svůj vlastní. Uživatel z druhého konce světa by se asi celkem divil, kdybys mu přál dobré ráno, zatímco on už se dívá na večerní zprávy.
(info)Logicky by tedy bylo lepší vyhodnocovat čas až na straně klienta, což umožňuje právě jazyk Javascript.

Pro dnešek máš myslím informací dost. V dalším díle si již napíšeme a spustíme skutečný PHP kód.
Je potřeba, aby sis předtím připravil vlastní server s PHP. Neboj, je to otázka pár minut a vůbec nic tě to nebude stát. Navíc tě provedu krok za krokem v připravovaném návodu.

Shrnutí


  • Statická stránka zobrazuje vždy stejný obsah. Je definována v HTML dokumentu, jehož obsah je doručen v nezměněné podobě
  • Dynamická stránka má obsah generovaný na základě akcí uživatele či jiných událostí. Generování zajišťuje skriptovací jazyk, který může běžet jak na straně serveru, tak klienta
  • Klient dostává ze serveru vždy HTML kód
  • PHP skripty jsou zpracovávány na straně serveru


Jakékoliv dotazy a připomínky prosím pište do diskuse. Budu za ně vděčný :)

Žádné komentáře:

Okomentovat