Lekce 7 - Podmínky v PHP
V předešlém cvičení, Řešené úlohy k 6. lekci PHP, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
V dnešním PHP tutoriálu si rozšíříme naši kalkulačku o další funkce. Budeme k tomu potřebovat podmínky.
Podmínky
Podmínky (neboli programátorsky větvení) umožňují, aby se skript nechoval stále stejně, ale aby reagoval na různé situace. Nejčastěji reagujeme na vstup od uživatele nebo různé události (např. že požadovaný článek neexistuje).
Pokud jste již programovali v nějakém céčkovém jazyce, budete se nyní
asi chvilku nudit
Podmínku zapíšeme pomocí klíčového slova if
, za kterým
následuje v závorce logický výraz. Pokud je výraz pravdivý, vykoná se
následující příkaz. Pokud výraz pravdivý není, následující příkaz
vykonán nebude a program pokračuje až pod ním.
Zkusme si to:
{PHP}
if (15 > 5)
echo('Pravda');
echo('<br />Program zde pokračuje dál.');
{/PHP}
Výstup programu nyní bude:
Operátory
V podmínce jsme použili operátor >
(větší). Ve
výrazech můžeme dále používat tyto relační operátory:
Operátor | C-like zápis |
---|---|
Rovnost | == |
Je ostře větší | > |
Je ostře menší | < |
Je větší nebo rovno | >= |
Je menší nebo rovno | <= |
Nerovnost | != |
Obecná negace | ! |
Rovnost zapisujeme dvěma ==
proto, aby se nepletla s běžným
přiřazením do proměnné, které se dělá jen jedním =
. Pokud
chceme nějaký výraz znegovat, napíšeme ho do závorky a před něj
vykřičník.
Součástí výrazu samozřejmě mohou být i proměnné. Když budeme chtít
vykonat více než jen jeden příkaz, musíme příkazy vložit do bloku ze
složených závorek {}
.
Složené závorky se píšou pomocí klávesy pravý Alt a znaku B nebo N:

