Nadešel čas pozastavení a zopakování doposud probraného učiva. Na uvedených úkolech si ověřte, zda jste všechno dobře pochopili a dokážete i použít. Nejprve si prohlédněte stručný přehled toho nejpodstatnějšího z minulých lekcí. I stručný výpis je už dost obsáhlý, pro další podrobnosti je potřeba se vrátit do příslušných lekcí (ale třeba si pamatuješ víc než já :-) ).

Opakování

Kód PHP do zdroje stránky vkládáme mezi <?php a ?>

Příkazy výstupu (výpisu do zdroje stránky): print nebo echo, například:
echo $jmeno, " pocita: 11.4 -($a + $b) =",11.4-($a+$b);
Jednotlivé části výpisu jsou oddělené čárkou (lze použít i tečku která spojí řetězce, kromě hodnot výrazů), $jmeno, $a, $b jsou názvy proměnných, uvozovkami je uzavřeno to, co chceme prostě opsat, bez uvozovek je číselný výraz, u kterého chceme vypsat hodnotu (výsledek).

Komentáře: //řádkový komentář , /* víceřádkový komentář */

Proměnné - název proměnné začíná znakem $, na rozdíl od jiných jazyků není potřebovat určovat jejich typ, je možné do nich uložit například:
- celá čísla zhruba od -2 bilionů do +2 bilionů
- reálná (desetinná) čísla s desetinnou tečkou, mohou mít více než 300 cifer
- řetězce (sady znaků), zapsané v uvozovkách
- vložení hodnoty do proměnné: $a=8; $jmeno="Karel";
- operace s proměnnými - matematické operátory: + - * / % (zbytek po dělení)

Zkrácené zápisy operací:
$a -= 1 (znamená $a = $a-1)
$a -= $b+$c (znamená $a = $a-($b+$c)
$a /= 2 (znamená $a = $a/2)
$a *= $b (znamená $a = $a*$b)
$a %= 3 (znamená $a = $a%3 - určí zbytek po dělení $a číslem 3)
++$i nebo $i++ (znamená $i = $i+1)
--$i nebo $i-- (znamená $i = $i-1)

Funkce pro práci s proměnnými:
isset(proměnná); - zjištění existence proměnné
unset ($jmeno); - zrušení proměnné

Pole proměnných - pro více proměnných (zatím jsme měli jen jakoby očíslované proměnné, indexy mohou být i jiné):
cena[0], cena[1], cena[2], cena[3].

Systémová pole globálních proměnných:
$_POST - pole proměnných z formuláře
$_GET - pole proměnných předaných v adrese
$_REQUEST - pole obsahující všechny vstupní proměnné
$_SERVER - různé systémové proměnné, například $_SERVER["REMOTE_ADDR"] - IP adresa klientského počítače
$_COOKIE - vytvoření proměnné u uživatele: SetCookie ("pocitadlo", $hodnota, time()+31536000); - musí být použito před hlavičkou stránky
$_SESSION - pole proměnných přístupných mezi stránkami, session_start(); - nastartování, session_destroy(); - ukončení

Funkce pro práci s poli:
Count($POLE); - počet prvků pole
empty($POLE) - zjistí, zda je pole prázdné
extract($POLE) - "rozbalení" pole, vyextrahování proměnných
$pole = Explode (":", "Petr:Pavel:Karel") - do proměnných pole se uloží části původního řetězce oddělené daným znakem (oddělovačem)
$retezec = Implode ($pole,":") - vytvoření řetězce spojením proměnných pole pomocí daného znaku

Vstup z formuláře - metoda POST:
formulář:
<form name="kalkulator" action="vypocet.php" method="post">
<input type="text" name="scitanec1" value="" />
<input type="submit" value="vypočti" />
</form>

Po odeslání formuláře se otevře soubor vypocet.php uvedený v parametru action (je-li action="" otevře se tentýž soubor, ve kterém je formulář), kde můžeme použít proměnnou s názvem scitanec1 (viz name textového pole) z pole $_POST (případně pole $_REQUEST), například:
<?php
$cislo=$_POST["scitanec1"];
echo $cislo;
?>
Všechny proměnné můžeme najednou "vybalit" z pole $_POST příkazem extract($_POST), potom je můžeme přímo použít s názvy uvedenými jako parametry name polí formuláře.

Větvení programu (podmíněné příkazy):
if (podmínka) příkaz1; else příkaz2;
V podmínkách můžete používat tyto operátory (znaménka):
== - rovná se
!= nebo <> - nerovná se
> (resp. <) - větší (resp. menší)
>= (resp. <=) - větší nebo rovno (resp. menší nebo rovno)
if ($heslo=="1234") echo "Jste přihlášen"; else echo"Chybné heslo!";

if ($rakousko=="Vídeň") {$spravne++; echo "výborně";} else echo"chyba";
//více příkazů do složené závorky
Místo složené závorky lze použít dvojtečku, potom se musí použít endif :
if ($rakousko=="Vídeň"): $spravne++; echo "výborně"; else: echo"chyba"; endif;

Vícenásobné větvení:
if ($pocet_chyb == 0) echo "Výborně! Žádná chyba je skvělý výsledek.";
elseif ($pocet_chyb < 2) echo "Výborný výsledek.";
elseif ($pocet_chyb < 3) echo "Ještě dobrý výsledek.";
else echo "Žádný učený z nebe nespadl.";
Vícenásobné větvení pomocí příkazu switch :
<?php $jmeno="Dominik";
switch ($jmeno) {
case "Michal": echo ("Vítej Michale"); break;
case "Martin": echo ("Vítej Martine"); break;
default: echo ("Vítej neznámý vojíne"); } ?>

Logické operátory:
and (a současně) , or (nebo) , xor (právě jedna hodnota je pravdivá), ! (negace) , && (a současně) , || (nebo)
Příklad logického součinu ze 7.lekce:
if ($bmi > 20 and $bmi <= 25) echo "ideální váha";
Negaci jsme použili například pro kontrolu, zda byl odeslaný formulář (není prázdné pole $_POST):
if (!empty ($_POST))

Příkazy cyklu:
For použijeme, pokud dopředu známe počet opakování:
for ($i=0;$i<4;$i++) {echo "cena ", $i+1,". polozky: ", $cena[$i], " <br />";$celkem=$celkem+$cena[$i];};
While je potřeba, pokud chceme příkazy opakovat do splnění nějaké podmínky:
while ($a<>$b) {if ($a>$b) $a=$a-$b; elseif ($b>$a) $b=$b-$a; }

Příkazy pro práci s řetězci:
S řetězci je možné pracovat také jako s poli znaků, některé další příkazy:
strlen($str) - délka řetězce
strpos($str1,$str2) - určení první pozice řetězce $str2 v řetězci $str1
substr($str,zacatek,delka); - výběr podřetězce od daného počátku dané délky
substr_count ($str1,$str2) - určuje počet výskytů řetězce $str2 v řetězci $str1
str_replace("\n"," <br> ", $zprava); - nahrazení prvního řetězce druhým v daném řetězci

Vložení souboru do zdroje: include (může se opakovat) nebo require (nemůže se opakovat):
include "tvorba/informat/hodnoceni/index.php";

Hodnoty předané jako součást URL adresy - metoda GET:
Za adresou stránky a otazníkem je vždy název proměnné a její hodnota, je-li proměnných víc, jsou oddělené ampersandem (&):
<a href="index.php?odkaz=mesta">Zeměpisný test</a>
Hodnoty těchto proměnných jsou obsažené v poli $_GET. Ve spojení s příkazem include lze vytvořit index, do kterého se podle hodnot z odkazu načítá příslušná stránka:
<?php
extract($_GET);
if (empty($_GET)) {include "uvod.php";}
elseif ($odkaz=="mesta") include "mesta.php";
?>

Zápis a čtení ze souboru:
Název souboru (případně s cestou) použijeme vícekrát, proto ho uložíme do proměnné: $filename="pokus.dat";
Abychom mohli se souborem pracovat, musíme vytvořit ukazatel na tento soubor funkcí FOpen:
$fp=FOpen($filename,"r+");
První parametr je název soubor, druhý určuje režim pro otevření (co bude možné se souborem dělat):
"r" - jen pro čtení
"r+" - pro čtení i zápis
"w" - vytváří nový soubor, nelze z něj číst
"w+" - vytváří nový soubor pro čtení i zápis
"a" - připisuje na konec, nelze číst
"a+" - připisuje na konec, i pro čtení

$hits=FRead($fp,filesize($filename)); - načtení obsahu celého souboru do proměnné $hits
Fwrite($fp,$hits); - zápis proměnné $hits do souboru určeného deskriptorem $fp
Rewind($fp); - "skok" na začátek souboru
FClose($fp); - zavření souboru
file_exists($filename); - ověření existence souboru

Další použité i nepoužité funkce PHP:
Date("d.m.Y H:i:s"); - aktuální datum
time(); - aktuální čas
HTMLSpecialChars($jmeno); - převede některé znaky na entity
stripslashes($jmeno); - odstraní lomítka
header("location: next.php"); - přesměrování na jinou stránku
SRand((double)MicroTime()*1e6); - inicializace generátoru náhodných čísel (s běžně používaným parametrem)
Rand(0,100); - náhodné číslo od 0 do 100 (včetně obou mezí), často se používá Rand()%($max); - zbytek po dělení libovolného čísla horní hranicí, pro náhodná čísla z intervalu od $a do $b (včetně): Rand()%($b-$a+1)+$a;

Speciálním tématem byl upload souborů v 16. lekci.


Úkoly (vyber si úkoly alespoň za 8 bodů):

Úkol (2 body)

Návštěvní knihu ze 13. lekce doplň o datum a čas příspěvku.

Úkol (2 body)

Jednoduché počítadlo z 11. lekce zaznamenává každé otevření dalšího odkazu. Uprav toto počítadlo tak, aby byla vždy započtena skutečně jen nová návštěva - to znamená po zavření a otevření prohlížeče.

Úkol (3 body +1 bod za další dva citáty, +2 body za načtení ze souboru)

Pomocí scriptu vypiš náhodně vybraný citát, můžeš využít připravené pole:
$citaty=Array ("Život měříme skutky a ne časem. /Seneca/","Ani jednou nejde vstoupit do téže řeky. /Kratylos/", "Myslím, tedy jsem. /Descartes/","Učení = mučení. /život/");
Pozn.: Budeš potřebovat příkazy nepoužité v lekcích, ale uvedené v přehledu výše.

Úkol (minimálně 4 body)

Vytvoř anketu pro volbu naší ŠKOLNÍ MISS. Využij alespoň pět fotografií děvčat z loňského školního roku.

Úkol (minimálně 4 body)

Vytvoř test použitelný na naši školní stránku v sekci On-line testy. Zadání můžeš získat od vyučujícího.

Úkol (body podle užitečnosti a zpracování zdroje, minimálně 4 body)

Najdi na internetu další ukázku využití PHP (zdroj scriptu) bez databází, uprav ji pro PHP5 a dostatečně okomentuj (především doposud neprobírané příkazy). Nezapomeň uvést zdroj.

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_18_10A_PHP18
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.