Zpracování vstupu z formulářů

Dalšími základními příkazy v každém programovacím jazyce jsou příkazy pro vstup zpracovávaných hodnot. V PHP je samozřejmě také možné reagovat na hodnoty zadané uživatelem, jen to bude trošku složitější, protože PHP běží na webovém serveru, zatímco uživatel zadává údaje na svém (milovaném :-) ) PC. Vytvoříme proto dvě stránky (existují ale i řešení s jednou stránkou) - první bude obsahovat formulář, do kterého uživatel zadá hodnoty (může být PHP i HTML) a druhá pomocí PHP hodnoty zpracuje. Budeme k tomu potřebovat znalosti o formulářích v HTML, v našem kurzu Tvorba www stránek to byla 21. lekce (vzpomínáte si, že :-) ).


Vytvoříme prajednoduchou kalkulačku (podle knihy PHP a MySQL autora L. Lacka z naší školní knihovny), která sečte dvě zadaná čísla. Nejprve vytvoříme stránku s formulářem, do kterého uživatel zadá sčítance:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250" />
<meta name="description" content="PHP - kalkulačka" />
<title>Kalkulačka</title>
</head>
<body>
<h1>Kalkulačka</h1>
Zadejte sčítance:
<form name="kalkulator" action="vypocet.php" method="post">
<input type="text" name="scitanec1" value="" />
<br /> + <br />
<input type="text" name="scitanec2" value="" />
<input type="submit" value="vypočti" />
</form>
</body>
</html>
Doufám, že jste si všimli, že je pro stránku zvolený standard XHTML, proto jsou všechny tagy malými písmeny, všechny hodnoty v uvozovkách a všechny tagy jsou ukončené (např. <br />).
Další poznámka se týká formuláře - atribut (parametr) action určuje stránku (soubor php), která se použije pro zpracování jeho hodnot (v našem případě vypocet.php). Atributem method se určuje způsob odesílání údajů, může být post nebo get. Metodou get se údaje posílají jako součást adresy URL (jsou vidět v adresovém řádku), proto se častěji používá metoda post, která odesílá údaje odděleně a navíc je možné odeslat větší množství dat.
Důležitým údajem je také parametr name textových polí pro vložení čísel scitanec1 a scitanec2, pro zpracování to budou názvy proměnných, se kterými budeme pracovat.

Nyní vytvoříme jednoduchý soubor php s názvem vypocet.php (viz parametr action formuláře), který vytiskne vložené hodnoty scitanec1 a scitanec2 a jejich součet. Přemýšlivého čtenáře možná napadne, jak to, že dvě různé stránky jen tak mohou použít stejné proměnné. Ono to opravdu není jen tak, nějakým způsobem musíme proměnné z jedné stránky "zpřístupnit" i druhé.

První metodou jak zpřístupnit proměnné z jedné stránky druhé stránce je povolit globální proměnné. V souboru php.ini je potřeba změnit register_globals = Off na On a potom webový server restartovat. Povolení globálních proměnných je ale riziková záležitost, protože umožňuje "napadení" počítače, na webových serverech bude asi většinou tato volba zakázaná a nebudete mít možnost nastavení měnit. Proto využijeme spíše druhou možnost - při použití metody post (i get) se hodnoty z formuláře ukládají do pole proměnných s názvem $_POST (tím také zároveň do pole $_REQUEST, které obsahuje proměnné z více polí, o kterých budeme ještě mluvit). O polích bude řeč později, nám teď zatím stačí, že v hranaté závorce za názvem pole je hodnota name (název proměnné) z formuláře. Názvy těchto polí musíme psát velkými písmeny.

Jádro stránky vypocet.php by mohlo tedy vypadat například takto:
<?php
$scitanec1=$_POST["scitanec1"];
$scitanec2=$_POST["scitanec2"];
?>
<h1>Kalkulačka</h1>
První sčítanec: <?php echo ($scitanec1); ?><br />
Druhý sčítanec: <?php echo ($scitanec2); ?><br />
==========================

Součet: <?php echo ($scitanec1+$scitanec2); ?><br />
<p><a href=kalkulacka.php>Zpět k zadání</a>
</p>
Pokud je všechno v pořádku, mělo by to už fungovat - po otevření stránky s formulářem vyplníme příslušná textová pole (chybná zadání zatím nekontrolujeme). Po odeslání formuláře se automaticky otevře stránka vypocet.php, která zobrazí zpracování hodnot.


Úkoly:

Úkol (3 body)

Vytvořte stránky pro sčítání podle textu lekce, doplňte další operace a stránky jednoduše "ostylujte".

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_03_10A_PHP3
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.