Ukažme si další příklad:
{PHP}
$a = 10;
$b = 0;
if ($b != 0) {
$vysledek = $a / $b;
echo('Podíl: ' . $vysledek);
}
if ($b == 0)
echo('Nulou nelze dělit!');
{/PHP}
Skript výše spočítá a vypíše podíl dvou proměnných. Pokud je druhá proměnná nulová, skript vypíše chybu, jelikož nulou se samozřejmě dělit nedá. Pokud by proměnné pocházely od uživatele a my bychom je podmínkou neošetřili, mohl by nám takový uživatel aplikaci i rozbít. S ošetřením uživatelských vstupů úzce souvisí bezpečnost webových aplikací a během seriálu uvidíte, jak moc je to důležité.
else
Podmínku výše jsme napsali vlastně dvakrát, jednou normálně a jednou
znegovanou. Kdyby byla podmínka složitější, mohli bychom v její negaci
udělat chybu. Pokud chceme, aby se něco provedlo v případě, že podmínka
platí, a něco jiného v případě, že podmínka neplatí, použijeme
klíčové slovo else
. Do větve else
program zaběhne
v případě, že podmínka neplatí.
{PHP}
$a = 10;
$b = 0;
if ($b != 0) {
$vysledek = $a / $b;
echo('Podíl: ' . $vysledek);
} else
echo('Nulou nelze dělit!');
{/PHP}
Pokud by ve větvi else
bylo více příkazů, opět by musely
být obsaženy v bloku ze složených závorek.
Větev else
se také využívá v případě, kdy potřebujeme v
příkazu manipulovat s proměnnou z podmínky a nemůžeme se tedy na
proměnnou ptát potom znovu. Program si sám pamatuje, že se podmínka
nesplnila, a přejde do sekce else
. Ukažme si to na příkladu:
Mějme číslo v proměnné $a
, kde bude hodnota 0
nebo 1
. Po nás se bude chtít, abychom hodnotu prohodili (bude-li
hodnota 0
, dosadíme místo ní 1
, bude-li
1
, dosadíme 0
). Naivně bychom mohli kód napsat
takto:
{PHP}
$a = 0; // do $a si přiřadíme na začátku 0
if ($a == 0) // pokud je $a 0, dáme do něj jedničku
$a = 1;
if ($a == 1) // pokud je $a 1, dáme do něj nulu
$a = 0;
echo($a);
{/PHP}
Kód nefunguje, že? Pojďme si projít, co bude program dělat. Na začátku
máme v proměnné $a
nulu, první podmínka se jistě splní a
dosadí do proměnné $a
jedničku. No ale rázem se splní i
druhá podmínka. Co s tím? Když podmínky otočíme, budeme mít tentýž
problém s jedničkou. Jak z toho ven? Ano, použijeme větev
else
:
{PHP}
$a = 0; // do $a si přiřadíme na začátku 0
if ($a == 0) // pokud je $a 0, dáme do něj jedničku
$a = 1;
else // pokud je $a 1, dáme do něj nulu
$a = 0;
echo($a);
{/PHP}
Nyní vše funguje tak, jak má. Ohledně podmínek platí ještě další teorie, kterou si dopovíme příště. Nyní si pomocí nabytých znalostí rozšiřme naši kalkulačku.
Rozšíření kalkulačky
Začněme HTML formulářem, do kterého přidáme volbu pro zvolení
početní operace. Do formuláře přidáme tag <select>
,
jímž zvolíme, kterou početní operaci chceme vykonat. Pro úplnost si
uveďme celý HTML soubor:
<!DOCTYPE html> <html lang="cs"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <p>Vítejte v kalkulačce, zadejte 2 čísla a operaci.</p> <form method="POST" action="vypocet.php"> <input name="cislo1" type="text" /><br /> <input name="cislo2" type="text" /><br /> Operace: <select name="operace"> <option value="scitani">Sčítání</option> <option value="odcitani">Odčítání</option> <option value="nasobeni">Násobení</option> <option value="deleni">Dělení</option> </select><br /> <input type="submit" value="Vypočítej" /> </form> </body> </html>
Výsledek vypadá takto:
Až se formulář odešle, budeme mít v superglobálním poli
$_POST['operace']
hodnotu podle toho, kterou možnost uživatel
vybral.
Přejděme do obslužného skriptu, kterým byl dříve
soucet.php
. Jelikož název již neodpovídá tomu, co skript
dělá, přejmenovali jsme ho na vypocet.php
. Dovnitř dodejme
větvení a ochranu před dělením nulou.
Nejprve si pro přehlednost na začátku skriptu načtěme vstupy z pole
POST
do proměnných. Nemusíme tak stále opisovat
$_POST
a kód bude přehlednější.
$a = $_POST['cislo1']; $b = $_POST['cislo2']; $operace = $_POST['operace'];
Dále vložíme větvění na výpočet podle operace. Jelikož je
zbytečné, aby se v ověřování obsahu proměnné operace pokračovalo i v
případě, že se nějaká operace provedla, použijeme sekvenci
if
… else if
…
if ($operace == 'scitani') $vysledek = $a + $b; else if ($operace == 'odcitani') $vysledek = $a - $b; else if ($operace == 'nasobeni') $vysledek = $a * $b; else if ($operace == 'deleni') { if ($b != 0) $vysledek = $a / $b; else $vysledek = 'Chyba'; } echo("Výsledek: $vysledek");
Kód by měl být jasný. Někdy se můžeme setkat s tím, že se větev
else if
spojí do jednoho slova (elseif
). Pokud je
operací např. sčítání, další větev else
se již
nevyhodnotí, protože podmínka platila, a přejde se rovnou k vypsání
výsledku. Je tedy vždy vykonáno jen tolik podmínek, kolik je potřeba.
V následujícím cvičení, Řešené úlohy k 7. lekci PHP, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 1391x (1.48 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP