Lekce 6 - Podmínky v PHP
V předešlém cvičení, Řešené úlohy k 5. lekci PHP, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
V dnešním PHP tutoriálu si rozšíříme kalkulačku o další funkce. Budeme k tomu potřebovat podmínky.
Podmínky
Podmínky (nebo-li programátorsky větvení) umožňují, aby se skript nechoval stále stejně, ale 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 ne, 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 to nepletlo 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íši pomocí klávesy pravý Alt a znaku B nebo N:
Udělejme 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á, 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 jsme výše napsali vlastně dvakrát, jednou normálně a jednou
znegovanou. Kdyby byla 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 na ni tedy 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
a po nás se bude chtít, abychom hodnotu prohodili (pokud tam je
0
, dáme tam 1
, pokud 1
, dáme tam
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}
Nefunguje to, že? Pojďme si projet, 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 ta
druhá. Co s tím? Když podmínky otočíme, budeme mít ten samý 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á. K podmínkám je ještě nějaká teorie, kterou si dopovíme příště. Nyní 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. Přidáme do něj tag <select>
, kterým
zvolíme jakou 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, jakou možnost uživatel
vybral.
Přejděme do obslužného skriptu, kterým byl dříve
soucet.php
. Jelikož již název neodpovídá tomu, co skript
dělá, přejmenoval jsem 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ůžete setkat s tím, že se větev
else if
spojí do jednoho slova (elseif
). Pokud je
operace 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 6. 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 1365x (1.48 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP