PHP Úvod do programování Kontaktní údaje: Ing. Antonín Skopec skopec@sks.cz
Přehled Seznámení se s programováním dynamicky generovaných webových stránek Jazyk PHP - princip, syntaxe, typy, konstanty a proměnné, základní operátory a příkazy, implementované funkce Obsluha formulářů a jeho prvků Práce se soubory a složkami Odesílání emailu ze skriptu PHP, HTTP hlavičky Databázový server MySQL + správa dat v databázi Spolupráce PHP s MySQL serverem Praktické příklady Práce na zvoleném projektu + závěrečná prezentace
Podmínky zápočtu/zkoušky Seminární práce 75 bodů prototyp 25 bodů aplikace 50 bodů Průběžné hodnocení a prezentace 25 bodů CELKEM 100 BODŮ minimálně polovina z každé části prototyp, aplikace, prezentace
Seminární práce, hodnocení Vytvoření prototypu WWW aplikace (25) návrh, e-mailem nebo na papíře (10) návrh HTML stránky dle schváleného zadání (15) Vytvoření aplikace (50) návrh databáze (10) Přihlašování, formulář s validací, administrace (10) Dynamický obsah (10) RSS výstup (10) Dokumentace (10) Za každý započatý týden zpoždění oproti stanovenému termínu -5 bodů!
WWW aplikace Vyberte si, jakou aplikaci chcete dělat. Musí obsahovat: databázi, minimálně jedna vazba 1:N přihlašování uživatelů administrační rozhraní pro databázi, formuláře RSS výstup
Příklady WWW aplikace Databáze článků (časopis/vydání/článek) Psi z útulku (útulky/lidé/psi) Vhodné dárky (příležitosti/dárky/obchody) Seznam www/obchodů (Kategorie/region/obchod) vlastní návrh Aplikaci navrhněte jednoduchou, práce bude hodně!
Termíny PROTOTYP do 30.10. 2014 pošlete návrh své aplikace, rozsah A4 textu do 20.11. 2014 pošlete e-mailem odkaz a soubory v zip APLIKACE do 18.1. 2015, odevzdat aplikaci napsat dokumentaci e-mailem poslat odkaz na aplikaci online a zdrojový kód v zip ve zkouškovém období se dostavit k zápočtu Pracujte na úkolu průběžně, nejlépe o cvičeních k tomu určených!
Odkazy www.php.net - oficiální stránky PHP www.pcsvet.cz/php - programování v PHP php.interval.cz - základy PHP php.vrana.cz www.kosek.cz www.jakpsatweb.cz - kurz jazyka HTML a CSS
Založení webu (příklad) http://www.webzdarma.cz Registrace a provoz domény zdarma Minimální zobrazování reklam Podpora jazyka PHP a databáze MySQL Správa databáze pomocí prostředku phpMyAdmin Možnost odesílat e-mail pomocí PHP skriptu Možnost uploadu stránek na server pomocí FTP protokolu
Doporučený editor PSPad Freeware editor webových stránek Domovská stránka: http://www.pspad.com/cz
Historie PHP je skriptovací jazyk na straně serveru 1994 – Rasmus Lerdorf vytvořil kombinaci skriptů v Perlu pro sledování přístupu na vlastní web stránku, požadavky na zlepšení →„Personal Home Page tools“ později „Personal Home Page Construction Kit“ 1995 – PHP/FI 2.0 : skriptovací jádro + analýza vstupu z formulářů + obsluha sql serveru 1997 - PHP 3.0: vytvořili Andi Gutmans a Zeev Suraski. Původní zkratka dostává nový význam →„ PHP: Hypertext Preprocessor“
Historie 2000 – PHP 4.0 : podpora pro mnoho WWW serverů, HTTP sessions, buffering výstupu, bezpečnější způsoby zpracování vstupů uživatele a nové jazykové konstrukty 2004 – PHP 5.0 : podpora objektově orientovaného programování
Proč PHP ANO? Získávání dat z formulářů a práce s těmito daty Dynamické generování stránek na základě získaných dat Široká spolupráce s databázemi Podpora protokolů HTTP, FTP, SMTP, POP3, atd. Obsahuje knihovny funkcí pro práci s textovými řetězci, obrázky, datem a časem, soubory a složkami, aj. Obsahuje knihovnu matematických funkcí Skripty jsou prováděny na straně serveru - stažená stránka z www serveru tedy neobsahuje zdrojové kódy PHP skriptů. Velmi svobodná licence
Proč PHP NE? Interpretovaný ne kompilovaný jazyk PHP skripty v textové podobě Neexistuje kompletní definice, je popsána jen implementace Nekonzistentní pojmenování funkcí Nejednotné pořadí parametrů Slabší podpora UNICODE
K čemu PHP? Firemní prezentace Podnikové informační systémy Internetové obchody Redakční systémy Diskusní fóra Dynamické osobní stránky Webklienti pro poštu i db Počitadla, ankety …
HTML Co se děje se stránkami psanými čistě v HTML kódu ? Webový server přečte požadavek prohlížeče Nalezne stránku na serveru Odešle stránku přes internet zpět prohlížeči Prohlížeč interpretuje HTML kód a zobrazí webovou stránku Co se děje se stránkami psanými čistě v HTML kódu ?
PHP Co se děje se stránkami obsahujícími PHP kód ? Webový server přečte požadavek prohlížeče Nalezne stránku na serveru Provede instrukce PHP pro modifikaci webové stránky Odešle stránku přes internet zpět prohlížeči (čisté HTML) Prohlížeč interpretuje HTML kód a zobrazí webovou stránku Co se děje se stránkami obsahujícími PHP kód ?
Základy PHP PHP kód se zapisuje v textovém tvaru PHP interpret (běžícím na webovém serveru) kód překládá a posílá do klienta (prohlížeče) hotový html kód skripty (podobně jako .asp) narozdíl od JavaScriptu provádí server nezatěžuje vlastní počítač - náročný na komunikaci se serverem př. webový server nejprve spočítá kolik je 300/30 a pak prohlížeči odešle jen výsledek tj. číslo 10
Základy syntaxe Název souboru webové stránky stadnardně obsahuje příponu "php" nebo „phtml“ (např. index.php) (! může mít jakoukoliv jinou, dle nastavení v konfiguračních souborech) Začlenění PHP skriptu do (X)HTML kódu webové stránky <?php echo "ahoj"; ?> Další možnosti (nedoporučuje se použivat): a) <? echo "ahoj"; ?> b) <script language="php"> echo "ahoj"; </script> c) <% echo "ahoj"; %>
Základy syntaxe PHP nerozlišuje u speciálních slov a funkcí velikost písmen: echo = Echo = eChO U názvů funkcí to platí také: PHPInfo() = phpinfo() Neplatí to u proměnných: $jmeno není to samé, co $Jmeno PHP ignoruje mezery, tabulátory a odřádkování, ty jsou pouze pro přehlednost v kódu Nelze psát mezery do názvů funkcí, proměnných apod.
Základy syntaxe Oddělení instrukcí
Základy syntaxe Komentáře <?php // Text za dvojitým lomítkem je až do konce řádku ignorován... # Druhý způsob komentáře na jeden řádek... /* Víceřádkový komentář. Často se používá pro vyřazení bloku kódu PHP, který momentálně nechceme použít. */ ?>
První příklad <?php phpinfo(); ?>
ECHO Příkaz echo slouží k výpisu: jednotlivých textových znaků a řetězců HTML kódu konstant obsahu proměnných Lze použít i funkci print()
ECHO příklady <?php $Sirka = 640; $Vyska = 480; // Vkládání do HTML: ?> <img src="obrazek.png" width="<?php echo $Sirka; ?>" height="<?php echo $Vyska; ?>" alt="Obrázek"> /* Generování celého HTML */ // Vypsání více parametrů: echo '<img src="obrazek.png" width="', $Sirka, '" height="', $Vyska, '" alt="Obrázek">'; // Spojování řetězců pomocí operátoru . (tečka): echo '<img src="obrazek.png" width="' . $Sirka . '" height="' . $Vyska . '" alt="Obrázek">';
Konstanty obsah se později ve skriptu nedá změnit narozdíl od proměnných názvy konstant nezačínají znakem $, zvykem je psát názvy konstant velkými písmeny PHP obsahuje i několik předdefinovaných konstant, například PHP_OS define('SPOLECNOST', ‚VOŠIS Praha'); define('PRODUKT', ‚Vyuka PHP'); define('VERZE', 2011); echo SPOLECNOST, ' představuje svůj nový produkt ', PRODUKT, ' ve verzi ', VERZE, '.';
Proměnné Pravidla pro název proměnné Proměnné slouží k uchovávání hodnot, které lze během provádění skriptu měnit. Proměnné začínají znakem $ (dolar), např. $soucet Pravidla pro název proměnné V názvu proměnné nepoužívat diakritiku PHP rozlišuje velká a malá písmena v názvu!!! Název proměnné nesmí začínat číslicí nebo speciálními znaky, uvnitř názvu lze použit číslici (např. $promenna1). $mojepromenna a $MojePromenna nejsou stejné! jednopísmenné názvy ne! – po týdnu nevím, co je proměnná $d a $g ? příliš dlouhé názvy ne! –snadněji se udělá chyba sebepopisující názvy, jeden jazyk - četina bez hacku a carek - angličtina
Přiřazení hodnoty $promenna=2; $text_prom="Zdravím Vás"; Výpis hodnoty proměnné echo $promenna; echo "Toto je moje proměnná: $promenna"; echo "Je mi $narozen let."; echo "Je mi ".$narozen." let."; echo "Je mi <strong>".$narozen.“</strong> let.";
Jednoduché typy proměnných Typy proměnných: integer, double, string, boolean, array, object $a = 1; // $a je typ integer (celé číslo) $a = 1.5; // $a je typ double (desetinné číslo) $a = 1e-3; // $a je typ double ($a = 0.001) $a = “nějaký text”; // $a je znakový řetězec (také $a = “1”;) $a = TRUE; // $a logický typ “pravda” (FALSE - nepravda) Čísla lze zapisovat také v šestnáctkové soustavě: $a = 0xFF; // v $a bude uložena hodnota 255
String (řetězec) $jmeno=”Antonín”; $prijmeni=”Skopec”; Textové řetězce uzavíráme do uvozovek (“text”) nebo apostrofů (‘text’) Spojování řetězců se provádí pomocí tečky: $jmeno=”Antonín”; $prijmeni=”Skopec”; echo “Zadali jste toto jméno: ”.$jmeno.“ ”.$prijmeni;
Psaní speciálních znaků \\ znak zpětné lomítko – ‘ \ ’ \n nová řádka – obdoba tagu <br> v HTML \t tabulátor \” znak uvozovky – ‘ ” ’ \$ znak dolar – ‘ $ ’ $a=20; echo “V proměnné \$a je uložena hodnota $a”;
Střídání uvozovek a apostrofů <?php /* Apostrofy */ // echo 'I'd like to tell you: "You're the most interesting man I've ever met."'; // Toto by bylo špatně. echo 'I\'d like to tell you: "You\'re the most interesting man I\'ve ever met."'; // Toto je správně. /* Uvozovky */ // echo "I'd like to tell you: "You're the most interesting man I've ever met.""; // Toto by bylo špatně. echo "I'd like to tell you: \"You're the most interesting man I've ever met.\""; // Toto je správně. ?>
Odřádkování v řetězci mezi apostrofy či uvozovkami můžete odřádkovat enterem, vše se promítne do HTML kódu Operační systém Sekvence Windows \r\n Linux \n Mac OS \r Místo odřádkování enterem uvnitř řetězce je však mnohdy lepší pro znak nového řádku v PHP použít danou escape sekvenci POZOR, tato sekvence se převede na odřádkování pouze v případě, že je vypsána v uvozovkách!!!
Odřádkování pomocí sekvencí Operační systém Sekvence Windows \r\n Linux \n Mac OS \r POZOR, tato sekvence se převede na odřádkování pouze v případě, že je vypsána v uvozovkách!!! <?php echo 'řádek 1<br>\r\nřádek 2<br>\r\nřádek3'; /* Vypíše \r\n literárně: řádek 1<br>\r\nřádek 2<br>\r\nřádek3 */ echo "řádek 1<br>\r\nřádek 2<br>\r\nřádek 3"; /* Sekvence \r\n je převedena na odřádkování: řádek 1<br> řádek 2<br> řádek 3 */ ?>
Odřádkování pomocí konstanty Lepší je definice pomocí konstanty <?php define('NL', "\r\n"); echo 'řádek 1', NL; echo 'řádek 2'; echo NL; echo 'řádek 3'; ?>
Výpis proměnné Proměnnou vypisujeme pomocí příkazu echo(): $dolar="1$"; echo $dolar; echo "$dolar"; echo "mám jen" . $dolar . "<br />"; echo "nemám ani $dolar" ; složitější, ale předejde se případným komplikacím: obyčejný text se píše do uvozovek a od proměnné odděluje tečkou
Expanze proměnné <?php $Jmeno = 'Tereza'; echo 'Jmenuji se $Jmeno.'; // Vypíše: Jmenuji se $Jmeno. echo "Jmenuji se $Jmeno."; // Vypíše: Jmenuji se Tereza. ?> <?php $Jmeno = 'Tereza'; echo "Obsah proměnné \$Jmeno je $Jmeno"; // Vypíše: Obsah proměnné $Jmeno je Tereza // Poněkud lepší řešení: echo 'Obsah proměnné $Jmeno je ', $Jmeno; ?> První výskyt proměnné $Jmeno je uvozen zpětným lomítkem, takže se vypíše literárně "$Jmeno". Druhý výskyt již zpětným lomítkem uvozen není, takže je proměnná $Jmeno nahrazena svým obsahem. V tomto případě "Tereza".
Úkol s použitím příkazů echo(), escape sekvencí a html tagů napište skript, který zobrazí v okně prohlížeče tento text: každý řádek okomentujte