Často bývá v programech potřeba dělit jejich běh ne jen do dvou větví jako v minulé lekci, ale do více větví. Pro složitější větvení bychom mohli využít vnořování příkazů IF (IF podmínka příkaz; else if podmínka příkaz), to by ale mohlo být u složitějšího větvení nepřehledné (hlavně, ke kterému IF přísluší které ELSE). Pro vícenásobné větvení jsou v PHP k dispozici také další příkazy - elseif a switch .
Při složitějším větvení programu můžeme vnořit příkazy if do sebe, například takto:
if ($a > $b) { echo "\$a je větší než \$b"; } else { if (!($a == $b)) { echo "\$a je menší než \$b"; } else { echo "\$a je rovno \$b"; } } |
if ($a > $b) { echo "\$a je větší než \$b"; } else { if (!($a == $b)) { echo "\$a je menší než \$b"; } else { echo "\$a je rovno \$b"; } } |
<?php
if (empty ($_REQUEST))
{
?>
<form method="get" action="">
Příjmení: <input name="prijmeni">
<input type="Submit" name="odesli">
</form>
<?php
}
else
{
echo "Mám tě, odeslaný formuláři!
Tys vyplnil ".$_REQUEST["prijmeni"];
}
?>
Příkaz switch využijeme pro větvení programu na základě konkrétně určených hodnot vybrané proměnné (nelze použít znaménka < ani > ). Syntaxi si ukážeme na konkrétním příkladě:
<?php $jmeno="Dominik";
switch ($jmeno) {
case "Michal": echo ("Vítej Michale"); break;
case "Martin": echo ("Vítej Martine"); break;
case "Jirka": echo ("Vítej Jirko"); break;
case "Dominik": echo ("Vítej Dominiku"); break;
default: echo ("Vítej neznámý vojíne"); } ?>
Z ukázky je jasné, že se bude vypisovat hláška podle toho, které jméno je uložené v proměnné $jmeno, v možnosti default je (nebo jsou) příkaz, který se vykoná, pokud není v proměnné žádná z vyjmenovaných hodnot (také je možné místo dvojtečky uzavřít příkazy do složené závorky).
Uvedené příkazy vyzkoušíme na jednoduchém zábavném testu pro volné chvíle založeném na numerologii. Na rozdíl od minulé lekce zkusíme tenotkrát spojit zadávací formulář i jeho vyhodnocení do jednoho souboru php.
V tomto numerologickém testu si podle návodu každý z partnerů ze svého jména vypočte svoje osobní duševní číslo a po zadání do formuláře jim test vypíše jejich vlastnosti.
Formulář pro zadání čísel i jeho vyhodnocení tentokrát vložíme do jednoho souboru (partner.php):
<h1>Partnerský test</h1>
Nejprve z celých jmen partnera a partnerky vypočtěte osobní čísla tak, že za každou samohlásku budete počítat číslo podle tabulky a číslice vzniklého součtu sčítejte tak dlouho, až vyjde číslo menší než deset.<br>
a=1, e=5, i (nebo y)=9, o=6,u=3<br>
Například: Alice Boudová - a = 1, i = 9, e = 5, o = 6, u = 3, o = 6, a = 1: 1+9+5+6+3+6+1 = 31, 3+1 = 4, osobní číslo je 4.<br>br /><br>
Zadejte osobní čísla obou partnerů a program vyhodnotí vaši shodu:<br /><br />
<form name="partneri" action="partner.php" method="post">
Ona: <input type="text" name="ona" value="" />
On: <input type="text" name="on" value="" />
<input type="submit" value="vyhodnoť" />
</form>
První část souboru tvoří HTML kód, ve kterém je návod pro výpočet osobních čísel a formulář pro jejich zadání. Nová věc ve formuláři je ta, že hodnota jeho parametru action je název téhož souboru, ve kterém je formulář (i dále vyhodnocení) uložený - v takovém případě dokonce ani název být uvedený nemusel (může být action="").
Druhá část souboru partner.php má formulář vyhodnotit, bude tedy obsahovat kód PHP. Problém je, jak má program poznat, jestli už má vyhodnotit nebo ne, čili jestli už byl odeslaný formulář. Někteří autoři to řeší za pomoci hodnot neviditelných polí formuláře (s parametrem hidden), jestliže hodnota tohoto pole je, byl už formulář odeslaný. Druhá metoda (podle mně jednodušší, "programátorštější" a hlavně vždy fungující) spočívá v tom, že se podíváme, jestli je prázdné pole $_POST, ve kterém se odesílají hodnoty proměnných z formuláře. Příkaz
if (!empty ($_POST))
znamená: jestli pole $_POST není prázdné, to je v případě, že už obsahuje nějakou hodnotu a tudíž byl formulář už odeslaný. Kód PHP pro tuto stránku by tudíž mohl vypadat takto:
<?php
if (!empty ($_POST))
{ echo "<b>ONA:</b><br />";
switch($_POST["ona"])
{case 1: echo"Jsi silná osobnost, nezávislá, sebejistá a kreativní. A proto ve vztahu potřebuješ tu a tam i čas jen sama pro sebe. Dopřej tuhle volnost i svému partnerovi a dávej si pozor na to, abys nebyla příliš majetnická a žárlivá.";
break;
case 2: echo"Jsi hodně citově založená, toužíš po harmonii a romantice. Často trpíš prudkými změnami nálad. Tvojí silnou touhou je milovat a být milována. Snaž se na toho druhého tolik nevázat.";
break;
case 3: echo"Jsi chytrá, vtipná, šarmantní a chceš se vždycky bavit. Rychle a silně se zamiluješ. Ale stejně rychle tě to zase přejde, pokud to neklape. První lekce zní: ke vztahu nepatří jen zábava, ale taky odpovědnost a výdrž.";
break;}
echo "<br /><br /><b>ON:</b><br />";
switch($_POST["on"])
{case 1: echo"Přesně víš co chceš a jak toho dosáhnout. Rád přebíráš iniciativu, jsi vášnivý a často udáváš směr. Potřebuješ, aby tě někdo ujišťoval o tom, že jsi nejlepší. Na druhou stranu, pokud jsi opravdu zamilovaný, jsi absolutně věrný.";
break;
case 2: echo"Jsi empatický a citlivý. Naprosto tě vystihuje neustálé hledání velké a opravdové lásky. Jsi něžný a ženy okouzluješ svým smyslem pro romantiku.";
break;
case 3: echo"Jsi sebevědomý typ, který je často středem pozornosti. Nikdo neumí flirtovat jako ty, ale potřebuješ také, aby tě neustále někdo obdivoval, především partnerka.";
break;}
}
?>
Kód je sice delší, ale to jen kvůli vypisovaným textům. Když se podíváte pozorněji, vidíte, že v podstatě obsahuje jen dva příkazy switch, pomocí kterých vypisuje texty příslušné vloženým osobním číslům. Na rozdíl od předešlých programů jsme také nezaváděli nové proměnné pro načtení hodnot z formuláře (třeba $on=$_POST["on"]), ale v podmínkách jsme použili rovnou hodnoty pole $_POST (například switch($_POST["on"]) ).
Vytvořte test podle textu lekce a doplňte jej o vyhodnocení vztahu. Číslo vztahu je rozdíl obou osobních čísel (dej pozor na to, že by mohl být záporný). Příslušné texty pro jednotlivá čísla najdeš v souboru partner.txt , použij alespoň první tři.
Vytvoř kompletní on-line "Partnerský test" - doplň do něj hodnotící texty pro všechna osobní čísla i čísla vztahů a vzhledově vylepši.
Vytvoř psychologický on-line test "Jaký jsi" s využitím přiloženého dokumentu (.doc) převzatého z knihy E. Bakaláře "I dospělí si mohou hrát".
Název školy: | Základní škola, Hradec Králové, M. Horákové 258 |
Název projektu: | EU peníze školám |
Číslo projektu: | CZ.1.07/1.4.00/21.2575 |
Téma: | Programování v PHP |
Název: | VY_32_INOVACE_06_10A_PHP6 |
Autor: | Pavel Petr |