BF Summer sales
Pouze tento týden sleva až 80 % na HTML & CSS a JavaScript
80 % bodů zdarma na online výuku díky naší Letní akci!

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:

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

Výstup programu nyní bude:

Your page
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 !
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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:

Složené závorky

Udělejme 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á, 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í.

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

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 $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:

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

Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku máme v $a nulu, první podmínka se jistě splní a dosadí do $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 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á. 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>
    <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 $_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 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 else if spojí do jednoho slova (elseif). Pokud je operace např. sčítání, další 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í.


 

Stáhnout

Staženo 1109x (1.01 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

Předchozí článek
Řešené úlohy k 5. lekci PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
42 hlasů
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 College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (20)

 

 

Komentáře

Avatar
Jiří Jeřábek (thechorcheecz):20.12.2013 16:38

Zdravím chcise zeptat proč nefunguje tohle?

$a = 10;
$b = 0;
$vysledek = $a / $b;
if ($b != 0)
{

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

mluvím o tom $vysledek= $a / $b; proč nejde nadeklarovat napřed mezi proměnýma? proč se to dává až do toho if??

 
Odpovědět
20.12.2013 16:38
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
mkub:20.12.2013 16:43

lebo riadok

$vysledek = $a / $b;

vyhadzuje chybu delenia nulou, najprv treba otestovat, ci je $b rovne nule, pokial nie je rovne nule, az potom sa moze pristupit k deleniu, preto sa to dava az do podmieneneho bloku

 
Odpovědět
20.12.2013 16:43
Avatar
Odpovídá na mkub
Jiří Jeřábek (thechorcheecz):20.12.2013 16:48

to sice ano ale nebylo lepší to napřed nadeklarovat? a pak si to jen zavolat ? pro přehlednost né?

 
Odpovědět
20.12.2013 16:48
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
mkub:20.12.2013 17:11

myslis ako funkciu?
tak napr. takto:

$a = 10; $b = 0;
function delenie ($a, $b) {
  if ($b != 0) {
    return $a/$b;
  } else {
    return ("Nulou sa neda delit");
  }
}
echo (delenie ($a, $b));

dalsi priklad:

$a = 10; $b = 0;
function delenie ($a, $b) {
  return $a/$b;
}
if $b = 0 {
  echo (delenie ($a, $b));
} else {
  echo ("Nulou sa neda delit");
}

cize vyraz $vysledok = $a / $b musi byt uzatvoreny v podmienke, lebo PHP ak nenatrafi na podmienku, vyhodnocuje kazdy jeden vyraz a tento vyraz pri $b=0 vyhodnoti ako chybu

 
Odpovědět
20.12.2013 17:11
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
Kit:20.12.2013 18:20

Dávám přednost výjimkám:

function deleni ($a, $b) {
    if ($b == 0)
        throw new Exception('Nulou nelze dělit');
    return $a/$b;
}

$a = 10;
$b = 0;
echo (deleni($a, $b));
Odpovědět
20.12.2013 18:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:23.12.2013 23:33

jenom u té první ukázky if nemělo by to být špiš tahle

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

mě to jinak hází chybu

 
Odpovědět
23.12.2013 23:33
Avatar
Kit
Redaktor
Avatar
Odpovídá na studnicka.ji
Kit:23.12.2013 23:39

Kromě páru závorek navíc v tom nevidím rozdíl. Asi máš něco špatně, protože mně to chybu nehází.

Co vlastně znamená "mě to jinak hází chybu"? Nějak té větě nerozumím.

Editováno 23.12.2013 23:40
Odpovědět
23.12.2013 23:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 8:37

nwm ted mi to jde taky, tak nevím asi jsem včera večer něco přehlídl, ráno modřejší večera, včera jesm tu byl do 1 večer

 
Odpovědět
24.12.2013 8:37
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 15:53

fakt nevím kde mám chybu a prohlížeč mi hlásí: https://imageshack.com/i/5k3cfp

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

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=("Nulou nelze dělit");
}

echo("Výsledek: $vysledek");
Editováno 24.12.2013 15:54
 
Odpovědět
24.12.2013 15:53
Avatar
Odpovídá na studnicka.ji
Matúš Petrofčík:24.12.2013 16:08

osetril si vstup, že ak nebude poslané cislo1, cislo2 alebo operace, aby sa kod nevykonal? :)

Odpovědět
24.12.2013 16:08
obsah kocky = r^2 ... a preto vlak drnká
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 16:16

ne :D jak ?

 
Odpovědět
24.12.2013 16:16
Avatar
Odpovídá na studnicka.ji
Matúš Petrofčík:24.12.2013 16:24

napríklad pomocou funkcie isset(), pozri prvy riadok :)

if (isset($_POST["cislo1"]) && isset($_POST["cislo1"]) && isset($_POST["cislo1"]))
{
        $a = $_POST["cislo1"];
        $b = $_POST["cislo2"];
        $operace = $_POST["operace"];

        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 = "Nulou nelze dělit";
                }
         else
                $vysledek = "Neplatna volba";
}
else
        $vysledek = "Nezadal si niektoru volbu";

echo("Výsledek: $vysledek");

taktiež som pridal else ak nebola zadané niektoré číslo alebo voľba

else
        $vysledek = "Nezadal si niektoru volbu";

a else ak nebola zadaná správna voľba

else
       $vysledek = "Neplatna volba";
Odpovědět
24.12.2013 16:24
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Salieri
Člen
Avatar
Odpovídá na studnicka.ji
Salieri:24.12.2013 16:25

Ahoj,

hodíš sem nám kod, pak obrázek... že je chyba na lajně 24 a jak máme poznat která lajna je 24? :)) Prosím příště celý kod.

S.

Odpovědět
24.12.2013 16:25
Hlavní zlo? **Školství a Matematika**!
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 16:54

echo("Výsledek: $vysledek"); tohle je 24

 
Odpovědět
24.12.2013 16:54
Avatar
Odpovídá na studnicka.ji
Matúš Petrofčík:24.12.2013 17:01

ale už ti to funguje či nie?

inak v tom tvojom kóde máš

$vysledek=("Nulou nelze dělit");

čo som ja zmenil na

$vysledek="Nulou nelze dělit";

bez tých zátvoriek, ale neviem či je toto chyba alebo to tak môže byť

Odpovědět
24.12.2013 17:01
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Martin Konečný (pavelco1998):24.12.2013 17:05

Zkusím to vysvětlit tak, aby to bylo pochopitelné pro začátečníka:

$_POST je pole, které již je v PHP definováno. Ze začátku je prázdné (nejsou v něm žádné hodnoty). Naplní se až v případě, že se odešle formulář, jehož metoda je nastavena na post (method="post").

V článku je napsán odstavec: "Až se formulář odešle, budeme mít v $_POST['operace'] hodnotu podle toho, jakou možnost uživatel vybral."

Důležité je to slovo "až". Pokud se pokusíš použít např. $_POST["operace"] ještě dříve, než se formulář odešle, hodí ti PHP chybu, protože je to pole prázdné.

Proto je nutné zjistit, zda to pole prázdné není. Můžeš použít isset(), jak ti radil kolega. Ta zjišťuje, jestli daná proměnná existuje.

Pokud použiji tuto část scriptu:

<?php

if (isset($_POST["cislo1"]) && isset($_POST["cislo1"]) && isset($_POST["cislo1"]))
{
      $a = $_POST["cislo1"];
      $b = $_POST["cislo2"];
      $operace = $_POST["operace"];
}

Tak pokud soubor poprvé otevřeš, v poli $_POST nejsou žádné hodnoty. Proto to neprojde přes podmínku if a neprovede se žádná operace.
Když ale odešleš formulář, uloží se hodnoty do $_POST a stránka se načte znovu. Tentokrát to ale přes podmínku projde, protože $_POST["operace"], $_POST["cislo1"] a $_POST["cislo2"] existuje.

// Ten článek jsem nečetl, takže pokud opakuji něco, co v něm už je, tak se omlouvám.

Odpovědět
24.12.2013 17:05
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Kit
Redaktor
Avatar
Odpovídá na studnicka.ji
Kit:24.12.2013 17:17
$vysledek=("Nulou nelze dělit");

Copak je string "Nulou nelze dělit" výsledek? Přemýšlej trochu logicky. To není výsledek, ale chybová hláška.

Odpovědět
24.12.2013 17:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 19:49

stále to nejede, ale chápu to, ale nechápu když on tam taky nemá inset a jede mu to...

Editováno 24.12.2013 19:50
 
Odpovědět
24.12.2013 19:49
Avatar
Matúš Petrofčík:24.12.2013 20:44

vytvoril som ti index.php súbor
http://leteckaposta.cz/536268821
predpokladám že html trochu rozumieš a vieš prečo to tam je tak ako to tam je :)

<?php
if (isset($_POST["cislo1"]) && isset($_POST["cislo2"]) && isset($_POST["operace"]))
{
        $a = $_POST["cislo1"];
        $b = $_POST["cislo2"];
        $operace = $_POST["operace"];

        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 = "Nulou nelze dělit";
                }
         else
                $vysledek = "Neplatna volba";
}
else
        $vysledek = "Nezadal si niektore cislo alebo volbu";
?>
<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8" />
                <title>Titulka stránky</title>
        </head>
        <body>
                <p>
                        <form method="post">
                                <input type="number" name="cislo1" />
                                <input type="number" name="cislo2" />
                                <input type="text" name="operace" />
                                <input type="submit" value="Vykonaj!" />
                        </form>
                </p>
                <p>
                        <?php echo("Výsledek: $vysledek"); ?>
                </p>
        </body>
</html>

taktiež som si všimol chybu v kóde ktorý sme ti písali, kde namiesto

if (isset($_POST["cislo1"]) && isset($_POST["cislo1"]) && isset($_POST["cislo1"]))

má byť

if (isset($_POST["cislo1"]) && isset($_POST["cislo2"]) && isset($_POST["operace"]))

kde sme mali zle názvy premenných :[

Editováno 24.12.2013 20:46
Odpovědět
24.12.2013 20:44
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na studnicka.ji
Matúš Petrofčík:24.12.2013 20:46

studnicka.ji: prečítaj si komentár vyššie, zabudol som ťa označiť :)

Odpovědět
24.12.2013 20:46
obsah kocky = r^2 ... a preto vlak drnká
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:24.12.2013 21:31

jj to mě taky napadlo mrknu nato a uvidím zda se někam dohrabu :D

 
Odpovědět
24.12.2013 21:31
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:25.12.2013 7:55

tak fakt nevím co je jinak pokud si ten výpočtet zkopíruju podle sdraca tak mi taky neběží ale to jsem si stahl tak to běží

Editováno 25.12.2013 7:56
 
Odpovědět
25.12.2013 7:55
Avatar
Salieri
Člen
Avatar
Salieri:1.1.2014 20:51

Zdravím,

Začal jsem od začátku projíždět a zkoušet si PHP podle zdejších tutoriálů a naprogramoval jsem si tuto kalkulačku, vše se tvářilo v pořádku. Vypl jsem počítač odjel jsem pryč, no a teď jsem zapnul znova PC, nastartoval jsem wampserver a kalkulačka mi vyhazuje tyto chyby. Jak zadám hodnoty dvou čísel, tak je vše zas v normálu.

Přikládám dvě fotografie a zdrojový kod PHP...

<?php
if(isset($_POST["cislo1"])){
$cislo1=$_POST["cislo1"];
$cislo2=$_POST["cislo2"];
$operace= $_POST["operace"];
}
/* Pro sčítání */
if($operace=='scitani'){
     $vysledek = $cislo1+$cislo2;
     }
/* Pro odčítání */
else if($operace=='odcitani'){
     $vysledek = $cislo1-$cislo2;
}
/* Pro násobení */
else if($operace=='nasobeni'){
     $vysledek = $cislo1*$cislo2;
}
/* Pro dělení */
else if ($operace=='deleni'){
     if($cislo2!=0){
     $vysledek = $cislo/$cislo2;
     }
     else{
        echo("Nulou nelze dělit!");
     }

}
echo ("Výsledek:".$vysledek);
Odpovědět
1.1.2014 20:51
Hlavní zlo? **Školství a Matematika**!
Avatar
Odpovídá na Salieri
Patrik Valkovič:1.1.2014 21:01

Předpokládám že se to objeví když příjdeš poprvé. Je to způsobeno tím, že jakmile příjdeš poprvn, tak není nastaveno $_POST['cislo1'], tudíž se ti nevytvoří proměnná $operace, se kterou dále pracuješ. Celý ten kód musíš vložit do té podminky if(isset($_POS­T['cislo1]))

Editováno 1.1.2014 21:02
Odpovědět
1.1.2014 21:01
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Salieri
Kit:1.1.2014 21:03

Zřejmě máš prázdné pole $_POST a tím se ti nenaplní $cislo1, $cislo2 ani $operace.

Odpovědět
1.1.2014 21:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Salieri
Člen
Avatar
Odpovídá na Patrik Valkovič
Salieri:1.1.2014 21:04

Ano máš pravdu, mělo mě to napadnout hned....

Díky za radu.

Odpovědět
1.1.2014 21:04
Hlavní zlo? **Školství a Matematika**!
Avatar
Kit
Redaktor
Avatar
Odpovídá na Salieri
Kit:1.1.2014 21:08

Tady by se hodil switch.

Odpovědět
1.1.2014 21:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Salieri
Kit:1.1.2014 21:22
<?php

function operace($cislo1, $cislo2, $operace) {
    switch ($operace) {
    case 'scitani' : return $cislo1 + $cislo2;
    case 'odcitani' : return $cislo1 - $cislo2;
    case 'nasobeni' : return $cislo1 * $cislo2;
    case 'deleni' :
        if($cislo2 == 0) throw new Exception("Nulou nelze dělit!");
        return $cislo / $cislo2;
    }
    throw new Exception("Neznámá operace '$operace'");
}

if (isset($_POST["cislo1"]) && isset($_POST["cislo1"]) && isset($_POST["operace"])){
    try {
        echo ("Výsledek:" . operace( $_POST["cislo1"], $_POST["cislo2"], $_POST["operace"]));
    } catch (Exception $e) {
        echo $e->getMessage(), "\n";
    }
}
Odpovědět
1.1.2014 21:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Salieri
Člen
Avatar
Odpovídá na Kit
Salieri:1.1.2014 21:23

Budu pokračovat na další tutoriál, tam se switch rozebírá.
Ale děkuji za ukázku. :)

Odpovědět
1.1.2014 21:23
Hlavní zlo? **Školství a Matematika**!
Avatar
Vasekdvor
Člen
Avatar
Odpovídá na Salieri
Vasekdvor:28.3.2014 0:04

No pro testovací účely to bude vyhazovat undefined variable přesně z důvodu jak psali výše ale na live servech většinou je nastavený
error_reportin­g(E_ALL ^ E_NOTICE);
což je také výchozí nastavení PHP. Takže tam to neuvidíš.

 
Odpovědět
28.3.2014 0:04
Avatar
banicm
Člen
Avatar
banicm:3.4.2014 21:34

Vsetko je skvele mili priatelia ... len stale nechapem, co mam so stiahnutymi zdrojakmi urobit.
Stiahol som si zip, rozbalil do adresara ... pre istotu

C:\Php\xampp\htdoc­s\Kalkulacka2

... a neviem co dalej ?
Apache mam spusteny, spustim NetBeans 8.0 ale ako nacitam existujuci projekt ?

Dakujem za kazdu reakciu :)

Pekny zvysok dna
Martin

 
Odpovědět
3.4.2014 21:34
Avatar
Odpovídá na banicm
Neaktivní uživatel:3.4.2014 21:37

V php se běžně nepoužívají projekty jako v C# a Javě. Prostě si v editoru pootevíráš potřebné soubory a ukládáš je.

Odpovědět
3.4.2014 21:37
Neaktivní uživatelský účet
Avatar
banicm
Člen
Avatar
banicm:3.4.2014 21:42

:) no fajn, ale co mam teda urobit ? Mam v NB8.0 ist cez File-->Open File ?

... ak to urobim a chcem to spustit zelenou ikonkou (Run Project) samozrejme to nejde, lebo ziaden projekt nemam ...

Kde sa docitam uplne primitivny navod pre zaciatocnika, ako mam spravne postupovat ?

 
Odpovědět
3.4.2014 21:42
Avatar
banicm
Člen
Avatar
banicm:3.4.2014 21:45

Dobre Jirko,

ak si v editoru otvorim jednotlive subory, tak ako to potom ladim ?

Myslis pod editorom PSPad ? alebo IDE NetBeans ?

Dakujem :)
Martin

 
Odpovědět
3.4.2014 21:45
Avatar
Odpovídá na banicm
Neaktivní uživatel:3.4.2014 21:49

No, v podstatě si výsledek prohlížíš v prohlížeči po zadání příslušné adresy (tady by to bylo http://localhost/Kalkulacka2/). Pokud bys chtěl debugovat PHP tak, jako C# ve Visual Studiu, tak by sis musel koupit PHP Storm, který to umí (žádnou jinou alternativu neznám).

Odpovědět
3.4.2014 21:49
Neaktivní uživatelský účet
Avatar
Odpovídá na banicm
Neaktivní uživatel:3.4.2014 21:50

A editovat to můžeš v čemkoliv chceš, Netbeens, Notepad++, Sublime, PSPad - to je jen na tobě.

Odpovědět
3.4.2014 21:50
Neaktivní uživatelský účet
Avatar
banicm
Člen
Avatar
Odpovídá na Neaktivní uživatel
banicm:3.4.2014 22:29

ok, dakujem za cenne info :)

Pekny zvysok dna
Martin

 
Odpovědět
3.4.2014 22:29
Avatar
Levin
Člen
Avatar
Levin:5.4.2014 11:39

Když mi to po odeslání na výsledek zobrazí prázdnou stránku, php se neprovede... Kde je problém? Dělá to po stažení těch kódů.

 
Odpovědět
5.4.2014 11:39
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Levin
David Čápka:5.4.2014 12:23

Máš tam chybu a máš vypnuté zobrazování chyb.

Odpovědět
5.4.2014 12:23
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Levin
Člen
Avatar
Odpovídá na David Čápka
Levin:5.4.2014 12:45

Kde ve wampu zapnu to zobrazování? Když třeba napíšu něco špatně nebo zapomnu ukončit řádek ; tak se mi ta chyba zobrazí, jaká je tahle?

PS: Je to stažený přímo odtud, nic jsem v tom neupravoval.

 
Odpovědět
5.4.2014 12:45
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Levin
David Čápka:5.4.2014 12:57

To přece můžeš zkusit jednoduše, dej na začátek toho souboru třeba echo('Zkouška'); Když to nic nenapíše, tak je někde chyba :) Nebo si ten místní kód zkopíruj do nějakého souboru, který ti funguje. Musíš prostě zkoušet, když nám sem napíšeš "Mně to nejde, mám tam bílo", tak je asi 10 možných scénářů a píše to sem pořád někdo. Musíte být trochu samostatní.

Odpovědět
5.4.2014 12:57
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
vojtanosek
Člen
Avatar
vojtanosek:29.5.2015 16:22

Potřeboval bych poradit. Pořád mě to podtrhuje to celý řádek s dělením. Už nevím jak to opravit. Zkoušel jsem vše co jsem věděl :(. I když jsem to přehodil tak zase bylo podtržené třeba násobení pod tím podmínkou if. Zde je kód:

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

       if ($operace == 'násobení');
       $výsledek= $a * $b;

       else if ($operace == 'dělení')
           $výsledek=$a/$b;

           else if ($operace == 'sčítání')
               $výsledek=$a+$b;

           else if ($operace =='odčítání')
               $výsledek=$a-$b;
           {
            if ($b != 0);
           $výsledek= $a / $b;
           else
           $výsledek = "chyba";
           }
           echo ("Výsledek: $výsledek");
 
Odpovědět
29.5.2015 16:22
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
vojtanosek
Člen
Avatar
vojtanosek:29.5.2015 16:26

Edit: Opraveno. Neviděl jsem chybu. Neměl jsem tam mít znak ;.

 
Odpovědět
29.5.2015 16:26
Avatar
Lukáš Landa:20.8.2015 20:33

Ahoj programátoři, potřeboval bych pomoc. V podmínkách mám problém hned na začátku tím myslím

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

NetBeans IDE 8.0.2 nehlásí chybu jen se mi tam ukázalo tzv. žárovička s trojúhelníčkem s hláskou "If-Else Statements Must Use Braces" (chtělo to tyto závorky { } )

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

což opravu udělá i samo. Po této opravě už nehlásilo vůbec žádnou chybu ,ale pokud to dám vyzkoušet "Play" tak se mi na stránce neukáže jako v ukázce

Pravda
Program zde pokračuje dál.

ale namísto toho mi vyskočí

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'C:/xampp/htdocs/Podmínky/podminky.php' (include_path='.;C:\xampp\php\PEAR') in Unknown on line 0

Samozřejmě jsem se koukal na komentáře i ostatních, ale řešení tam není.

Ještě podotknu že veškeré nastavení či instalaci jsem dělal dle pokynů z 2. dílu viz.: http://www.itnetwork.cz/…kalni-server

Do teď mi vše šlapalo jak mělo, ale s tímto si nevím rady doufám že mi někdo racionálně vysvětlí co s tím. Předem díky.

Odpovědět
20.8.2015 20:33
„Lepší je si to posrat podle svého, než podle toho, co ti radí ty druzí.“
Avatar
Lukáš Landa:20.8.2015 21:50

VYŘEŠENO

Problém byl v adrese, použil jsem diakritiku, já mam název souboru ve windows-1250 a NetBeans mi do adresy rvalo UTF-8 :-))

