Autor Zpráva
MaxDJs
Profil *
Zdravím,

bylo by možno mi poradit, proč mi nefunguje rozhodování? Ať do proměnné peníze zadám jakoukoli částku vypisuje mi to pouze "Můžete si dát kávu."

Tady je kód:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<h1> Automat </h1>
<p>Nabídka nápoju:</p>
<ul>
<li>Káva: 6,- Kc</li>
<li>Caj: 10,- Kc</li>
<li>Kakao: 25,- Kc</li>
</ul>
<p>Zadejte obnos peněz:</p>

<p>
<?php
$kava = 6;
$caj = 10;
$kakao = 25; 
$penize = 10;


if ($penize >= $kava):
echo "Mužete si dát kávu.";
elseif ($penize >= $caj):
echo "Můžete si dát čaj.";
elseif ($penize >= $kakao):
echo "Můžete si dát kakao.";
else
echo "Dal jste do automatu málo peněz";

?>
</p>
</body>
</html>
Davex
Profil
Tak elseif funguje. Při splnění první podmínky se další větve neprovádějí. Aby se provedlo poslední else, tak by peněz muselo být méně jak 6.
HajekJirka
Profil
MaxDJs:
Správně by to bylo bez else.
Pouze if(podmínka), if (podmínka), atd. Potom Ti to vypíše co vše si za své peníze můžeš koupit.
Keeehi
Profil
To co používáš je alternativní syntaxe. (Doporučil bych ji nepoužívat)
Struktura vypadá takto:
<?php
if ($a == 5):
    echo "a equals 5";
    echo "…";
elseif ($a == 6):
    echo "a equals 6";
    echo "!!!";
else:
    echo "a is neither 5 nor 6";
endif;
?>
(zvýraznil jsem to, co tobě chybí)

Lepší je verze se závorkami:
<?php
if ($a > $b) {
    echo "a is bigger than b";
} elseif ($a == $b) {
    echo "a is equal to b";
} else {
    echo "a is smaller than b";
}
?>

A jelikož je v nich je jeden příkaz, můžou se vynechat. Ale to bych spíše nedoporučoval. Později tam řádek přidáš a pak tu chybu hledej. Ale je to možné. Viz
<?php
if ($a > $b)
    echo "a is bigger than b";
elseif ($a == $b)
    echo "a is equal to b";
else
    echo "a is smaller than b";
?>

A za další, ta logika je špatně.
EDIT: viz [#2] a [#3]
Tori
Profil
mohlo by to být pořadím:
if  ($penize >= $kakao):
  echo "Můžete si dát kakao.";
elseif ($penize >= $caj):
  echo "Můžete si dát čaj.";
elseif ($penize >= $kava):
  echo "Mužete si dát kávu.";
else:
  echo "Dal jste do automatu málo peněz";
endif;

"Jakoukoli částku" znamená zřejmě "jakoukoli vyšší nebo rovno ceně kafe" (při $penize==0 by se mělo objevit "málo peněz")? Taky pokud je první podmínka splněna, další (elseif) se přeskočí.

edit: pardon, všimla jsem si nových příspěvků, ale ruka byla rychlejší
Nox
Profil
Keeehi:
Později tam řádek přidáš a pak tu chybu hledej
Že píšeš 2. řádek a nemáš tam závorky si všimneš (pokud nejsi zvyklý na endif nebo python), vynechávám kde můžu a ikdyž dělám kvanta nepozorností, tak toto se mi ještě nestalo
Keeehi
Profil
Nox:
Taky je vynechávám, ale jelikož začíná tak bych rozhodně doporučil závorky psát všude. Až bude zkušenější, klidně ať si je vynechává.
Nox
Profil
Oka
AM_
Profil
Keeehi:
To co používáš je alternativní syntaxe. (Doporučil bych ji nepoužívat)
mohu vědět, proč?
sám ji občas použivám (např. když mám podmínku nebo cyklus na výpis většího úseku HTML) - tam mi přijde přehlednější mít <?php endif?> místo <?php }?>
Keeehi
Profil
AM:
Už jenom třeba pro to, že některé programy zvýrazňují závorky patřící k sobě. Ano, odsazováním je také vidět, která závorka ke které patří, ale při delším kódu, kde se musí scrollovat už se může člověk lehce ztratit.
Konstrukce
if(){ }
je ve všech programovacích (nebo alespoň v drtivé většině). Není důvod, proč se zbytečně odlišovat. Navíc je tato konstrukce používána prakticky pořád. Jsou případy, kdy ta alternativní syntaxe vypadá lépe (viz tvůj příklad, také se mi to jeví jako přehlednější), avšak tyto případy rozhodně nepřevažují.

Moje doporučení tedy není kvůli tomu, že by alternativní syntaxe by byla pro php script nějak náročná (rychlost, paměť, atd.).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0