NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

if (15 > 5)
    echo('Pravda');
echo('<br />Program zde pokračuje dál.');

Výstup programu nyní bude:

Tvoje stránka
localhost

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:

Složené závorky - Základní konstrukce jazyka PHP

Ukažme si další příklad:

$a = 10;
$b = 0;
if ($b != 0) {
    $vysledek = $a / $b;
    echo('Podíl: ' . $vysledek);
}
if ($b == 0)
    echo('Nulou nelze dělit!');

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í.

$a = 10;
$b = 0;
if ($b != 0) {
    $vysledek = $a / $b;
    echo('Podíl: ' . $vysledek);
} else
    echo('Nulou nelze dělit!');

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:

$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);

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:

$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);

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:

Kalkulačka
localhost/kal­kulacka/kalku­lacka.html

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 ifelse 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

 

Předchozí článek
Řešené úlohy k 6. lekci PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 7. lekci PHP
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
362 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity