PHP – Základy programování
Obsah 7. Práce s hlavičkami v PHP 1. Historie na úvod 8. Práce s grafikou v PHP 9. Předávání dat do jiných stránek 10. Proměnné SESSION 11. Cookies 12. Použití databází v PHP 12.1. Základní příkazy MySQL 12.2. Použití MySQL v PHP 12.3. Příklad použití PHP a MYSQL 13. Užitečné informace lze nalézt 1. Historie na úvod 2. Instalace a konfigurace 3. Syntaxe PHP 3.1. Proměnné 3.2. Operátory 3.3. Pole 3.4. Struktury příkazů 3.5. Funkce 4. Formuláře 4.1. Prvky formuláře 4.2. Zpracování formuláře v PHP 4.3. Přístup k datům z formuláře 5. Práce se soubory 1 6. Protokol HTTP
1. Historie na úvod Statické stránky 1990 – první použití služby WWW, stránky pouze statické, založené na technologiích 1. HTML – jazyk pro zápis webových stránek 2. HTTP – přenosový protokol pro přenos HTML-stránek z WWW-serveru do prohlížeče 3. URL – každý objekt přístupný na WWW má jedinečnou adresu URL – lze na něj odkazovat Dynamické stránky následovaly inovace - automatické generování stránek proměnlivých v čase – CGI –skripty - ovlivnění chování CGI –skriptů uživatelem – formuláře nevýhodou byly pomalé odezvy serveru, náročná správa 1996 – Javascript – spouští skripty na lokálním počítači uživatele, nezatěžuje server, oživení stránek, ověřování vstupních dat, interakce s objekty na stránce, zpracování cookies 1994 – PHP – skripty se provádí na straně serveru, interakce s objekty na serveru (databáze), menší objem přenesených dat, vyšší ochrana zdrojových programů *uvedeny jsou pouze freeware produkty
2. Instalace a konfigurace Pro tvoření a spouštění skriptů PHP na lokálním počítači je nutné nainstalovat: 1. Překladač (interpret) jazyka PHP 2. Software pro Web server – APACHE 3. Databázový systém – MySQL Pro zjednodušení lze nainstalovat vše dohromady jako balík PHP Triad, kde jsou vyřešené vzájemné vazby. Je vhodné upravit adresář pro ukládání souborů se skripty v konfiguračním souboru apache/conf/http.conf – parametr DocumentRoot obvykle c:/apache/htdocs/ Adresy: www.php.net nebo zrcadlo www.php.cz Pro psaní programů lze použít Notepad, AceHTML, Phped, HomeSite a další. Jakýkoliv soubor obsahující PHP skript má příponu .php je uložen v adresáři obvykle c:/apache/htdocs/ před jeho spuštěním je nutné spustit apache.exe spouští se v prohlížeči, URL je http://localhost/nazevsouboru.php Kontrolu správné instalace lze provést krátkým skriptem, který zobrazí informace o PHP: <?php PHPInfo(); ?>
3. Syntaxe PHP Způsoby zápisu skriptů: 1. <?php 2. <script language=”php”> příkazy příkazy ?> </script> - na velikosti písmen nezáleží, pokud nejsou v uvozovkách nebo apostrofech - psaní poznámek na jenom rádku //, více řádků /*…….*/ - příkazy se oddělují středníkem nebo stojí samostatně na řádku - lze používat příkazy HTML zapsané v uvozovkách nebo apostrofech v příkazu echo nebo lze skript kdekoliv ukončit, vložit kód HTML a vložit opět skript - řetězce lze uzavírat do apostrofů nebo uvozovek, rozdíl je v tom, že řetězce v apostrofech jsou doslovné, u textu v uvozovkách se názvy proměnných nahrazují jejich aktuálními hodnotami - znaky se speciálním významem začínají lomítkem - \”, \’, \$, \n – nový řádek - v příkazu echo lze použít řetězce typu HEREDOC – přiřazují text doslovně. Př. echo <<<HTXT text s příkazy HTXT; Pozn. - název textu HEREDOC musí začínat v 1.sloupci textu samostatně na řádku AceHTML nezná HEREDOC typ.
3.1. Proměnné - nedeklarují se, typ proměnné se určí, když do ní přiřadíme hodnotu, automaticky se může konvertovat na jiný typ, existují funkce pro zjištění typu i přetypování proměnné - základní typy : integer - celé číslo 2 147 483 648 až 2 147 483 647 double - reálné číslo -1,7.10308 až +1,7.10308, nejmenší kladné 3,4.10 -324 string - řetězec v uvozovkách nebo apostrofech array – pole, počáteční index je 0 pokud se neurčí jinak object – objekt pokud je hodnota výrazu nenulová má současně hodnotu true, hodnotu false má číslo 0, prázdný řetězec, pole nebo objekt a ukazatel null - název proměnné začíná značkou $ např. $a, ukazatel na proměnnou začíná značkou & např. &$a
3.2. Operátory aritmetické: +, -, *, /, % - zbytek po celočíselném dělení přiřazovací: =, +=, -=, *=, /=, %= inkrementace: ++ dekrementace: -- relační: == rovnost, != nerovnost, >=, <=, >, < shoda hodnoty a datového typu: === stejná hodnota i typ, !== stejná hodnota nebo stejný typ logické: ! negace, && nebo and logický součin, || nebo or logický součet podmíněný operator: podmínka?výraz1:výraz2 spojování řetězců: operator tečka . operátor čárka , odděluje výrazy – v hlavičce cyklu for bitové operátory Příklady použití operátorů
3.3. Pole indexy se automaticky číslují od nuly pokud počátečný index nenastavíme jinak pole může obsahovat současně prvky různých typů – heterogenní pole vícerozměrné pole vytváříme jako pole polí vytvoření pole: $apole[ ] = 1; $pole[ ] = 2; $pole[ ] = 3; - indexy se zvyšují automaticky $bpole[0] = 1; $pole[1] = 2; $pole[2] = 3; $cpole = array (1,2,3 ); $dpole = array (“leden”,1,2,3 ); $epole = array (2 =>1,2,3 ); - indexy začínají od dvojky $fpole = array (array (1,2,3 ), array (1,2,3 ), array (1,2,3 )) $gpole[2] [3] = 10; asociativní pole má index určený řetězcem $clovek[ “jmeno”] = “Karel”; $clovek[ “prijm”] = “Novak”; funkce pro práci s poli: – count() – vrací počet prvků v poli current() – vrací aktuální hodnotu indexu next() – posune index na další prvek v poli max(),min() – vrací maximální, minimální prvek v poli sort() – setřídí prvky v pole implode($pole,“oddělovač“) –spojí prvky pole do jednoho řetězce, mezi jednotlivé prvky vloží oddělovač
3.4. Struktury příkazů Příkazy se oddělují středníkem. Příkaz echo vypíše texty a hodnoty proměnných na stránku. Příkazy HTML napsané v apostrofech nebo uvozovkách provede Podmínky se píší do kulatých závorek, skupiny příkazů do složených závorek podmiňovací příkaz a) neúplný if (podmínka) { příkazy } b) úplný if (podmínka) { příkazy } else { příkazy } c) vnořený if (podmínka) { příkazy } elseif (podmínka) { příkazy } 2. vícenásobné větvení switch (výraz) { case hodnota výrazu1: příkazy; break; case hodnota výrazu2: příkazy; break; default: příkazy; - nepovinná část } provádí se příkazy ve větvi se stejnou hodnotou jakou má výraz za switch dokud se nenarazí na break (nepovinný) nebo konec příkazu switch Příklady použití příkazů
3. cyklus while while (podmínka) { příkazy } cyklus se provádí dokud platí podmínka, příkazy se nemusí provést ani jednou 4. cyklus do while do cyklus se provádí dokud platí podmínka, příkazy se provedou alespoň jednou 5. cyklus for for (inicializace;podmínka;inkrementace) {příkazy;} for ($i=1;$i<10;$i++) {echo $i;} vypíše čísla 1 až 10 for ($i=1, ($s=0;$i<10;$i++,$s+=+$i) echo $i; echo $s; vypíše čísla 1 až 10 a nakonec jejich součet cyklus se provádí dokud platí podmínka Příklady použití příkazů
6. cyklus foreach používá se při procházení všemi prvky pole foreach ($pole as $hodnota) {příkazy;} – odkaz pouze na prvek pole foreach ($pole as $index =>$hodnota) {příkazy;} - odkaz na prvek pole i jeho index 7. přerušení cyklu a) break – úplné ukončení cyklu b) continue – ukončí aktuální průchod cyklu a vrátí se na jeho začátek, cyklus pokračuje c) break počet; continue počet; - opustí několik cyklů najednou 8. příkazy pro vkládání souborů a) require “soubor.php” – vloží soubor, když ho nenajde, fatální chyba b) include “soubor.php” – vloží soubor, když ho nenajde vypíše zprávu a pokračuje dál c) readfile (“text.txt”) – vložení textu ze souboru pokud je uveden pouze název volaného souboru, hledá se ve stejném adresáři, ve kterém je uložen volající soubor - include “soubor.php”, odkaz z na soubor v podadresáři adresáře volající stránky - include“./soubor.php”, odkaz z kořenového adresáře - include “/soubor.php” Příklady použití příkazů
3.5. Funkce - deklarace funkce - deklaruje se kdekoliv před prvním voláním funkce, kulaté závorky u názvu jsou povinné i když funkce nemá parametry function NAZEV (formální parametry) { příkazy; return hodnota; - nepovinné } - volání funkce NAZEV(skutečné parametry); - funkci lze volat i s menším počtem parametrů něž má uvedeno v deklaraci - funkci lze nadeklarovat se standardní hodnotou parametru - funkce automaticky používají lokální proměnné, když chceme pracovat s globální proměnnou, máme možnost: a) definovat ji jako globální uvnitř funce – global $proměnná; b) použít pole globálních proměnných $GLOBALS[“proměnná”] c) použít parametr nahrazovaný odkazem v hlavičce deklarace funkce (ukazatel na proměnnou – označen &) - funkce můžou používat statické proměnné označené static, přiřadí se jim hodnota pouze při prvním volání funkce Příklady použití funkcí
4. Formuláře 4.1. Prvky formuláře Jsou jednou z možností jak může komunikovat uživatel (stránka HTML ) se serverem kde jsou stránky uloženy. 4.1. Prvky formuláře Prvky formuláře a jejich vlastnosti si prohledněte v exploreru a ve zdrojovém kódu souboru Formulář lze vytvořit také dynamicky pomocí příkazů php – příklad Příklad vytvoření formuláře pro přihlášení nebo registraci
4.2. Zpracování formuláře v PHP Atribut action v příkazu HTML <form> musí odkazovat na skript v php pro jeho zpracování. Action se provede jako odezva na událost onsubmit.Tato událost nastane např. při zmáčknutí tlačítka typu submit. Pokud je skript i formulář v jednom souboru, lze pro zpracování volat proměnnou PHP_SELF Př. action = “zpracuj.php” Pokud je skript i formulář v jednom souboru, voláme pro zpracování stejnou HTML stránku jejíž adresa je vproměnné PHP_SELF Př. action = “<?php PHP_SELF ?>“ Atribut method lze nastavit na get - data z formuláře jsou předávaná přímo v URL a jsou v poli $_GET post - data z formuláře jsou předávaná v hlavičce http požadavku a jsou v poli $_POST
4.3. Přístup k datům z formuláře $jmeno_prvku_formuláře – nevhodné z hlediska bezpečnosti, v souboru php.ini nastavit parametr register_globals=On $_GET [“jmeno_prvku_formuláře“] – odeslané metodou get $_POST [[“jmeno_prvku_formuláře“] ] – odeslané metodou post $GLOBALS[“jmeno_prvku_formuláře“] - pole globálních proměnných V proměnných se přenášejí hodnoty parametru value u příslušných prvků formuláře V proměnné $REMOTE_ADDR je IP adresa počítače, který vyslal požadavek Příklad vyhodnocení formuláře
5. Práce se soubory 1 Informace lze na serveru ukládat do souborů nebo databází. Scripty mohou pracovat se soubory jak celky (kopírování, mazání) nebo s daty které obsahují (čtení, zápis) a) manipulace s celými soubory file_exists (“soubor.dat”) – vrací true, když soubor existuje copy (“zdroj.dat”,”cil.dat”) – kopíruje soubor rename (“starejmeno.dat”,”novejmeno.dat”)– přejmenuje soubor unlink(“soubor.dat”) – smaže soubor V případě, že se příkazy provedou, vrací hodnotu true b) manipulace s obsahem souboru - otevření souboru $fp=fopen(“zdroj.dat”, režim) – otevře soubor s log. jménem $fp v uvedeném režimu režimy: r – čtení, r+ - čtení i zápis, w - zápis, w+ - zápis i čtení, a – zápis na konec souboru, a+ - zápis na konec souboru i čtení - čtení ze souboru $znak = fgetc($fp) – načte znak ze souboru $retezec = fread($fp, 1024) – načte určenou velikost bloku dat do řetězce
5. Práce se soubory 2 $radek = fgets($fp, 4096) – načte řádek do řetězce pokud není delší než je uvedeno $pole = explode(”oddělovač”, $radek ) – rozdělí řádek na řetězce podle zadaného oddělovače řetězců a uloží je do pole $pole = file($fp) – načte celý soubor do pole – každý řádek je prvek pole filesize($fp) – vrací velikost souboru fpassthru($fp) – vypíše obsah souboru na výstup - zápis do souboru fwrite($fp, řetězec, délka pokud se nezapisuje celý) – zápis řetězce fputs($fp, znak) - zápis řetězce práce s ukazatelem rewind($fp) – nastaví ukazatel na začátek souboru ftell($fp) – vrací aktuální pozici ukazatela fseek($fp, pozice) – nastaví ukazatel na uvedenou pozici, začátek souboru je 0 feof($fp) – vrací true, když je ukazatel na konci souboru - uzavření souboru fclose($fp) Příklad použití souboru – počitadlo přístupů Příklad použití souboru – chat
6. Protokol HTTP Pro komunikaci mezi prohlížečem a serverem se používá protokol HTTP. Prohlížeč pošle na server požadavek ve formátu: metoda, hlavičky, prázdná řádka Metody jsou: GET – získání dokumentu ze serveru POST – odeslání dat z formuláře, za prázdnou řádkou jsou data z formuláře HEAD – zaslání pouze hlaviček PUT – uložení stránky na serveru DELETE – odstranění stránky ze serveru TRACE, CONNECT, OPTIONS – analýza způsobu připojení Hlavička slouží pro přenos doplňujících informací, je ve tvaru jméno_hlavičky : hodnota Povinná je pouze hlavička je Host:www.server.cz Server odešle odpověď ve formátu: protokol, stavový kód, stavové hlášení, hlavičky, prázdná řádka, obsah odpovědi
7. Práce s hlavičkami v PHP V PHP lze číst hlavičky, které odeslal prohlížeč, nebo vytvářet hlavičky, které se posílají serveru. V tomto případě je musíme do skriptu vložit před jakýmkoliv výstupem na stránku, nesmí předcházet ani příkaz HTML <head> </head>. Hlavičky se vkládají funkcí Header Header(“název hlavičky : hodnota”) Př. Header(“Content -type : image/gif”) – skript generuje obrázek Header(“Location : http://www.jaroska.cz”) – skript nahraje uvedenou stránku Příklad použití hlavičky pro odkaz na stránku
8. Práce s grafikou v PHP Pro použití grafických funkcí je nutné v souboru php.ini smazat středník před řádkem extension=php_gd.dll Postup: 1. Určíme obsah stránky jako obrázek header("Content-type: image/png"); 2. Vytvoříme prázdný obrázek – zadáme rozměr v pixelech $img = imagecreate(200, 200); nebo vytvoříme obrázek načtením ze souboru $img = imagecreatefrompng(“název souboru“); 3. Pro vložení textu a kreseb použijeme funkce z manuálu např. $white = imagecolorallocate($img, 255, 255, 255); nastavení barev $black = imagecolorallocate($img, 0, 0, 0); imagearc($img, 100, 100, 150, 150, 0, 360, $black); nakreslení kružnice 4. Nakreslený obrázek pošleme prohlížeči imagepng($img); 5. Uvolníme paměť imagedestroy($img); Příklad
9. Předávání dat do jiných stránek a) v adrese URL URL stránky?parametr=hodnota¶metr=hodnota http://localhost/test.php?a=1&b=’ahoj‘ Příklad použití proměnné následují za znakem ? a jsou oddělené znakem & b) pomocí funkce Header Header(“Location : URL stránky?parametr=hodnota”) Header(“Location : login.php?back=$PHP_SELF”) – návrat z přihlašovací stránky na původní c) pomocí odkazu (hyperlink) <a href=”soubor.php?a=10&b=’ahoj’></a> d) pomocí formuláře <form action=“soubor.php“ method=“GET/POST“> … </form> přístup k datům $_GET[$jmeno_prvku_formuláře] nebo $_POST[$jmeno_prvku_formuláře]
10. Proměnné SESSION http je bezstavový protokol – každý požadavek prohlížeče na server je nezávislý na jiném požadavku, po obsluze požadavku se spojení zruší. Pro udržení spojení – uložení informací o něm (stavové aplikace) lze použít proměnné session nebo cookies. Postup: a) zahájení volání - na přihlašovací stránku vložíme session_start(); vytvoří se identifikátor spojení 32-místné číslo, které identifikuje volání a uloží se na serveru b) proměnné které charakterizují spojení ukládáme do superglobálního pole $_SESSION Př. <?php $_SESSION[“username“] = … ; ?>
10. Proměnné SESSION 2 c) na další stránky vložíme přesměrování na přihlašovací stránku, aby jsme zajistili přístup na stránky pouze z přihlašovací stránky Př. <?php if (!$_SESSION[“username“] ) Header(“Location : login.php?back=$PHP_SELF”); else { pokračování skriptu } ?> d) ukončení volání – funkce session_unset() nebo session_destroy(). Pro odhlášení také stačí zavřít okno prohlížeče session_unset ($_SESSION[“username“] ); echo “odhášen” Příklad použití je uveden v příkladě aukce obrazů
11. Cookies Jsou to řetězce znaků, které lze posílat mezi serverem a prohlížečem v rámci hlavičky HTTP. Uchovávají se v textových souborech na lokálním počítači a) uložení cookies – možnosti: SetCookie(nazev,hodnota, doba platnosti); Header(“Set-Cookie nazev = hodnota; expires = doba platnosti”); Když se zadá pouze název, je cookies smazáno, když se nezadá doba platnosti je platné pouze pro dané spojení, doba platnosti se zadává ve vteřinách, které se přičtou k aktuálnímu času získanému funkcí time() Př. SetCookie(“hlasoval”,“ano“, time()+3600*24*365); - platí 1 rok a) čtení cookies - z pole $_COOKIES Př. if ($_COOKIES[“hlasoval”]) {echo “nelze hlasovat vicekrat“;}
12. Použití databází v PHP Informace můžou být uložené na serveru v souborech nebo databázích. Databází rozumíme data a programy pro práci s nimi. Principy práce PHP s různými databázemi jsou velmi podobné. PHP pro spolupráci s databázemi používá funkce jejichž název začíná zkratkou použité databáze např. MySQL_..., ODBC_... atd. Velmi často se používá databáze MySQL . Je nutné spustit mysql.exe a WinMySQLadmin.exe.
12.1. Základní příkazy MySQL 1 1) Vytvoření databáze - součástí instalace MySQL je WinMySQLadmin.exe kde vytvoříme databázi pomocí nabídky - v editoru mysql.exe příkazem CREATE DATABASE nazevdatab; 2) Otevření databáze USE nazevdatab; 3) Vytvoření struktury tabulky Data jsou uložena v tabulkách řádek – věta obsahuje všechny informace o záznamu v tabulce, sloupec – pole je stejný údaj v každé větě. Primární klíč je pole jehož hodnota je v dané tabulce jedinečná, tj. neexistují dvě věty, které mají stejnou hodnotu v tomto poli. Při vytváření tabulky se nejdříve navrhne její struktura tj. názvy polí a typ údajů v nich uložen, primární klíč – hodnota určena při definici primary key příp. auto_increment, když ji vytváří procesor automaticky. Typy polí – INTEGER, FLOAT, DATE, CHAR [délka] – řetězec pevné délky, VACHAR [maxdélka] - řetězec libovolné délky menší než maxdélka, IMAGE, BLOB CREATE TABLE nazevtab ( 1.pole typpole1, 2.pole typpole2, 3.pole typpole3, …);
12.1. Základní příkazy MySQL 2 4) Vkládání záznamů (vět) do tabulky INSERT INTO nazevtab ( seznam polí) VALUES (seznam hodnot), (seznam hodnot), …; - vkládají se hodnoty do vyjmenovaných polí INSERT INTO nazevtab VALUES (seznam hodnot), (seznam hodnot), …;- vkládají se hodnoty do všech polí v pořadí jak jsou nadeklarované, nic nelze vynechat 5) Změna struktury tabulky - přidání pole na konec věty, na začátek, za konkrétní pole ALTER TABLE nazevtab ADD nazevpole typpole; na konec věty ALTER TABLE nazevtab ADD nazevpole typpole FIRST/AFTER nazevpole; - smazání pole ALTER TABLE nazevtab DROP nazevpole; - změna definice pole ALTER TABLE nazevtab MODIFY nazevpole novytyppole;
12.1. Základní příkazy MySQL 3 6) Výběr a zobrazení záznamů SELECT seznam polí FROM seznam tabulek WHERE podmínka ORDERED BY uspořádání podle pole; lze použít i další funkce – SUM, MAX, … 7) Aktualizace záznamů UPDATE nazevtab SET nazevpole=hodnota WHERE podmínka; 8) Mazání záznamů DELETE FROM nazevtab; - smaže všechny záznamy DELETE FROM nazevtab WHERE podmínka; - smaže záznamy, které splňují podmínku 9) Mazání databáze a tabulky DROP DATABASE nazevdatab; DROP TABLE nazevtab;
12.2. Použití MySQL v PHP 1 1) Připojení k serveru MySQL $spojeni=MySQL_Connect(server,uživatel,heslo); nebo stačí $spojeni=MySQL_Connect(“localhost“); v proměnné $spojeni je číslo, které identifikuje připojení k serveru 2) Výběr databáze MySQL_Select_DB (nazevdatab); 3) Příkazy pro práci se záznamy $vysledek=MySQL_Query(“příkaz MySQL“, $spojeni); nebo stačí $vysledek=MySQL_Query(“příkaz MySQL“); když pracujeme s jednou databází v proměnné $vysledek je číslo, které identifikuje výsledek, můžeme se na něj odvolávat u dalších funkcí počet záznamů ve výsledku vrací funkce MySQL_Num_Rows($vysledek)
12.2. Použití MySQL v PHP 2 přístup k jednotlivým záznamům poskytuje funkce MySQL_Fetch_Array(($vysledek) – vrací jeden řádek tabulky uložený do asociativního pole řetězců, prázdný řetězec má hodnotu false Př. výpis záznamů tabulky while ($zaznam=MySQL_ Fetch_Array($vysledek)) { foreach ($zaznam as $hodnota) echo $hodnota; echo “<br />”; } 4) Ukončení připojení MySQL_Close($spojeni);
12.3. Příklad použití PHP a MYSQL Použití MySQL v PHP je předvedeno na rozsáhlejším příkladě – zadání je zde. Dílčí kroky jsou vysvětlené v příkladech: Příklad vytvoření formuláře pro přihlášení nebo registraci Příklady vytvoření tabulky Řešení je zde. Celý adresář je nutné zkopírovat do adresáře apache/htdocs Postup: 1. Vytvoříme databázi aukce pomoci WinMySQLadmin 2. V databázi vytvoříme struktury tabulek obrazy a users spuštěním programů vytstrtabobr.php a vystrtabu.php 3. Vložíme záznamy do tabulky obrazy spuštěním programu vlozobrazy.php 4. Přihlášení anebo registrování se provede spuštěním programu prvni.php
13. Užitečné informace lze nalézt http://php.kn.vutbr.cz/to.en/manual/cs/index.php http://www.tizag.com/phpT/ http://www.tvorba-webu.cz/php.php3 http://www.linuxsoft.cz/php/ http://interval.cz/clanek.asp?article=252