Michal Kutil ČVUT FEL Praha kutilm@fel.cvut.cz PHP Michal Kutil ČVUT FEL Praha kutilm@fel.cvut.cz
1. Úvod
Zdroje PHP a MySQL rozvoj webových aplikací Luke Welling a Laura Thomsonová; Softpress; 2004 PHP v příkladech V. Smilek, J. Berit a L. Mrázek L.; KOPP; 2001 http://www.php.cz http://interval.cz http://www.builder.cz Ukázat www.php.cz
Historie PHP Personal Home Page PHP Hypertext Preprocesor 1994 - Rasmus Lerdorf Informace o návštěvnících jeho stránek Skriptovací jazyk Dal k dispozici zdrojové kódy Open Source produkt Rekurzivní název jako: GNU Gnu’s Not Unix
Vývoj používání PHP www.php.net/usage.php
Charakteristika PHP Skriptovací jazyk Dynamické vytváření webových stránek Jednoduchost Nezávislost na platformě Vysoký komfort práce s databázemi V kódu lze lehce kombinovat HTML a PHP Syntaxe podobná C, C++, Javě
Mechanismus zpracování Webový prohlížeč Server Webový server Apache, IIS Požadavek Souborový systém *.html, *.gif, *.jpeg, *.php Webová stránka html, gif, jpeg, js NE PHP! *.html,*.gif,… *.php PHP Instalace SERVERU, Firefoxe, a webdeveloper extension, pspad Zjistit jak moc toho vědi o HTML? - Rychlokurz o HTML - Ukázka html na úvodní stránce Méďovy včelnice Odpověď Database MySQL
2. Základy programování
Vzorová aplikace Nejběžnější aplikace Webové stránky Méďovy včelnice Zpracování formulářů Webové stránky Méďovy včelnice Seznam produktů Objednávkový formulář Zpracování formuláře Uložení objednávky (soubor, databáze) Odeslání potvrzení o přijetí emailem
Seznam produktů Objednávkový formulář Soubor formular.php Jde pouze o HTML Atribut action a method tágu form Atribut name tágu input
Zpracování objednávky Soubor s názvem uloženým v atributu action tágu form: objednavka.php Soubor musí mít koncovku *.php Alternativní konfigurace serveru: *.php3, *.php4, *.php5, *.phtml, … Výstupem bude opět jen HTML!
Vkládání PHP do HTML Pod nadpis <h2> vložte následující: echo '<p>Objednávka byla zpracována.</p>'; ?> Otevřete stránku přes server a prostudujte zdrojový kód. Zkontrolovat že do prohlížeče prošel pouze HTML kód. - prohlížeč nemusí rozumět PHP
Obsah souboru s PHP kódem HTML Značky PHP: <?php … ?>, <? … ?>, … Příkazy PHP: echo Prázdné znaky Komentáře: Blokové /* … */ Řádkové // … , # … Další PHP značky: script: <script language=‘php’ > echo ‘ahoj’ </script> asp: <% echo ‘ahoj’ %> Prázdné znaky: vysvětlit v html – ukázat na příkladu vysvětlit v php – echo ‘ahoj’; echo ‘ světe’; – echo ‘ahoj ’; echo ‘ světe’; Komentáře: - Komentář v html: <!-- --> - Napsat komentář na začátek kódu s autorem, datem a popisem souboru
Vkládání dynamického obsahu Zatím bychom se bez PHP obešli Dynamická změna obsahu stránek Na základě vnějších vlivů Na základě chování uživatele Doplňte stránku se zpracováním objednávky o informaci o datu a času objednání <?php echo ‘<p>Objednávka byla zpracována v ‘; echo date(‘H:I, jS F’); echo ‘</p>’; ?> na www.php.cz nalezt informaci o funkci date a pohrat si.
Data z formuláře Data jsou uloženy v proměnných Proměnné začínají znakem $ Data dostupná přes tři různé proměnné $medsv $_POST['medsv'] ($_GET['medsv']) $HTTP_POST_VARS['medsv'] Existence v závislosti na verzi a konfiguraci PHP Doplňte objednávku o přehled počtu nakoupených věcí Prvni varianta dostupna pouze pokud je nastavena konfigurace register_globals (Bezpečnost skriptu) Druha varianta dostupna pouze od verze 4.1.0
Uživatelem deklarované proměnné Proměnné vždy začínají znakem $ Proměnné se nemusí deklarovat Přiřazování hodnot proměnným $celkovemnozstvi = 0; $celkovacena = 0.00; $celkovacena = $cenaposleve; $jmenoobchodu = ‘Méďova včelnice’; Promenne které jsou tvořeny v průběhu skriptu jsou v první variantě (Podmínky pro nazvi na straně: 57)
Operátory + Sčítání $a + $b; $c + 30 - Odečítání $a - $b; $c - 30 * Násobení $a * $b; $c * 30 / Dělení $a / $b; $c / 30 % Modus (zbytek po dělení) $a % $b . Spojení (Spojuje textové řetězce) S použitím operátoru spojení vypisujte přehled objednaných věcí pomocí jednoho příkazu echo Vypište celkový počet objednaných věcí Funkce isset, empty Na odpoledne: Zavést cenu za produkt: define(‘CENA’,50); Přehled cen kolik jsem nakoupil Celková cena k zaplacení
Řídící struktury Rozhodování pomocí podmínek if ( podmínka ) { příkaz(y) } else { jiný(é) příkaz(y) } Podmínka - porovnávací a binární operátory Bloky příkazů {} Doplňte zpracování objednávky, tak aby se vypsalo že si uživatel nic neobjednal Porovnávací a binární operátory: strana 66 Blokové prvky {} ELSE – nepovinné Na odpoledne - sleva při objednání medu světlého: 10-49 5%; 50-99 10%; 100- 15%
Příkaz SWITCH Podobné příkazu if, ale možno určit více hodnot výsledku switch ( výraz ) { case hodnota : příkaz(y); break; case hodnota : příkaz(y); break; default : příkaz(y); break; } Doplňte objednávku o marketinkový průzkum návratnosti reklamy Do formuláře přidat <SELECT name=“reklama”><option value=“a”>Jsem stálý zákazník</option> ….
Opakování akcí while (podmínka) { příkaz(y) } for (výraz1; podmínka; výraz2) { příkaz(y) } Vytvořte stránku s ceníkem (tabulkou). Cena dopravy zboží je závislá na vzdálenosti.
Opakovací cvičení Operátory if switch Na začátku skriptu vytvořit jednoduché proměnné ($medsv=$_POST['medsv']) Operátory Zavést cenu za produkt Přehled kolik mě co stálo Celkově k zaplacení if Vypsat varování pokud si uživatel nic neobjednal Sleva z celkové částky (10-49kg 5%, 50-99kg 10%, 100 a více 15%) switch Zjistit návratnost reklamy
3. Zajímavé možnosti PHP
Pole Číselně indexovaná pole Asociativní pole Vícerozměrná pole Řazení polí Med světlý Med tmavý Vosk produkty
Číselně indexované pole Vytvoření pole $produkty=array('Med světlý','Med tmavý','Vosk'); $produkty=array(1=>'Med světlý','Med tmavý','Vosk'); Přístup k obsahu pole $produkty[0] $produkty[3]='Medovina'; Informaci o datu objednání zobrazte korektně s českými názvy měsíců Řazení pole: sort()
Asociativní pole Vytvoření pole Přístup k obsahu pole $cena=array('medsv'=>80,'medtm'=>90,'vosk'=>50); Přístup k obsahu pole $cena['medsv'] $cena['vosk']='nezjištěno'; Použijte k výpočtu ceny za objednávku asociativní pole, předchozí příkazy pouze zakomentujte Řazení pole: asort(), ksort()
"Recyklace" kódu Uživatelem definovaná funkce function echop($text) { echo '<p>'.$text.'</p>'; } Vložení externího souboru include ('menu.inc.php'); Použijte funkci echop při zpracovaní objednávky Vytvořte soubor menu.inc.php s odkazy na všechny doposud vytvořené soubory, tento soubor pomocí include vložte na konec každé stránky
4. Ukládání a získávání dat
Uložení objednávky Zápis do souboru $fp = fopen('objednavky.txt','a'); Otevření souboru Zápis Zavření souboru $fp = fopen('objednavky.txt','a'); fwrite($fp, $text); fclose($fp); Uložte objednávku do souboru objednavky.txt Módy strana 90: (r, w, a)
Načtení objednávky ze souboru Načtení příkazem file $nacteneobj=file('objednavky.txt'); Vytvořte soubor prehledobj.php jenž zobrazí všechny doposud provedené objednávky
5. Pokročilé programování
Proměnná chameleón $jmenoproduktu = 'medsv'; $$jmenoproduktu = 52; stejné jako $medsv echo $medsv; // vypise 52
Úvozovky Podobný význam jako apostrofy Větší inteligence při interpretaci echo "Objednáno $medsv kg medu sv."; Vkládání znaku ENTER a TAB echo "\n\t"; Pozor na úvozovky echo "Citace zapisujem do \"";
Mail Odeslaní se provádí pomocí příkazu: mail ( 'jmeno@example.cz', 'nadpis zprávy', 'zpráva ...'); Testovat skript tak, že jeho výsledek nejdříve vytisknete na obrazovku a poté teprve použijete příkaz mail(…) Nikdy neumisťujte tento příkaz do cyklu
Já Honza Krákora ČVUT FEL Praha krakorj@felk.cvut.cz
Podpora emailu Služba pošty není všude podporována Je třeba být hodný na administrátora serveru nechat si nastavit SMTP a Firewall nastavit si PHP pro odesílání emailů (SMTP nastavení) Někteří poskytovatelé standardně podporují (např. Webzdarma)
6. PHP a jiní poskytovatelé Poskytovatelé serverů s PHP (např. webzdarma, Pípni) PHP, email, DB (MySQL), logy atd. Placené zálohy, logy, servis bezpečnostních služeb Free – neplacené bez záloh, levné Založte si konto u http://www.webzdarma.cz , připojte se pomocí FTP a nahrajte tam svojí presentaci Vytvořte skript email.php na posílání emailů z vaší aplikace
“.ahoj.pepo...\n\r\t” -> “ahoj.pepo” 7. Práce s řetězci V PHP velmi jednoduché Silná podpora viz. www.php.net funkce Trim(), Ltrim(), Rtrim() odstraňují prázdné znaky z řetězce “.ahoj.pepo...\n\r\t” -> “ahoj.pepo”
Trim $str = array('a', 'ahoj', 'ahoj pepo ', ' ahoj pepo '); /* tupy vypsani */ foreach($str as $i){ echo 'retezec: "'.$i."\"\n"; } /* trim funkce */ echo 'retezec: "'.trim($i)."\"\n";
Rtrim a Ltrim /* rtrim (chop) funkce */ foreach($str as $i){ echo 'retezec: "'.rtrim($i)."\"\n"; } /* ltrim */ echo 'retezec: "'.ltrim($i)."\"\n"; ?> upravte skript na zpracování emailu tak aby ořízl řetězec emailu o prázdné znaky
$out = str_replace($starystr, $novystr, $str) funkce str_replace() přemaže řetězec starystr řetězcem novystr v řetězci str, výsledek uloží do out $out = str_replace($starystr, $novystr, $str) Upravte vaše tabulky aby se vypisoval sudý a lichý řádek jinak (použijte str_replace a CSS) Upravte text zprávy odesílané emailem aby se místo znaku @ objevil text (zavinac)
Implode, explode atd. funkce Implode() funkce Explode() sloučí položky pole do řetězce str, mezi jednotlivá políčka vloží znaky str = explode(znaky, pole); funkce Explode() rozdělí řetězec str do pole řetězců pole, dělení je dáno parametrem hledej pole = explode(hledej, str);
Další funkce funkce strlen ( string ) funkce strtolower ( string ) funkce strtoupper ( string ) funkce htmlspecialchars( string ) funkce nl2br( string ) funkce ereg (pattern, string , out)
To je konec