Transcript PHP

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
<?php
function jméno (parametr1, parametr2, ...)
{
sekvence příkazů;
return ná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
function soucet ()
// Toto je funkce vracející hodnotu
{
$x = 1;
$y = 2;
return $x + $y;
}
-----------------------------------------------------------------------------------------------function vypis()
{
echo "Hello world";
}
// Toto je procedura
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
function jmeno_funkce (1)
function jmeno_funkce (MAX)
function jmeno_funkce ($x, $y)
function jmeno_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!!!!
function zmena_A()
{
$a = 10;
}
$a = 20;
zmena_A();
echo $a;
// vypíše 20
Proměnné $a nejsou 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;
function zmen()
{
$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>
<form action=“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&prijmen
i=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ř.
funkci sha1, 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>
<form action=“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”
<form action=“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 header použí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 hodinu  time()+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:
1. Použití cookies lze zakázat v prohlížeči
2. Uživatel může obsah cookie ručně změnit nebo smazat
3. 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íše obsah");
fclose($soubor);
?>