Odpovědět
20.8.2015 21:50
„Lepší je si to posrat podle svého, než podle toho, co ti radí ty druzí.“
Avatar
Odpovídá na Salieri
Michal Pácal:14.11.2015 11:47

lepší by bylo si výsledek dopředu nastavit a taky kód provést pouze pokud je něco odesláno

<?php
if($_POST)
{
        $vysledek='';
        /* Pro sčítání */
        if($_POST['operace']=='scitani')
                $vysledek = $_POST["cislo1"]+$_POST["cislo2"];

        /* Pro odčítání */
        else if($_POST['operace']=='odcitani')
                $vysledek = $_POST["cislo1"]-$_POST["cislo2"];

        /* Pro násobení */
        else if($_POST['operace']=='nasobeni')
                $vysledek = $_POST["cislo1"]*$_POST["cislo2"];

        /* Pro dělení */
        else if ($_POST['operace']=='deleni')
        {
                if($cislo2!=0)
                {
                        $vysledek = $_POST["cislo1"]/$_POST["cislo2"];
                }
                else
                {
                        echo("Nulou nelze dělit!");
                }
        }

        /* Chybná hodnota */
        else
                echo('Chybná operace');

        if($vysledek != '')
                echo("Výsledek:".$vysledek);
}
 
Odpovědět
14.11.2015 11:47
Avatar
pgarsky
Člen
Avatar
pgarsky:14.6.2016 18:25

Jak to, že ten vysledek = X není psán do složených závorek?

Odpovědět
14.6.2016 18:25
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Honza.G
Člen
Avatar
Honza.G:25.12.2016 13:47

Jen dotaz, nvm proč, ale když jsem předtím udělal ty formuláře a tak, nechtěl omi to fungovat psalo to error a nepředávalo se(aji když dáme do url ty hodnoty nefungovalo). Nevíte co s tím?

 
Odpovědět
25.12.2016 13:47
Avatar
Pavel Šrytr
Člen
Avatar
Pavel Šrytr:9.3.2017 17:13

Ahoj, chtěl bych se zeptat jestli v PHP existuje i switch (jako v C-like jazycích).

 
Odpovědět
9.3.2017 17:13
Avatar
Odpovídá na Pavel Šrytr
Matúš Petrofčík:9.3.2017 17:23

Samozrejme :) http://php.net/…s.switch.php

<?php
if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
?>
Odpovědět
9.3.2017 17:23
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Pavel Šrytr
Člen
Avatar
Odpovídá na Matúš Petrofčík
Pavel Šrytr:10.3.2017 15:28

Děkuji, stačilo se kouknout do další lekce :D

 
Odpovědět
10.3.2017 15:28
Avatar
Jakub Walenta:29.9.2017 10:18

Zdravím,

chtěl bych se zeptat, proč mi NetBeans hlásí, že nemůžu přistupovat k super-globálnímu poli $_POST přímo.
Např. $a = $_POST['a'];
Chyba: Do not acces superglobal _POST array directly.
I přes tuto chybu skript normálně funguje.

Díky za veškerou pomoc.

 
Odpovědět
29.9.2017 10:18
Avatar
Petr Langer
Člen
Avatar
Odpovídá na Jakub Walenta
Petr Langer:29.9.2017 10:31

Je to jen upozornění, že bys měl například zkontrolovat jestli proměná něco obsahuje atd.

 
Odpovědět
29.9.2017 10:31
Avatar
Jakub Walenta:30.9.2017 15:39

Zdravím,

momentálně se výsledek zobrazí na nové stránce. Co musím udělat pro to, aby se výsledek zobrazil na té samé stránce, ale přitom skript byl oddělený od html jako jiný soubor.

Díky za veškerou pomoc.

 
Odpovědět
30.9.2017 15:39
Avatar
Jakub Chuděj:30.9.2017 17:14

No, jestli chceš mít script oddělený, alias "vypocet.php", musíš v tom scriptu odkázat zpátky na tu stránku, ze které do scriptu posíláš údaje a zaslat tam proměnou.. Takže se PHP kódu na stránce s formulářem nevyhneš, jen bude o mnoho kratší. :)

Na konec scriptu dej tohle:
header('Location: kalkulacka.php?vys­ledek='.$vysle­dek);

A na stránku s kalkulačkou dej.
if(isset($_GET['v­ysledek]))
{
$vysledek = $_GET['vysledek'];
}
Potom zobraz normálně proměnnou $vysledek :)

Snad pomohlo. :)
Beru připomínky a rady, napsal jsem to sem z hlavy bez ověření syntaxe, takže snad to bude ok. :D

Odpovědět
30.9.2017 17:14
Kdo chce, hledá způsob, kdo nechce, hledá důvod.
Avatar
Odpovídá na Jakub Chuděj
Jakub Walenta:30.9.2017 17:50

Kód funguje tak částečně. Už se mi sice neotevřela nová stránka, kde se vypíše výsledek, ale vypíše se mi .$result a ne ten číselný výsledek. :D

 
Odpovědět
30.9.2017 17:50
Avatar
dez1nd
Člen
Avatar
Odpovídá na Jakub Walenta
dez1nd:2.10.2017 7:45

Posli radek zdrojaku kde vypisujes $result.

 
Odpovědět
2.10.2017 7:45
Avatar
Odpovídá na dez1nd
Jakub Walenta:2.10.2017 15:05

Už je to vyřešený. Díky za ochotu.. :)

 
Odpovědět
2.10.2017 15:05
Avatar
Ernest Kuki
Člen
Avatar
Ernest Kuki:14.10.2017 14:09

Ahoj, můžete mi prosim poradit. Koukam tu na to jak blazen. Funguje mi jen scitani, at to prehodim na cokoli

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

<?php
$a = $_POST['cislo1'];
$b = $_POST['cislo2'];
$operace = $_POST['operace'];
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");
?>
</body>
</html>

 
Odpovědět
14.10.2017 14:09
Avatar
Petr Langer
Člen
Avatar
Odpovídá na Ernest Kuki
Petr Langer:14.10.2017 14:22

HTML část máš napsanou dobře? Zkontroluj jestli máš správně hodnoty value u tagu option.

 
Odpovědět
14.10.2017 14:22
Avatar
Ernest Kuki
Člen
Avatar
Odpovídá na Petr Langer
Ernest Kuki:14.10.2017 14:27

Vsechno sedi .. Dokonce i když jsem ted zkusil ctrl+c ctrl+v tak mi to nefunguje =X
Pro jistotu jsem davam oba ty soubory:

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

<?php
$a = $_POST['cislo1'];
$b = $_POST['cislo2'];
$operace = $_POST['operace'];
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ýsledná hodnota je: ' $vysledek);
?>
</body>
</html>

<!DOCTYPE html>
<html>
<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 pomocí výběru dojděte k výsledku.</p>

<form method="POST" action="vypocet­.php">
<input name="cislo1" type="text" />

<input name="cislo2" type="text" />

<select name="operace">
<option value="scitani">Sčí­tání</option>
<option value="odcita­ni">Odčítání</op­tion>
<option value="nasobe­ni">Násobení</op­tion>
<option value="deleni">Dě­lení</option>
</select>

<input type="submit" value="Vypočítej" />
</form>

</body>
</html>

 
Odpovědět
14.10.2017 14:27
Avatar
Odpovídá na Ernest Kuki
Štěpán Halíř:14.10.2017 18:57

Ahoj,
máš tam chybku ve výpisu výsledku.
V souboru vypocet.php nahraď řádek

echo ('Výsledná hodnota je: ' $vysledek);

za

echo ('Výsledná hodnota je: ' . $vysledek);

Když uvádíš proměnnou vedle ukončených apostrofů, musíš ji oddělit od zbytku textu právě tou tečkou. Když se podíváš nahoru na řešení, jsou tam použity uvozovky, kde se to takto neodděluje, ale proměnnou píšeš přímo do nich. Když používáš apostrof, tak mysli na oddělení tečkou. Snad jsme to teda tentokrát vyřešili.
P.S.: Příště prosím citace kódů vkládej do tagu pro kód (druhý z levé strany mezi možnostmi úpravy textů). Lépe se v tom orientuje.

Měj se fajn a hodně štěstí s učením

Editováno 14.10.2017 18:59
Odpovědět
14.10.2017 18:57
Per aspera ad astras
Avatar
Ernest Kuki
Člen
Avatar
Odpovídá na Štěpán Halíř
Ernest Kuki:15.10.2017 20:34

Hrozne moc ti dekuju! Byl jsem uz zoufalej =D
Dostal jsem se az do faze kdy jsem tu prepisoval vsechno asi 100x a furt nic =D

 
Odpovědět
15.10.2017 20:34
Avatar
Odpovídá na Ernest Kuki
Štěpán Halíř:15.10.2017 21:00

Není zač. Vidíš sám, v jakým detailu to celou dobu vězelo. Když tu chybku hledáš, tak hlavně v klidu a pečlivě. Nějaké inteligentní IDE by ti s tím mohlo pomáhat. Kdyby zase něco, neboj se napsat, věřím že ti i v budoucnu někdo pomůže, pokud bude vědět. :-)

Odpovědět
15.10.2017 21:00
Per aspera ad astras
Avatar
Miroslav Mucha:31.10.2017 13:03

Ahoj, zkusil jsem kalkulačku trochu upravit. Pro kontrolu vstupních údajů jsem použil funkci array_key_exis­ts(), používám jenom jeden formulář pro vstupní pole i kód,

<title>Kalkulač­ka</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=de­vice-width, initial-scale=1.0">

<h1>Kalkulačka</h1>
<p>Zadejte 2 čísla</p>

<!-- vytvoření vstupního formuláře pro zadání čísel -->
<form method="POST" action="">
<input type="text" name="cislo1" />

<input type="text" name="cislo2" />

<input type="submit" name="soucet" value="+" />
<input type="submit" name="rozdil" value="-" />
<input type="submit" name="soucin" value="*"/>
<input type="submit" name="podil" value="/"/>
</form>

<?php
if(array_key_e­xists('cislo1', $_POST)) // kontrola, zda byl odeslán formulář
{
if // pokud je v jednom nebo v obou polích prázdná hodnota
{
echo "Musíš zadat obě hodnoty";
}
elseif || (!is_numeric($_POS­T['cislo2']))) // pokud je v jednom nebo v obou polích nenumerická hodnota
{
echo "V obou polích musí být číslo";
}
else
{
$cislo1 = $_POST['cislo1']; // přiřadí proměnné $cislo1 hodnotu z pole 1
$cislo2 = $_POST['cislo2']; // přiřadí proměnné $cislo2 hodnotu z pole 2
if(array_key_e­xists('soucet', $_POST)) // pokud je stisknuto tlačítko "plus"
{
$soucet = $cislo1 + $cislo2; // sečte hodnoty a vloží výsledek do proměnné $součet
echo "Výsledek: $cislo1 + $cislo2 = $soucet"; // výsledek vypíše do formuláře
}
if(array_key_e­xists('rozdil', $_POST)) // pokud je stisknuto tlačítko "mínus"
{
$rozdil = $cislo1 - $cislo2; // odečte hodnoty a vloží výsledek do proměnné $rozdíl
echo "Výsledek: $cislo1 - $cislo2 = $rozdil"; // výsledek vypíše do formuláře
}
if(array_key_e­xists('soucin', $_POST)) // pokud je stisknuto tlačítko "krát"
{
$soucin = $cislo1 * $cislo2; // vynásobí hodnoty a vloží výsledek do proměnné $součin
echo "Výsledek: $cislo1 * $cislo2 = ".round($soucin, 2); // výsledek vypíše do formuláře
}
if(array_key_e­xists('podil', $_POST)) // pokud je stisknuto tlačítko "děleno"
{
if($cislo2 == 0) // jestliže je dělitel nula
{
echo "Chyba! $cislo1 : $cislo2
";
echo "Nulou nelze dělit!";
}
else
{
$podil = $cislo1 / $cislo2; // vydělí hodnoty a vloží výsledek do proměnné $podíl
echo "Výsledek: $cislo1 : $cislo2 = ".round($podil, 2); // výsledek vypíše do formuláře
}

}
}
}

 
Odpovědět
31.10.2017 13:03
Avatar
Odpovídá na Miroslav Mucha
Jakub Chuděj:31.10.2017 13:25

Ahoj, kód prosímtě příště vkládej do tagu kódu (2 z leva vedle emotikon), jinak co přesně máš za problém s kalkulačkou? :)

Odpovědět
31.10.2017 13:25
Kdo chce, hledá způsob, kdo nechce, hledá důvod.
Avatar
Miroslav Mucha:31.10.2017 13:28

Díky za info, teď už to snad bude v pořádku. Problém žádný, jen trochu jiná varianta

<title>Kalkulačka</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<h1>Kalkulačka</h1>
<p>Zadejte 2 čísla</p>

<!-- vytvoření vstupního formuláře pro zadání čísel -->
<form method="POST" action="">
    <input type="text" name="cislo1" /><br />
    <input type="text" name="cislo2" /><br />
    <input type="submit" name="soucet" value="+" />
    <input type="submit" name="rozdil" value="-" />
    <input type="submit" name="soucin" value="*"/>
    <input type="submit" name="podil" value="/"/>
</form>

<?php
if(array_key_exists('cislo1', $_POST))  // kontrola, zda byl odeslán formulář
{
    if(($_POST['cislo1'] == "") || ($_POST['cislo2'] == ""))    // pokud je v jednom nebo v obou polích prázdná hodnota
    {
        echo "Musíš zadat obě hodnoty";
    }
    elseif((!is_numeric($_POST['cislo1'])) || (!is_numeric($_POST['cislo2'])))  // pokud je v jednom nebo v obou polích nenumerická hodnota
    {
        echo "V obou polích musí být číslo";
    }
    else
    {
        $cislo1 = $_POST['cislo1']; // přiřadí proměnné $cislo1 hodnotu z pole 1
        $cislo2 = $_POST['cislo2']; // přiřadí proměnné $cislo2 hodnotu z pole 2
        if(array_key_exists('soucet', $_POST))  // pokud je stisknuto tlačítko "plus"
        {
            $soucet =  $cislo1 + $cislo2;   // sečte hodnoty a vloží výsledek do proměnné $součet
            echo "Výsledek: $cislo1 + $cislo2 = $soucet"; // výsledek vypíše do formuláře
        }
        if(array_key_exists('rozdil', $_POST))  // pokud je stisknuto tlačítko "mínus"
        {
            $rozdil =  $cislo1 - $cislo2;   // odečte hodnoty a vloží výsledek do proměnné $rozdíl
            echo "Výsledek: $cislo1 - $cislo2 = $rozdil"; // výsledek vypíše do formuláře
        }
        if(array_key_exists('soucin', $_POST))  // pokud je stisknuto tlačítko "krát"
        {
            $soucin =  $cislo1 * $cislo2;   // vynásobí hodnoty a vloží výsledek do proměnné $součin
            echo "Výsledek: $cislo1 * $cislo2 = ".round($soucin, 2);  // výsledek vypíše do formuláře
        }
        if(array_key_exists('podil', $_POST))   // pokud je stisknuto tlačítko "děleno"
        {
            if($cislo2 == 0)    // jestliže je dělitel nula
            {
                echo "Chyba! $cislo1 : $cislo2 <br />";
                echo "Nulou nelze dělit!";
            }
            else
            {
                $podil =  $cislo1 / $cislo2;    // vydělí hodnoty a vloží vásledek do proměnné $podíl
                echo "Výsledek: $cislo1 : $cislo2 = ".round($podil, 2);   // výsledek vypíše do formuláře
            }

        }
    }
}
 
Odpovědět
31.10.2017 13:28
Avatar
Odpovídá na Miroslav Mucha
Jakub Chuděj:31.10.2017 13:28

Už to vidím, kód jsem si hodil na web, chybí ti tam za podmínkou IF podmínka, za které se to má vykonat, máš tam jen prázdné IF na řádku 24.

EDIT: Jojo, než jsem zareagoval, už jsi sem hodil novější variantu kódu. :)

Editováno 31.10.2017 13:29
Odpovědět
31.10.2017 13:28
Kdo chce, hledá způsob, kdo nechce, hledá důvod.
Avatar
Miroslav Mucha:31.10.2017 13:45

Omlouvám se všem za svůj příspěvek, který jsem vložil ve 13:03. Je ořezaný a tudíž k ničemu. Níže pod ním už je kód kompletní.

 
Odpovědět
31.10.2017 13:45
Avatar
Lukáš Vaněk:20.11.2017 20:57

Prosím nepochopil jsem doplnění kalkulačky kod jsem napsal stejně, potom jsem to pro jistotu zkopíroval ale stejně mi to napiše:
Notice: Undefined index: cislo1 in C:\xampp\htdoc­s\Kalkulacka2\vy­pocet.php on line 14

Notice: Undefined index: cislo2 in C:\xampp\htdoc­s\Kalkulacka2\vy­pocet.php on line 15

Notice: Undefined index: operace in C:\xampp\htdoc­s\Kalkulacka2\vy­pocet.php on line 16

Notice: Undefined variable: vysledek in C:\xampp\htdoc­s\Kalkulacka2\vy­pocet.php on line 31
Výsledek:

vůbec mi to nenabídne možnost něco zadat.

když jsem zkusil vložit pomocnou funkci isset()

if (isset($_POST["cislo1"]) && isset($_POST["cislo2"]) && isset($_POST["operace"]))
        {
        $a = $_POST['cislo1'];
        $b = $_POST['cislo2'];
        $operace = $_POST['operace'];

        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");
        ?>

tak mi to vyhodí : Výsledek: Chyba ale pořád nikde nemohu zadat hodnoty a volbu jakou chci operaci.
Děkuji předem za radu.

 
Odpovědět
20.11.2017 20:57
Avatar
Lukáš Vaněk:20.11.2017 22:41

už jsme to vyřešil .
Problém byl v tom že jsem soubor přejmenoval a i když jsem to přejmenoval na původní název nešlo to.

 
Odpovědět
20.11.2017 22:41
Avatar
Ernest Kuki
Člen
Avatar
Ernest Kuki:20.12.2017 14:26

Diky za tyhle kurzy. Konecne mam zase pocit, že se učím. =)

 
Odpovědět
20.12.2017 14:26
Avatar
Michaela Radimská:3.5.2018 22:13

Proč mne Netbeans (8.2) pořád péruje, že k podmínkám patří složené závorky? Týká se jednořádkových příkazů,které fungují i bez závorek. Doslova píše "if-else statements MUST use braces", případně mi je po udělení souhlasu ochotně doplní. Mám něco přenastavit? Žlutá obrazovka (spousta žlutých vlnovek) je trochu matoucí, snadno pak můžu opomenout nějaké podstatné varování, a zase bez složených závorek mi kód připadá přehlednější.

 
Odpovědět
3.5.2018 22:13
Avatar
Odpovědět
3.5.2018 22:55
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Michaela Radimská:7.5.2018 12:49

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

 
Odpovědět
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.

 
Odpovědět
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 :))

Odpovědět
15.2.2019 20:36
Hľadám si prácu, tak mi smelo napíš mail.
Avatar
Odpovídá 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

Odpovědět
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.

 
Odpovědět
1.4.2019 10:53
Avatar
Jaroslav Smrž
Redaktor
Avatar
Odpovídá 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>
Odpovědět
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>
 
Odpovědět
13.4.2019 13:32
Avatar
Iva.U
Člen
Avatar
Iva.U:23. ledna 12:05

Skvělá lekce, moc dík.

 
Odpovědět
23. ledna 12:05
Avatar
František Červeňák:30. července 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();

?>
 
Odpovědět
30. července 20:35
Avatar
František Červeňák: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();

?>
 
Odpovědět
0:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 84 zpráv z 84.