Java týden
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se Javy.

6. diel - Podmienky v PHP

V predchádzajúcom cvičení, Riešené úlohy k 5. lekcii PHP, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 5. lekcii PHP , sme si ukázali ako fungujú formuláre a vytvorili si jednoduchú kalkulačku. Tá vedela len sčítať. V dnešnom PHP tutoriálu ju rozšírime o ďalšie funkcie. Budeme na to potrebovať podmienky.

Podmienky

Podmienky (alebo ak programátorské vetvenia) umožňujú, aby sa skript nesprával stále rovnako, ale reagoval na rôzne situácie. Najčastejšie reagujeme na vstup od užívateľa alebo rôzne udalosti (napr. Že požadovaný článok neexistuje).

Ak ste už programovali v nejakom céčkovém jazyku, budete sa teraz asi chvíľku nudiť :)

Podmienku zapíšeme pomocou kľúčového slova if, za ktorým nasleduje v zátvorke logický výraz. Ak je výraz pravdivý, vykoná sa nasledujúci príkaz. Ak nie, nasledujúci príkaz vykonaný nebude a program pokračuje až pod ním.

Skúsme si to:

if (15 > 5)
    echo('Pravda');
echo('<br />Program tu pokračuje ďalej.');

Výstup programu teraz bude:

Your page
localhost

Operátormi

V podmienke sme použili operátor > (väčšie). Vo výrazoch môžeme ďalej používať tieto relačné operátory:

operátor C-like zápis
rovnosť ==
Je ostro väčšia >
Je ostro menšia <
Je väčšie alebo rovné > =
Je menšie alebo rovné <=
nerovnosť ! =
Všeobecná negácia !
Rovnosť zapisujeme dvoma == preto, aby sa to neplietlo s bežným priradením do premennej, ktoré sa robí len jedným =. Ak chceme nejaký výraz znegovat, napíšeme ho do zátvorky a pred neho výkričník. Keď budeme chcieť vykonať viac než len jeden príkaz, musíme príkazy vložiť do bloku zo zložených zátvoriek. Súčasťou výrazu samozrejme môžu byť aj premenné.
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Urobme si ďalší príklad:

$a = 10;
$b = 0;
if ($b != 0)
{
    $vysledek = $a / $b;
    echo('Podiel: ' . $vysledek);
}
if ($b == 0)
    echo('Nulou nemožno deliť!');

Skript vyššie spočíta a vypíše podiel dvoch premenných. Ak je druhá premenná nulová, vypíše chybu, pretože nulou sa samozrejme deliť nedá. Ak by premenné pochádzali od užívateľa a my by sme ich podmienkou neošetrili, mohol by nám takýto používateľ aplikáciu aj rozbiť. S ošetrením užívateľských vstupov úzko súvisí bezpečnosť webových aplikácií a počas seriálu uvidíte, ako veľmi je to dôležité.

else

Podmienku sme vyššie napísali vlastne dvakrát, raz normálne a raz znegovanou. Keby bola zložitejšia, mohli by sme v jej negáciu urobiť chybu. Ak chceme, aby sa niečo urobilo v prípade, že podmienka platí a niečo iné v prípade, že podmienka neplatí, použijeme kľúčové slovo else. Do vetvy else program zabehne v prípade, že podmienka neplatí.

$a = 10;
$b = 0;
if ($b != 0)
{
    $vysledek = $a / $b;
    echo('Podiel: ' . $vysledek);
}
else
    echo('Nulou nemožno deliť!');

Ak by vo vetve else bolo viac príkazov, opäť by museli byť obsiahnuté v bloku zo zložených zátvoriek.

else sa tiež využíva v prípade, keď potrebujeme v príkaze manipulovať s premennou z podmienky a nemôžeme sa na ňu teda pýtať potom znova. Program si sám pamätá, že sa podmienka nesplnila a prejde do sekcie else. Ukážme si to na príklade: Majme číslo $a, kde bude hodnota 0 alebo 1 a po nás sa bude chcieť, aby sme hodnotu prehodili (ak tam je 0, dáme tam 1, ak 1, dáme tam 0). Naivne by sme mohli kód napísať takto:

$a = 0; // do $a si priradíme na začiatku 0

if ($a == 0) // ak je $a 0, dáme do neho jedničku
    $a = 1;
if ($a == 1) // ak je $a 1, dáme do neho nulu
    $a = 0;

echo($a);

Nefunguje to, že? Poďme si prejsť, čo bude program robiť. Na začiatku máme v $a nulu, prvá podmienka sa určite splní a dosadí do $a jedničku. No ale razom sa splní aj tá druhá. Čo s tým? Keď podmienky otočíme, budeme mať ten istý problém s jednotkou. Ako z toho von? Áno, použijeme else.

$a = 0; // do $a si priradíme na začiatku 0

if ($a == 0) // ak je $a 0, dáme do neho jedničku
    $a = 1;
else // ak je $a 1, dáme do neho nulu
    $a = 0;

echo($a);

Teraz všetko funguje tak, ako má. K podmienkam je ešte nejaká teória, ktorú si dopovieme nabudúce. Teraz pomocou nadobudnutých znalostí rozšírme našu kalkulačku.

Rozšírenie kalkulačky

Začnime HTML formulárom, do ktorého pridáme voľbu pre zvolenie početné operácie. Pridáme do neho tag <select>, ktorým zvolíme akú početnej operáciu chceme vykonať. Pre úplnosť si uveďme celý HTML súbor:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Kalkulačka</title>
    </head>
    <body>
        <p>Vitajte v kalkulačke, zadajte 2 čísla a operáciu.</p>

        <form method="POST" action="vypocet.php">
            <input name="cislo1" type="text" /><br />
            <input name="cislo2" type="text" /><br />
            Operácie:
            <select name="operace">
                <option value="scitani">Sčítanie</option>
                <option value="odcitani">Odčítanie</option>
                <option value="nasobeni">Násobenie</option>
                <option value="deleni">Delenie</option>
            </select><br />
            <input type="submit" value="Vypočítajte" />
        </form>

    </body>
</html>

Výsledok vyzerá takto:

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

Až sa formulár odošle, budeme mať v $_POST['operace'] hodnotu podľa toho, akú možnosť užívateľ vybral.

Prejdime do obslužného skriptu, ktorým bol predtým soucet.php. Keďže už názov nezodpovedá tomu, čo skript robí, premenoval som ho na vypocet.php. Dovnútra dodajme vetvenia a ochranu pred delením nulou.

Najprv si pre prehľadnosť na začiatku skriptu načíta vstupy z POST do premenných. Nemusíme tak stále opisovať $_POST a kód bude prehľadnejšie.

$a = $_POST['cislo1'];
$b = $_POST['cislo2'];
$operace = $_POST['operace'];

Ďalej vložíme vetvenia na výpočet podľa operácie. Keďže je zbytočné, aby sa v overovaní obsahu premennej operácie pokračovalo aj v prípade, že sa nejaká operácia uskutočnila, použijeme sekvenciu 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ýsledok: $vysledek");

Kód by mal byť jasný. Niekedy sa môžete stretnúť s tým, že sa else if spoja do jedného slova (elseif). Ak je operácia napr. Sčítanie, ďalšie else sa už nevyhodnotí, pretože podmienka platila a prejde sa rovno k vypísanie výsledku. Je teda vždy vykonané len toľko podmienok, koľko je potrebné.

Výsledok máte ako vždy pribalený v archíve nižšie a ja sa na vás teším v budúcej lekcii, Riešené úlohy k 6. lekcii PHP , kedy podmienky dopracujeme.

V nasledujúcom cvičení, Riešené úlohy k 6. lekcii PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Stiahnuť

Stiahnuté 1111x (1.01 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php

 

Predchádzajúci článok
Riešené úlohy k 5. lekcii PHP
Všetky články v sekcii
Základné konštrukcie jazyka PHP
Článok pre vás napísal David Čápka
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn university Autor sa informačné technológie naučil na Unicorn College - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity (1)

 

 

Komentáre

Avatar
Michaela Radimská:7.5.2018 12:49

Pročetla jsem, vyzkoušela varianty, díky :-)

 
Odpovedať
7.5.2018 12:49
Avatar
Stanislav Dittert:17.1.2019 19:28

poctive sem si kod psal sam ale porad mi to hazelo chybu, pak sem zjistil ze sem pridal nechtene znak $ k funkci echo :-( po odstraneni jde v pohode.

 
Odpovedať
17.1.2019 19:28
Avatar
Niesomtu Hraskova:15.2.2019 20:36

Pridávam sa k poznámke Michaeli Radimské a pridavam este toto:
Myslim si ze celý prvý úsek aj so spustitelným kodom je napisaný velmi zmatecne plus taktiez teda poukazujem na nespravny, neuplny php kod ktory tam je.
Po prve: Text vysvetluje podmienku if kde sa konkretne pise o tom ze ak zadana podmienka je pravda(true) ma sa vykonat prvy riadok a ak neplati teda je false ma sa prvy riadokpreskocit a vypisat sa ma az nasledujuci riadok A za tymto nasleduje ukazka kodu ktory tym ze je nespravne napisany teda neuplny..tak sa nevypisuje prvy riadok ako by sa mal kedze 15 > 5 (true), ale vypisu sa oba riadky?? Ak sa da treba tuto chybu napravitpretoze pre cloveka ktory sa uci uplne zaklady a ma v tom chaos by si mohol aj ublizit pri takomto zadani ktore povazuje za alfu a omegu chapania logiky daneho jazyka. inak je kurz super..este jedna chyba bola pri vypracovavani cviceni ale ta mi vyhovovala takze pomlcim :))

Odpovedať
15.2.2019 20:36
Hľadám si prácu, tak mi smelo napíš mail.
Avatar
Odpovedá na Niesomtu Hraskova
Niesomtu Hraskova:16.2.2019 0:18

ne prvy usek vsetko je zle uuplne zle..vazne to prerob alebo vymaz tuto celu lekciu

Odpovedať
16.2.2019 0:18
Hľadám si prácu, tak mi smelo napíš mail.
Avatar
lafleur.aa
Člen
Avatar
lafleur.aa:1.4.2019 10:53

Nejprve bych rád poděkoval za skvěle napsaný seriál, ale měl bych jeden dotaz. Jak sečíst více řádků s formuláři a výsledek vypsat také do furmuláře?
Např. když mám tabulku a v ní formuláře (cislo1, cislo2, vysledek) s tím, že value cislo1 a cislo2 se načítá z databáze. Počet řádků je pak dynamický podle počtu záznamů v DB. Jde mi o to, jak v každém řádku docílit výpočtu

$row['cislo1'] + $row['cislo2']

do příslušného formuláře 'vysledek' v každém řádku. Chápu, že bych to mohl počítat přes SQL dotaz v DB, ale jak by to vypadalo za použití PHP? Děkuji za rady.

 
Odpovedať
1.4.2019 10:53
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
Jaroslav Smrž
Redaktor
Avatar
Odpovedá na lafleur.aa
Jaroslav Smrž:1.4.2019 11:51

Použil bych foreach. Např.

