Základy programování v PHP RNDr. Pavel Vlach, Ph.D.
PHP – k čemu to je? skriptovací jazyk pro tvorbu dynamického webu internetové obchody podnikové informační systémy (ať už intranetové nebo internetové) diskusní fóra redakční systémy firemní prezentace dynamické osobní stránky weboví poštovní či databázoví klienti vyhledávače a katalogy drobnosti typu počitadla, ankety a mnoho dalších
Jak to funguje? 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 300/30 a pak prohlížeči odešle jen číslo 10
Co se naučíme? syntaxi a základy jazyka PHP používání proměnných a různých datových typů větvení programů a cykly práce se soubory zpracování formulářových dat spolupráce s MySQL příklady diskuzní fórum základy redakčních systémů on-line přihlašovací formulář
Co budeme potřebovat? kompetence v oblasti tvorby HTML stránek webový server (Apache s technologií PHP) textový procesor (PSPad, Pozn. blok) hodně času a chuti
1. princip funkce PHP historie PHP a html ještě jednou jak to funguje b) jak se to spojí s html
Historie a skriptovací jazyky první stránky statické – nereagovaly, nebyly interaktivní dynamické stránky - reagují na tlačítka a myš, zpracovávají data zadávaná uživatelem, zobrazované informace se mění apod. dynamické stránky lze rozdělit do dvou skupin: klientské serverové
klientské scriptovací jazyky Spolu s HTML stránkou je prohlížeči odeslán i programový kód a ten je ve vhodnou chvíli na "cílovém" počítači spuštěn při kliknutí na tlačítko, při najetí myší na odkaz, při otevření okna prohlížeče a podobně O spuštění klientského kódu se stará prohlížeč - a to může být nevýhoda - musí znát programovací jazyk JavaScript
serverové scriptovací jazyky prohlížeč požaduje webovou stránku ze serveru - server tuto stránku nejprve sestaví a pak odešle Servery sestavují pokaždé jinou stránku v závislosti na tom, co přesně prohlížeč požaduje php, asp
Jak vypadá php script? obsahuje jednak kusy normálního HTML kódu, a jednak kusy programového kódu. Když webový server obdrží požadavek na zpracování takového skriptu, vezme: kusy HTML kódu tak, jak jsou části PHP programového kódu provede výsledek zkombinuje a odešle prohlížeči Server totiž výsledek posílá do prohlížeče jako obyčejnou HTML stránku zapsaný kód v editoru vypadá jinak než po zobrazení „zdrojového kódu“ v prohlížeči
ukázka zápisu prosté html stránky prostý html zápis (bez validní struktury, ale v prholížeči tento zápis „projde“)
ukázka zápisu se včleněným php kódem adresa zápis kódu v editoru zobrazení prohlížeči výpis zdrojového kódu v prohlížeči všimněte si adresy v okně prohlížeče
Jak to, že se liší kód v editoru a kód v prohlížeči? Prohlížeč „neví“, co všechno se na serveru dělo než mu byl výstup odeslán prohlížeč (a tedy i ten, kdo si chce přečíst kód v pohlížeči) vidí jen samotný výsledek na serveru se mohla dít celá řada věcí: matematické výpočty přístupy k databázím formátování operace s řetězci a další taškařice
závěrečné shrnutí skript musí být "prohnán" serverem otevřením v textovém editoru nebo si ho prohlédnete jako soubor na disku, neuvidíte výsledek, ale zdrojový kód skriptu plést se může zejména tehdy, když máte PHP skript na vlastním počítači - PHP soubor proženete serverem tak, že se na něj zeptáte prohlížeče pomocí adresy url. Například pomocí http://localhost/skript.php
závěrečné shrnutí 2. PHP skripty nejsou závislé na prohlížeči 3. integrace PHP do html pomocí speciálních značek: - celý soubor může být jeden dlouhý PHP kód. - kód PHP je na jednom určitém místě - v souboru je více místo obsahující PHP kód - soubor se tváří jako php skript, ale ve skutečnosti je to normální HTML soubor a PHP kód v něm vůbec není 4. výsledkem PHP skriptu je normální HTML stránka – nepouštějte se do práce v PHP, pokud alespoň zběžně neznáte HTML 5. k dispozici musí být webový server
doporučená literatura Jiří Kosek PHP tvorba interaktivních internetových aplikací Grada Publishing 1999, 492 stran ISBN 80-7169-373-1 stará, ale dobrá různé webové kurzy www.php.net
webový server a jeho instalace apache php mySQL
jak na instalaci? instalace a přená konfigurace webového serveru Apache a následně spuštění technologií php a mySQL může být velmi obtížná pro začátek (v rámci celého kurzu vystačíme) lze nainstalovat celý balíček výše zmíněných serverů a aplikací odkazy na 3v1 instalace: www.kosek.cz www.linuxsoft.cz
Vertrigo server stabilní, většinou bezproblémová instalace nabízí Apache, PHP4 a mySQL možnosti konfigurace v rozbalovací liště první volba umožňuje restart a vypnutí serveru v liště Tools je k dispozici phpMyAdmin Settings umožňují základní konfiguraci
Vertrigo server
Úkol na ploše je umístěn zástupce serveru Vertrigo spusťte jej a pozorujte změny na panelu nástrojů spusťte konfigurační program
Vertrigo server pro naše účely stačí základní konfigurace složka, ve které budou interpretovány php scripty má tuto cestu: C:/Program Files/VertrigoServ/www v prohlížeči se příslušný soubor zobrazí, pokud zadáte: http://localhost/ příklad: C:/Program Files/VertrigoServ/www/zdroje/pokus.php bude interpretován v prohlížeči pokud zadáte: http://localhost/zdroje/pokus.php
základní syntaxe jazyka php implementace php do html syntaxe komentáře
vložení php do html tři způsoby vložení php scriptu <? [PHP kód] ?> <?php [PHP kód] ?> <SCRIPT LANGUAGE="php"> php [PHP kód] </SCRIPT> doporučuji druhý způsob budeme používat první způsob
vložení php do html
syntaxe php všechny datové struktury musí být odděleny středníkem příkazy deklarace funkce musí být odděleny středníkem pokud se objeví při zobrazení stránky chyba Parse Error, většinou někde chybí středník nezáleží na počtu mezer nebo řádek za středníkem
syntaxe php tohle hlásí chybu tohle funguje
komentáře komentáře jsou úseky kódu, které server ani prohlížeč nezobrazuje, resp. nezpracovává slouží ke zvýšení přehlednosti kódu naučme se je používat hned, později to bude automatické u rozsáhlejších programů nezbytnou podmínkou
komentáře jednořádkový komentář začíná dojicí znaků // (lomítko) nebo znakem # (Alt Gr+X) dvouřádkový komentář začíná /* (lomítko, hvězdička) a končí opačně, tj. */
echo (); print(); formátování a escape sekvence výpis na obrazovku echo (); print(); formátování a escape sekvence
echo (); tento příkaz vypíše obsah proměnné, řetězec, číslo, html tag…. možné zápisy: echo (“Hello world“); echo ($promenna); echo (“<strong>odstavec</strong>“);
echo – příklady kódů
echo – „zlobivé“ znaky zvláštní formátování mají znaky “, \, <, $ před nimi se používá znaku \ používá se hlavně při formátování html tagů těmto znakům se říká „escape sekvence“
escape sekvence
escape sekvence – ještě jednou
jak jinak na uvozovky?
úkol s použitím příkazu echo(), escape sekvencí a html tagů <div> <strong> <em> <a> <h2> napište v PSPadu php script, který zobrazí v okně prohlížeče tento text: výsledek uložte do vaší složky
druhy proměnných datové typy operátory
proměnná programovací jazyk pracuje s hodnotami hodnoty se ukládají do proměnných proměnná má: název (uvozený znakem $) hodnotou hodnota proměnné v programu jednoznačně daná během programu se však může měnit
typy proměnných php automaticky po přiřazení hodnoty vybere vhodný datový typ $zapnuto=true //typ boolean $nazev=“aleš“ //typ string
proměnné typy a triky jednopísmenné názvy ne – po týdnu nevím, co je proměnná $d a $g ? příliš dlouhé názvy také ne – zápis jde a snadněji se udělá chyba používejte sebepopisující názvy, jeden jazyk četina bez hacku a carek angličtina používejte velbloudí notaci – pro přehlednost vkládejte do názvu proměnné velká písmena: $PopisTabulky $FindCursorPosition $MoveCursor
operátory běžné operátory podobná syntaxe jako v jazyce C++ řetězce spojujeme pomocí tečky (.)
příklad 1
příklad 2
úkol vytvořte script, který bude kombinovat příkaz echo a proměnné různých typů proveďte různé operace s proměnnými, spojujte řetězce atd. výsledek uložte do vaší složky
větvení programu typy podmínek
if …. else struktura if (výraz, podmínka) { …….. } if (výraz, podmínka) { …….. } else { ……. } if (výraz, podmínka) { …….. } else if { ……. } else { ……. } v závorce se testuje proměnná typu boolean nebo jakýkoliv výraz pomocí porovnávacích operátorů
if – příklad 1
if - příklad 2
podmínky - tipy a triky bez podmínek se neobejdete. Naučte se je. Z hlavy. příkaz v některé větvi podmínky může být zase podmínka. Vnořené podmínky jsou někdy potřeba, ale mohou pěkně znepřehlednit kód. Zvažte použití větve else v podmínce vždy, když si nejste absolutně jisti, že větve elseif pokrývají všechny alternativy. Formátujte kód tak, abyste se v něm vyznali KOMENTUJTE. Podmínky mohou být složité a za půl roku, když budete potřebovat skript oprášit už nebudete vědět, proč jste je psali.
podmínky - úkol vytvořte 3 scripty, které budou využívat větvení pomocí podmínky if elseif a else v prvním skriptu testujte výraz typu boolean v druhém skriptu testujte číselnou proměnnou pomocí operátorů <, >, <=, => ve třetím scriptu testujte řetězce pomocí operátorů == , != a logických operátorů && a || uložte do vaší složky
switch nahrazuje níže uvedenou strukturu: má tento tvar if (výraz1) {…………} elseif (výraz2) {…………} elseif (výrazn) {…………} else {…………………….} má tento tvar switch (podmínka) { case výraz1: case výraz2: case výraz3: default: }
switch - příklad
cyklus for cyklus do….while cyklus while smyčky - cykly cyklus for cyklus do….while cyklus while
cyklus for for ($i=1; $i<=20; $ i++) { ……. } cyklus s parametrem – víme, kolikrát cyklus proběhne for ($i=1; $i<=20; $ i++) { ……. } před započetím konkrétního cyklu se vyhodnotí výraz druhý (zde $i<=20) neplatí-li podmínka, cyklus se ukončí platí-li, cyklus pokračuje dále a provede se sekvence mezi složenými závorkami po ukončení těla smyčky se provede třetí výraz (zde se parametr $i zvýší o jedničku vše se opakuje
for - příklad
cyklus s podmínkou s podmínkou na začátku : tělo cyklu proběhne jen tehdy, je-li platná podmínka while (podmínka) {…….} s podmínkou na konci : tělo cyklu proběhne vždy minimálně jednou opakuje se, pokud platí podmínka do {…….} while (podmínka)
příklad - while
příklad – do…while
cykly – tipy a triky většinou jsou oblíbenější smyčky s podmínkou na začátku Smyčky se mohou vnořovat. Formátujte si kód (=používejte tabulátor) komentáře, zejména u delších smyček. Vůbec totiž nemusí být jasné, kde smyčka začala, když je kód dlouhý. Komentujte konce smyček. velký pozor na podmínky – použijete-li místo porovnávacího operátoru (==) operátor přiřazení (=) celý skript se zablokuje – vytvořili jste nekonečnou smyčku…..
jednorozměrné pole vícerozměrné pole proměnná typu pole jednorozměrné pole vícerozměrné pole
k čemu pole? do jedné proměnné můžeme uložit indexová data např: dny v týdnu, seznamy $DenvTydnu[1]=“pondělí“; $DenvTydnu[2]=“úterý“; $DenvTydnu[7]=“neděle“; lze použít asociativní pole: $PocetObyvatel[“Blovice“]=4005; $PocetObyvatel[“Habří“]=0;
definice pole výčtem (viz předchozí strana) funkcí Array $Pracovni Tym= Array (“Ludva”,”Gita“,“Adolf“,“Čeněk“); POZOR! indexuje se standardně od nuly $Mesta = Array(1=>“Blovice“, 2=>“Nepomuk“, 3=>“Měčín“);
vícerozměrné pole
funkce matematické funkce řetězcové funkce funkce pro práci s poli vlastní funkce
funkce předdefinovaný (uživatelem nebo standardně) úsek kódu, který vykonává nějakou činnost nebo vrací hodnotu rozlišujeme procedury a vlastní funkce procedura - úsek kódu, který vykonává nějakou sekvenci příkazů funkce – vrací nějakou hodnotu
matematické funkce abs — Absolutní hodnota ceil — Zaokrouhlení zlomků nahoru cos — Cosinus exp — Vypočtení mocniny čísla e (základ přirozeného logaritmu) floor — Zaokrouhlení zlomků dolů hexdec — Hexadecimální na desítkové log10 — Base-10 logarithm log — Natural logarithm max — Nalezení největší hodnoty min — Nalezení nejmenší hodnoty pi — Získání hodnoty pí pow — Mocnina rand — Generování náhodného čísla round — Zaokrouhlení čísla sin — Sinus sqrt — Odmocnina tan — Tangens
řetězcové funkce addslashes — Opatřit řetězec lomítky chr — Vrátit určitý znak explode — Rozděluje řetězec jiným řetězcem implode — Spojit prvky pole pomocí řetězce join — Spojit prvky pole pomocí řetězce md5 — Spočítat MD5 hash řetězce ord — Vrátit ASCII hodnotu znaku strchr — Najít první výskyt znaku strlen — Zjistit délku řetězce strpos — Najít pozici prvního výskytu řetězce strrchr — Najít poslední výskyt znaku v řetězci strrev — Obrátit řetězec strstr — Najít první výskyt řetězce strtolower — Změnit řetězec na malá písmena strtoupper — Změnit řetězec na velká písmena substr_replace — Nahradit část řetězce jiným řetězcem substr — Vrátit část řetězce ucfirst — Změní první písmeno řetězce na velké ucwords — Změnit první znak každého slova v řetězci na velké písmeno
funkce pro práci s poli array_merge — Sloučit dvě nebo více polí array_push — Přidat jeden nebo více prvků na konec pole array_rand — Vybrat náhodně jeden nebo více prvků pole array_reverse — Vrátit pole s prvky v opačném pořadí array_shift — Odstranit prvek ze začátku pole array_splice — Odstranit část pole a nahradit ji něčím jiným array_unique — Odstranit z pole duplicitní hodnoty array_values — Vrátit všechny hodnoty v poli array — Vytvořit pole end — Nastavit vnitřní ukazatel pole na jeho poslední prvek foreach – Posunout interní ukazatel pole pos — Získat současný prvek pole reset — Nastavit interní ukazatel pole na jeho první prvek rsort — Třídit pole sestupně shuffle — Zamíchat pole sizeof — Zjistit počet prvků v poli sort — Třídit pole
příklady práce s funkcemi
úkol vyzkoušejte uvedené matematické funkce za zadaného čísla (poloměru kružnice) spočítá obvod a obsah kruhu výsledek zaokrouhlí dolů vyzkoušejte uvedené řetězcové funkce zadaná věta (v proměnné $veta) spočte počet slov zjistí první výskyt spojky „a“ převede řetězec a velká písmena a vypíše
vlastní definice - procedury
vlastní definice - funkce
úkol Definuj proceduru pro výpis aktuálního data a času a dne v týdnu Definuj tři funkce s parametrem pro výpočet obsahu a obvodu obdélníka, pro výpočet diskriminantu kvadratické rovnice diskriminant
zpracování formulářových dat způsoby předávání proměnných mezi soubory a serverem čtení a vyhodnocování dat z formulářů
jak posílat proměnné? GET – metoda, kdy je proměnná předávána v URL stránky hodí se pro kratší informace nulové zabezpečení lze posílat informace přímo zadáním do prohlížeče POST – metoda, kdy se proměnné předávají jako samostatný HTML objekt delší informace malinko lépe zabezpečené použití těchto metod se definuje v hlavičce formuláře (zadáním parametru method)
jak mají vypadat formuláře? v tagu <form> musí být definovány parametry „action“ (název souboru se scriptem, který se po odeslání formuláře spustí) „method“ (GET nebo POST) všechny prvky formulář musí být identifikovány jménem (parametr „name“) musí obsahovat odesílací prvek („submit“); obsah formuláře se po odeslání ukládá do asociativního pole $_REQUEST, $_POST
jak vrátit zpracovaný script k opravě? obsah všech odeslaných proměnných je v poli $_REQUEST, resp. $_POST (u metody post) pomocí funkce echo lze vypsat do formulářových polí nějaký obsah odkazem nebo skrytým formulářem vrátíme obsah polí zpět do souboru s formulářem zbytek je stejný dva způsoby jak předat tato data: pomocí skrytých formulářů pomocí metody GET v hlavičce dokumentu
dva v jednom velmi často se používá zadávání i vyhodnocování dat v jednom souboru problém – jak má formulář vědět co se právě děje? testujeme obsah polí $_REQUEST, $_POST
úkol modifikujte příklady z minulého týdne tak, aby se vstupní data vkládala pomocí různých typů formulářů
konstrukce „minichatu“ po odeslání se zobrazí čas, jméno a text zprávy výsledky budou v proměnné typu STRING normálně se výsledky ukládají do databáze v tomto případě po ukončení prohlížeče informace zmizí
Databáze mySQL phpmyAdmin
mySQL databáze primárně určená pro spolupráci s php mySQL databáze je součástí freeware balíků pro provoz webového serveru (tj. i Vertriga) mySQL běží na většině serverů s free hostingem a na všech zpoplatěných službách všechny databázové operace (tvorba databáze, třídění, výpis, mazání….) lze provádět scripty na řadu operací je ale vhodné použít připravený nástroj pro správu databáze - phpmyAdmin
phpmyAdmin spustíme z této nabídky:
phpmyAdmin
struktura php skriptu tvorba nové tabulky
struktura tabulky v tomto případě má tabulka 3 sloupce první sloupec se jmenuje „id“ – pořadové číslo (číslo „řádku“) druhý řádek obsahuje přihlašovací jméno uživatele třetí řádek obsahuje přihlašovací heslo tabulka bude sloužit k ověřování uživatelů
vkládání obsahu
procházení a třídění tabulky
úkol vytvořte jednoduchou tabulku podle výše popsaných kritérií
položení dotazu na databázi operace s výsledkem dotazu Spolupráce s mySQL připojení k databázi připojení k tabulce položení dotazu na databázi operace s výsledkem dotazu
připojení k databázi jméno serveru (localhost, www.webzdarma.cz.....) jméno uživatele (vertrigo, newstyle.wz.cz….většinou přidělí provider) heslo (_root, zvolíte si sami na webu) název databáze (někdy nelze vytvářet databáze, máte je přidělené (často stejný název jako jméno uživatele)
připojení k databázi musíme ošetřit chyby – připojení se nemusí povést (a často se nepovede) vypíše text a chybu (z funkce mysql_error) připojení
připojení k databázi je vhodné do externího souboru nadefinovat parametry připojení (SERVER, UŽIVATEL, HESLO A JMÉNO DATABÁZE) tyto parametry uložíme do proměnných nebo konstant a soubor připojíme (include) do každého souboru pokud potřebujeme změnit – měníme jen v jednom souboru
příkazy v mySQL Definiční Umožňují spravovat strukturu databáze CREATE TABLE, DROP TABLE Výběrové Umožňují získat z databáze data SELECT Přidávací Umožňují přidávat nová data do tabulky nebo tabulek INSERT Aktualizační Umožňují měnit existující data v tabulkách UPDATE, REPLACE Odstraňovací Umožňují smazat řádky z tabulky nebo tabulek DELETE
čtení z databáze SELECT [seznam polí] FROM [název tabulky nebo tabulek] WHERE [podmínka] ORDER BY [seřazení]
čtení z databáze třídění – používá se atribut ORDER BY (název třídícího znaku) DESC (sestupně) ASC (vzestupně) vyhledávání – používá se atribut WHERE (název sloupce) LIKE (příznak) tento dotaz vybere všechny záznamy, které ve sloupci „town“ mají hodnotu „Blovice“
úkol kontrola přihlašovacího jména formulář s přihlašovacím jménem a heslem po odeslání kontrola databáze, zda obsahuje jméno kontrola, zda k příslušnému jménu je zadáno správné heslo výpis podle situace (není jméno, špatné heslo, vše je ok)
vkládání údajů do databáze INSERT INTO [název tabulky] (sloupec, ...) VALUES (hodnota, ...) INSERT INTO [název tabulky] (sloupec, ...) VALUES (hodnota, ...) INSERT INTO [název tabulky] (sloupec, ...) VALUES (hodnota, ...)
oprava údajů v databázi příkaz UPDATE stejná struktura jako INSERT export údajů z databáze k dotazu SELECT přidáme atribut INTO OUTFILE (název souboru)
soubory v databázi vždy zapeklitý problém – jak zapsat bez chyby a hlavně jak zobrazit v tabulce musí být sloupec se type BLOB (binární data) data čteme z nějakého souboru na disku pomocí: $otevrit = fopen(soubor, "rb"); $data = fread($otevrit,filesize(soubor)); obsah proměnné data vkládáme do db poté, co jsme jej převedli na řetězce $data = mysql_escape_string($data); $data = addslashes($data);
soubory v databázi vždy problematické – možná lépe export do souborů uspořádaných do složek pozor na typ BLOB do 65kb, MEDIUMBLOB do 16Mb binární data lze zobrazovat pomocí volání header (specifikace, název souboru); pozor!! Header musí být první výstup do prohlížeče (jinak chyba) – včetně hlavičky html dokumentu v header zadáme specifikaci výstupu Content-Type: image/jpeg Content-Type: text/rtf
formát funkce mail zasílání emailu
funkce mail slouží k zasílání mailů mail (string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] ) při posílání mailů z localhostu – může dojít k problémům – musí být zajištěn přístup k direktivě sendmail optimální je mít nainstalovaný mail server (např. Free SMPT server, POSTCAST Server)
funkce mail tato část programu zajistí odeslání mailu na mailserver
k čemu to je registrace session proměných vymazání proměnných Sessions k čemu to je registrace session proměných vymazání proměnných
Sessions session se musí spustit direktivou způsob předávání proměnných mezi soubory proměnná se registruje a do doby vypršení platnosti (dá se nastavit), do ukončení okna prohlížeče nebo manuálního ukončení platnosti session je tato proměnná (včetně obsahu) k dispozici všem php souborům session se musí spustit direktivou session_start(); tato direktiva musí být úplně první (před jakýmkoliv odesláním informací do prohlížeče, tzn. i před hlavičkou html dokumentu
Sessions registrace session proměnných registrace session proměnných