370 likes | 494 Views
Funkce a procedury. Funkce a procedury mají za úkol vykonávat určitou činnost, která se opakuje na několika místech skriptu. Obě se definují klíčovým slovem function .
E N D
Funkce a procedury • Funkce a procedury mají za úkol vykonávat určitou činnost, která se opakuje na několika místech skriptu. Obě se definují klíčovým slovem function. • Funkce vrací hodnotu, jsou tedy výrazem a lze jejich výsledek přiřadit např. proměnné. Kód funkce i procedury je uvozen do složených závorek. • Název funkce i procedury není citlivý na velká a malá písmena.
Funkce a procedury <?phpfunctionjméno (parametr1, parametr2, ...){sekvence příkazů;returnnávratová hodnota;} • Funkce obsahuje klíčové slovo return. Proměnná nebo výraz uvedená za return se vrátí jako výsledná hodnota a provádění funkce končí. • Parametry lze vynechat, pokud nepotřebujeme v těle funkce či procedury zpracovávat hodnoty předané z vnějšku.
Funkce a procedury functionsoucet () // Toto je funkce vracející hodnotu { $x = 1; $y = 2; return $x + $y; } ------------------------------------------------------------------------------------------------ functionvypis() // Toto je procedura { echo "Hello world"; }
Argumenty • Umožňují předat funkci nebo proceduře vstupní hodnoty. function dvojnasobek ($cislo) { return $cislo * 2; } echo dvojnasobek(6); // volání funkce – vypíše 12 • Funkce převezme hodnotu odpovídající parametru, kterou pak použije pro výpočet návratové hodnoty.
Argumenty předávané hodnotou • Proměnná parametru (např. $cislo) uvnitř funkce pracuje s kopií hodnoty, která je jí předána (např. $a). Změna parametru ($cislo), nezmění předanou hodnotu proměnné ($a). function dvakrat ($cislo) // argument – konstanta nebo proměnná { $cislo = $cislo * 2; return $cislo; } $a = 6; echo "proměnná \$a = ".$a;6 echo "<br>výsledek provádění funkce dvakrat() = ".dvakrat($a); 12 echo “<br>proměnná \$a = ".$a;6
Argumenty předávané hodnotou • Argumenty předávanými hodnotou mohou být: • literáty(čísla, textové znaky, kombinace obojího) • konstanty • proměnné • výsledky provádění jiné funkce • kombinace výše zmíněných functionjmeno_funkce (1) functionjmeno_funkce (MAX) functionjmeno_funkce ($x, $y) functionjmeno_funkce (jina_funkce($a), “součet”)
Argumenty předávané odkazem • Proměnná parametru (např. $cislo) uvnitř funkce pracuje přímo s proměnnou, která je jí předána (např. $a). Změna parametru ($cislo), změní předanou hodnotu proměnné ($a). function dvakrat (&$cislo)// argument MUSÍ být proměnná!!! { $cislo = $cislo * 2; return $cislo; } $a = 6; echo "proměnná \$a = ".$a;6 echo "<br>výsledek provádění funkce dvakrat() = ".dvakrat($a); 12 echo “<br>proměnná \$a = ".$a;12
Platnost proměnné • Proměnné deklarované uvnitř funkce, nejsou platné vně funkce!!!! functionzmena_A() { $a = 10; } $a = 20; zmena_A(); echo $a; // vypíše 20 Proměnné $anejsou totožné!!! Proměnná $a uvnitř funkce neovlivní hodnotu proměnné použité v hlavním skriptu.
Příkazy „require“ a „include“ • Liší se ve zpracování chyb, ale hlavně v tom, že require se například v příkazech cyklu provede jen jednou, zatímco include se může provádět opakovaně. • Umožňují načítat do skriptu z externího souboru: • části jiných skriptů • části stránek • funkce definované uživatelem Prakticky: • Vkládání uživatelských funkcí do více stránek • Vytvářet a uzavírat spojení s databází na více stránkách • Vytvořit standardní hlavičku stránek … atd …
Příkaz „require“ // ----- vypis.php -------------------------- <?php echo "Toto je voláno z vypis.php<br>"; ?> // ----- skript.php ------------------------- <?php require("vypis.php"); echo "Další běh skriptu"; ?> Chybějící soubor ve volání require vyvolá fatální chybu.
Příkaz „include“ // ----- vypis.php -------------------------- <?php echo "Toto je voláno z vypis.php<br>"; ?> // ----- skript.php ------------------------- <?php include("vypis.php"); echo "Další běh skriptu"; ?> Chybějící soubor ve volání include vyvolá varování, skript pokračuje dál.
Globální proměnné Globální proměnné – jejich hodnota je platná (viditelná) ve všech částech aktuálního skriptu (stránky), ve kterém je definovaná. “Superglobální” proměnné – jejich hodnotu lze přenášet mezi stránkami webového sídla. 1. Globální proměnné v rámci stránky – $GLOBALS 2. Zpracování dat z formuláře – metody odeslání dat GET a POST 3. Sdílení obsahu proměnné mezi stránkami – SESSION a COOKIE 4. Proměnné, které vytváří prostředí PHP a webový server
Globální proměnná $GLOBALS • Jedná se o globální proměnnou, která je viditelná ve všech částech skriptu (aktuální stránky), ve kterém je definovaná. ------------------------------------------------------------------------------------------------- $GLOBALS["cislo"] = 2; functionzmen() { $GLOBALS["cislo"] = $GLOBALS["cislo"] + 10; } zmen(); echo $GLOBALS["cislo"]; // vypíše číslo 12
Metoda GET • Data jsou předána obsluhujícímu skriptu pomocí URL adresy. Lze využít jak u zpracování dat z formuláře, tak např. při navigaci v rámci stránky. ------------------------------------------------------------------------------------------------- Zadejte Vaše jméno: <br><br> <formaction=“vypis.php" method=“GET"> Jméno: <input name=“jmeno" type="text"><br> Příjmení: <input name=“prijmeni" type="text"> <input name=“tlacitko" type="submit" value=“Vypsat"> </form>
Metoda GET • Obsah skriptu vypis.php ------------------------------------------------------------------------------------------------- <?php echo“Vaše jméno: ”.$_GET[‘jmeno'].”<br>”; echo“Vaše příjmení: ”.$_GET[‘prijmeni'];?> -------------------------------------------------------------------------------- http://www.vasestranky.cz/vypis.php?jmeno=Antonin&prijmeni=Skopec&tlacitko=Vypsat
Metoda GET • http://www.vasestranky.cz/obsluha.php?prom1=hodn1&prom2=hodn2 ------------------------------------------------------------------------------------------------- ? – odděluje URL stránky od přenášených dat proměnná = hodnota – název proměnné a její hodnota &– Oddělení jednotlivých proměnných + – nahrazuje mezeru ------------------------------------------------------------------------------------------------- Všechny ostatní speciální znaky a písmena s háčkem nebo čárkou jsou překódovány do hexadecimální podoby.
Metoda GET • Chcete-li přenášet v rámci URL adresy login a heslo, je dobré tyto hodnoty zakódovat pomocí funkcí definovaných v PHP: Pro zakódování dat v URL se používá funkce base64_encode– zakóduje data pomocí MIME base64 base64_decode– dekóduje data kódovaná pomocí MIME base64 Pro přenášení hesel a jejich ukládání do databáze se doporučuje používat např. funkcisha1, nemající zpětný ekvivalent !!! Popis těchto funkcí – viz. manuál k PHP
Metoda POST Data se neposílají v URL stránky, ale jsou součástí těla požadavku webovému serveru. Slouží k odesílání většího objemu dat, obrázků, atd. ------------------------------------------------------------------------------------------------- Zadejte Vaše jméno: <br><br> <formaction=“vypis.php" method=“POST"> Jméno: <input name=“jmeno" type="text"><br> Příjmení: <input name=“prijmeni" type="text"> <input name=“tlacitko" type="submit" value=“Vypsat"> </form>
Metoda POST Obsah skriptu vypis.php ------------------------------------------------------------------------------------------------- <?php echo“Vaše jméno: ”.$_POST[‘jmeno'].”<br>”; echo“Vaše příjmení: ”.$_POST[‘prijmeni'];?> --------------------------------------------------------------------------------
Metoda POST • Odesílají-li se z formuláře metodou POST kromě textu také soubory (např. obrázky), je potřeba v definici formuláře nastavit atribut: enctype = “multipart/form-data” <formaction=“vypis.php" method=“POST" enctype=“multipart/form-data"> Atribut enctype udává způsob zakódování odesílaných dat.
Úkol • Vytvořte jednoducho kalkulačku využijte funkce eval(): eval ("\$vysledek =5 + 5;")
Řešení <form method="POST"> <b>Zadej první číslo, operaci a druhé číslo</b> <br> <br> <input type="text" size="20" name=A> <select size="4" name=operace> <option>+</option> <option>-</option> <option>*</option> <option>/</option> </select> <input type="text" size="20" name=B> <input type="submit" value="OK"> </form> $a= $_POST["A"]; $b= $_POST["B"]; $operace= $_POST["operace"]; eval("\$vysledek = $a $operace $b ;"); echo "$a $operace $b = "; echo $vysledek;
Řešení 2 <form method="POST"> <b>Zadej první číslo, oparaci a druhé číslo</b> <br> <br> <input type="text" size="20" name=A> <select size="4" name=operace> <option>+</option> <option>-</option> <option>*</option> <option>/</option> </select> <input type="text" size="20" name=B> <input type="submit" value="OK"> </form> Lépe s kontrolou zadání $a= $_POST["A"]; $b= $_POST["B"]; $operace= $_POST["operace"]; if (empty($a) &&empty($b)&&empty($operace) ) { echo"<font color=\"#FF0000\">Nic nebylo zadáno</font>"; } else { eval("\$vysledek = $a $operace $b ;"); echo "$a $operace $b = "; echo $vysledek; }
Úkol • Vytvořte přihlašovací obrazovku, po přihlášení: • Pokud se přihlásíte jako Alena (heslo Alena), spustí se příklad kalkulačka • Pokud se přihlásíte jako Pepa (heslo Pepa), spustí se příklad formuláře $name = $_POST ['name'];// $HTTP_POST_VARS $password = $_POST [' password']; if($name=="pepa"&&$password="pepa"){header("Location: knihyv1.php");} • Header: přesměrování stránky • Funkci headerpoužít dříve, než vypíšeme jakýkoli výstup!!
Řešení • Musí být ve dvou souborech! <HTML> <BODY> <form method="POST" action="5heslo_run.php"> <input type="text" size="20"name=name> <input type="text" size="20" name=password> <input type="submit" value="OK"> </form> </BODY> </HTML> Lepší řešení použít fci md5() nebo sha1() <?php $name = $_POST['name']; $password = $_POST['password']; if($name=="pepa"&&$password="pepa") {header("Location:formulare.php");} if($name=="alena"&&$password="alena") {header("Location:kalkulacka.php");} echo "Sorry" ; ?>
COOKIES • Jedná se o jednoduché textové řetězce ve formátu jméno=hodnota uložené na počítači klienta. • Cookies umožňují sdílet hodnoty mezi jednotlivými stránkami webového sídla. • Pozor!!! Pokud má internetový prohlížeč vypnutou podporu cookies, nelze s nimi pracovat, neboť je prohlížeč v případě požadavku neodesílá webovému serveru. • Mylný je názor, že cookies mohou poškodit počítač nebo odesílat citlivá data z počítače klienta!!! • Cookie proměnná je použitelná do doby, dokud nevyprší její platnost nebo dokud není smazána z disku počítače klienta.
Ukládání COOKIES • V PHP je pro ukládání cookies funkce: setcookie(“nazev”,“hodnota”,expire,“path”,secure); setcookie(“nazev_cookie”, “hodnota”); • jelikož cookies se posílají v hlavičce odpovědi webovému serveru, je potřeba funkci setcookie() volat před jakýmkoliv výstupem z vašeho skriptu včetně značek <html> a <head> ! setcookie(“nazev_cookie”, “hodnota”, time()+3600); • Třetí parametr je nepovinný a definuje dobu platnosti cookie, zde je nastavena doba platnost na 1 hodinutime()+3600
Čtení COOKIES • Pro čtení cookie se v PHP používá “superglobální” proměnné: • $_COOKIE [“nazev_cookie”] ------------------------------------------------------------------------------------------------- <?php $zakaznik = “Jan Pavel”; setcookie(“jmeno”, $zakaznik, time()+3600); echo “Vaše jméno je ”.$_COOKIE[“jmeno”]; ?> Pozn.:Cookies bez udané doby platnosti jsou zapomenuty po ukončení práce s prohlížečem a většina prohlížečů je vůbec na disk neukládá.
výpis pole • Pro výpis obsahu pole print_r($_COOKIE) ------------------------------------------------------------------------------------------------- <?php $a = array ('a' => 'jablko', 'b' => 'ananas', 'c' => array ('x', 'y', 'z')); print_r ($a); ?> • Array ( [a] => jablko [b] => ananas [c] => Array ( [0] => x [1] => y [2] => z ) )
MazáníCOOKIES • Při mazání cookie se musí zajistit, aby doba vypršení platnosti cookie byla v minulosti, čímž se v prohlížeči zapne mechanismus odstranění cookie. setcookie (“nazev_cookie", "", time() - 3600); • Pokud je přítomný pouze argument nazev, u klienta se smaže cookie tohoto jména. ------------------------------------------------------------------------------------------------- • Kterýkoliv argument můžete také nahradit prázdným řetězcem (""), čímž tento argument přeskočíte. Argumenty expire a secure jsou celočíselné a nedají se přeskočit prázdným řetězcem. Místo toho použijte nulu (0).
COOKIES • Nevýhody použití cookies: • Použití cookies lze zakázat v prohlížeči • Uživatel může obsah cookie ručně změnit nebo smazat • Informace uložené v cookies jsou snadno čitelné (textový řetězec)
SESSION proměnné • Umožňují přenášet hodnoty mezi jednotlivými stránkami webového sídla. • Nelze je uživatelem zakázat v prohlížeči – spolehlivé sdílení hodnot ! • Pokud chceme na stránce využívat session proměnné, zavoláme funkci session_start().Poté bude prohlížeči přidělen unikátní identifikátor, tzv. Session ID. Pomocí tohoto Session ID se přenáší session proměnné mezi skripty. Vytvoření session proměnné: • od PHP 5.4.0 nelze: session_register("název_proměnné") • $_SESSION[“název_proměnné”]Doporučuji používat !
SESSION proměnné • Přehled vybraných funkcí pro práci se session proměnnými: session_start() - vytvoří session (ID). session_id() - zjistí aktuální session ID. session_regenerate_id() - změní aktuální session ID.unset ($_SESSION['varname']) - odstraní všechny session proměnnou.session_destroy() - odstraní aktuální session.
SESSION proměnné • Data spojená s probíhající session jsou umístěna většinou v souboru na serveru. • Příklad obsahu souboru reprezentující sessions: id|i:1;cas|i:1096972373;stranek|i:8; • O veškerou režii spojenou s tímto souborem se stará PHP. • Session je platná: 1. Dokud ji nezrušíme pomocí funkcí pro práci se sessions 2. Dokud se nezavře okno prohlížeče
Proměnné web serveru a PHP • Jedná se o proměnné vytvářené webovým serverem: $_SERVER[‘nazev_promenne’] • a proměnné vytvářené prostředím PHP: $_ENV[‘nazev_promenne’] • Obsah těchto proměnných lze vypsat např. pomocí funkce phpinfo(). • Proměnné a jejich obsah (hodnoty) lze ve skriptech běžně používat. Přehled těchto proměnných naleznete např. v manuálu PHP: www.php.net
Výpis obsahu souboru <?php $soubor_jmeno = "files/dopis.txt"; if (file_exists($soubor_jmeno) && filesize($soubor_jmeno) > 0): $soubor = fopen($soubor_jmeno, "r"); $text = fread($soubor, filesize($soubor_jmeno)); echo $text; fclose($soubor); else: echo "<p>Žádná data k vypsání<p><hr />"; endif; ?>
Zápis do souboru <?php $soubor_jmeno = "files/dopis2.txt"; $soubor = fopen($soubor_jmeno, "w"); fwrite($soubor, "Sem se píšeobsah"); fclose($soubor);?>