330 likes | 462 Views
Aplikovaná informatika 03. Aplikace výpočetní techniky Mgr. Milan Randák. 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
E N D
Aplikovaná informatika 03 Aplikace výpočetní techniky Mgr. Milan Randák
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(); ?>
Syntaxe PHP Způsoby zápisu skriptů: 1. <?php 2. <scriptlanguage=”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.
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
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, &&neboandlogickýsoučin, ||neboorlogickýsoučet • podmíněný operator: podmínka?výraz1:výraz2 • spojovánířetězců: operator tečka. • operátorčárka,oddělujevýrazy – v hlavičcecyklu for • bitovéoperátory
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 ); - indexyzačínají od dvojky
Pole $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četprvků v poli current() – vrací aktuální hodnotu indexu next() – posune index nadalší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č
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 } else { příkazy }
Struktury příkazů 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říkazyvevětvi se stejnouhodnotoujakoumávýrazza switch dokud se nenarazína break (nepovinný) nebokonecpříkazuswitch
Struktury 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 { příkazy } while (podmínka) cyklus se provádí dokud platí podmínka, příkazy se provedou alespoň jednou
Struktury příkazů 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
Struktury příkazů 6. cyklus foreach používá se při procházení všemi prvky pole foreach ($pole as $hodnota) {příkazy;} – odkazpouzenaprvek pole foreach ($pole as $index =>$hodnota) {příkazy;} - odkaznaprvek pole ijeho index 7. přerušenícyklu a) break – úplnéukončenícyklu b) continue – ukončíaktuálníprůchodcyklu a vrátí se najehozačátek, cykluspokračuje c) break počet; continue počet; - opustíněkolikcyklůnajednou
Struktury příkazů 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”
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
Formuláře Jsou jednou z možností jak může komunikovat uživatel (stránka HTML ) se serverem kde jsou stránky uloženy.
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 = “<?phpPHP_SELF ?>“ Atribut methodlze 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
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
Práce se soubory 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
Práce se soubory 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
Práce se soubory $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)
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
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
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ř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‘ 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 <formaction=“soubor.php“ method=“GET/POST“> … </form> přístup k datům $_GET[$jmeno_prvku_formuláře] nebo $_POST[$jmeno_prvku_formuláře]
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_start(); $_SESSION[“username“] = … ; ?>
Proměnné SESSION 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 Př. <?php session_unset ($_SESSION[“username“] ); if (!$_SESSION[“username“] ) echo “odhášen” ?>
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-Cookienazev = 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“;}
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.
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 primarykey 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, …);
Základní příkazy MySQL 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 nazevpoletyppole; na konec věty ALTER TABLE nazevtab ADD nazevpoletyppole FIRST/AFTER nazevpole; - smazání pole ALTER TABLE nazevtab DROP nazevpole; - změna definice pole ALTER TABLE nazevtab MODIFY nazevpolenovytyppole;
Základní příkazy MySQL 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;
Použití MySQL v PHP 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)
Použití MySQLv PHP 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);