foreach ($db->query($sql) as $row) {
 $vysledek = $row['cislo1'] + $row['cislo2'];
<tr>
       <td><input type="number" class="form-control" name="cislo1" value="<?php echo $row['cislo1']; ?>" readonly></td>
       <td><input type="number" class="form-control" name="cislo2" value="<?php echo $row['cislo2']; ?>" readonly></td>
       <td><input type="number" class="form-control" name="vysledek" value="<?php echo $vysledek; ?>"></td>
</tr>
Odpovedať
1.4.2019 11:51
/* Life runs on code */
Avatar
Martin Kubíček:13.4.2019 13:32

Ahoj, jsem nejake zaklady PHP uz znam z drivejska, presto jsem si radeji mistni tutorialy dal uplne od zacatku, abych si to osvezil, chci se zeptat, jestli tento kod je aspon trosku v poradku, ci zda-li jsou tam nejake hrubky, pripadne jake,udelal jsem to pomoci switch... diky moc

<?php

$a = $_POST['cislo1'];
$b = $_POST['cislo2'];
$ukon = $_POST['ukon'];

if ($b == 0) {
    echo "Nelze delit nulou !!";
}
else

    switch ($ukon) {
        case '+' :
            echo("Vysledek je " . ($a + $b));
            $vysledek = true;
            break;
        case '-' :
            echo("Vysledek je " . ($a - $b));
            $vysledek = true;
            break;
        case '*' :
            echo("Vysledek je " . ($a * $b));
            $vysledek = true;
            break;
        case '/' :
            echo("Vysledek je " . ($a / $b));
            $vysledek = true;
            break;
        default :
            echo("Zadej cisla");


    }


?>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Kalkulačka</title>
</head>
<body>
<p>Kalkulacka</p>


<form method="POST" action="kalkulacka.php">
    <label>Cislo 1</label><br />
    <input name="cislo1" type="text" /><br />
    <td>Operace</td>
    <td><select name="ukon">
            <option value="+">+</option>
            <option value="-">-</option>
            <option value="*">*</option>
            <option value="/">/</option>
        </select></td><br />
    <label>Cislo 2</label><br />
    <input name="cislo2" type="text" /><br />
    <input type="submit" value="Vypocitej" />
</form>

</body>
</html>
 
Odpovedať
13.4.2019 13:32
Avatar
Iva.U
Člen
Avatar
Iva.U:23. januára 12:05

Skvělá lekce, moc dík.

 
Odpovedať
23. januára 12:05
Avatar
František Červeňák:30. júla 20:35
<!DOCTYPE html>
<html lang="sk">
<head>
        <meta charset="UTF-8">
        <title>FUNKCIA - "KALKULAČKA"</title>
        <link rel="stylesheet" href="">
</head>
<body>
             <form action='' method='POST' accept-charset='utf-8'>
                <input type='number' name='a'> <input type='number' name='b'>
                <select name='operacia'>
                        <option value='sucet'>+</option>
                        <option value='rozdiel'>-</option>
                        <option value='sucin'>x</option>
                                <option value='podiel'>:</option>
                </select>
                <input type='submit' name='button' value='vypočítaj'>
             </form><br>
</body>
</html>
           <?php //kód na funkciu kalkulačky:
function kalkulacka(){
             $a='';
             $b='';
             $operacia='';
           if (isset($_POST['button']) AND isset($_POST['a']) AND
                 isset($_POST['b']) AND isset($_POST['operacia'])){

                      $a = $_POST['a'];
                      $b = $_POST['b'];
                      $operacia = $_POST['operacia'];

                  if ($a !="" AND $b !="" AND $operacia !="") {

                 switch ($operacia) {
                        case 'sucet':
                                echo $a + $b;
                                break;

                                case 'rozdiel':
                                echo $a - $b;
                                break;

                                case 'sucin':
                                echo  $a * $b;
                                break;

                                case 'podiel':
                                echo  $a / $b;
                                break;

                        default:
                                echo "error";
                                break;
                                                        }

                                                                  }

                  else{
                echo"Zadajte hodnoty do obidvoch políčok";
                           }


                                }
          else{
                echo"Zadajte hodnoty do políčok";
          }

}

//hotová funkcia, ktorá sa vždy automaticky spustí načítaním horeuvedeného scriptu :
kalkulacka();

?>
 
Odpovedať
30. júla 20:35
Avatar
František Červeňák:5. augusta 0:19

ešte s ošetrením, ak by mal by mal byť deliteľ * 0* :

           <?php //kód na funkciu kalkulačky:
function kalkulacka(){
             $a='';
             $b='';
             $operacia='';
           if (isset($_POST['a']) AND
               isset($_POST['b']) AND
               isset($_POST['operacia'])){

                      $a = $_POST['a'];
                      $b = $_POST['b'];
                      $operacia = $_POST['operacia'];

                  if ($a !="" AND $b !="" AND $operacia !="") {

                 switch ($operacia) {
                            case 'sucet':
                                echo $a + $b;
                                break;

                                case 'rozdiel':
                                echo $a - $b;
                                break;

                                case 'sucin':
                                echo  $a * $b;
                                break;

                                case 'podiel':
                                if($b!=0){
                                echo  $a / $b;}
                                else {echo "error - delenie nulou nie je definované";}
                                break;

                                default:
                                echo "error";
                                break;
                                                        }

                                                                  }

                  else{
                echo"Zadajte hodnoty do obidvoch políčok";
                           }


                                }
          else{
                echo"Zadajte hodnoty do políčok";
          }

}

//hotová funkcia, ktorá sa vždy automaticky spustí načítaním horeuvedeného scriptu :
kalkulacka();

?>
 
Odpovedať
5. augusta 0:19
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!