Programovánà v PHP - 2.dÃl - PromÄ›nné
V tomto díle seriálu o programování v jazyce PHP se podíváme na promÄ›nné. Řekneme si, co jsou to konstanty a jaké definované konstanty lze PHP použít. Dále se opdíváme na jednoduché ověřování formuláÅ™e metodou POST a GET. Na konci Älánku si již také naprogramujeme naši první aplikaci.
PromÄ›nné
PromÄ›nná je textové oznaÄení nÄ›jaké informace. Tyto informace můžou být tÅ™eba text, celé Äíslo, desetiné Äíslo, nebo tÅ™eba logická hodnota (pravda a nepravda). V jazyku PHP se definují znakem pro dolar ($) a hned za ním je zmínÄ›né oznaÄení. Za názvem promÄ›nné musí samozÅ™ejmÄ› stÅ™edník. VytvoÅ™ení funkce má také nÄ›jaká svoje pravidla zápisu. NapÅ™íklad název nesmí zaÄínat Äíslem, nebo speciálním znakem jako tÅ™eba teÄkou.
Jednoduché definování promÄ›nné potom vypadá následovnÄ›:
<?php $nazev_promenne; ?>
Jazyk PHP je netypový. To znamená, že nepoužívá datavé typy, takže pÅ™i definici promÄ›nné není nikde pÅ™esnÄ› Å™eÄeno, zda je typu text (string), nebo tÅ™eba Äíslo (int). Výhoda je v jednodušší pochopitlnosti, ovšem na druhou stranu je kód více nepÅ™ehledný a je to docela netypické, protože vÄ›tšina jazyků je silnÄ› typová.
PÅ™iÅ™ezení hodnoty do promÄ›nné se provadí s pomocí rovnítka, pÅ™iÄemž za rovnítko zadáte požadovaný výraz, který se má do promÄ›nné dosadit. PÅ™i dosazování hodnot se rozhoduje o tom, jakého o bude promÄ›nná typu. PÅ™i dosazování textu musí být umístÄ›n mezi uvozovkami a naopak, když dosazujeme Äíslo, nesmí být uzavÅ™eno v uvozovkách. U logických hodnota lze dosadit dvÄ› hodnoty - true a false.
<?php $cislo = 3.14; $text = "NÄ›jaký zajímavý text"; $logicka_hodnota = true; //popÅ™. false (pravda - true; nepravda - false) ?>
Vypsání hodnoty promÄ›nné
Pokud budeme chtít hodnotu promÄ›nné vypsat do stránky, použije se samozÅ™ejmÄ› funkce echo(). Jako argument jí potom pÅ™edáme oznaÄení naší funkce. PÅ™i vypisování se navíc nemusíme starat o to, jestli je promÄ›nná textového, logického, nebo Äíselného typu. Hodnota se vždy vypíše jako text.
Vše by mÄ›lo být jasné po shlédnutí tohoto pÅ™íkladu.
<?php $moje_jmeno = "Milan Suk"; echo($moje_jmeno); ?>
NÄ›kdy bychom také chtÄ›li pÅ™ed (popÅ™. za) promÄ›nnou umístit ještÄ› nÄ›jaký text a do stránky vypsat Å™eba - Moje jméno je Milan Suk. To provedeme tak, že Å™etÄ›zec "Moje jméno je" spojíme s Å™etÄ›zcem uloženým v promÄ›nné a nakonec můžeme ještÄ› umístit teÄku, aby to byla plnohodnotná vÄ›ta. Spojování Å™etÄ›zců se PHP provádí teÄkou. Náš pÅ™íklad by potom vypadal asi takto :
<?php $moje_jmeno = "Milan Suk"; echo("Moje jméno je " . $moje_jmeno . "."); ?>
Zde si jen musíme uvÄ›domit, že v uvozovkách je znak teÄka skuteÄnÄ› znakem, ale zapsán sám plní funkci spojování Å™etÄ›zců.
Operace s promÄ›nnými
Jak se pracuje s promÄ›nnými, které obsahují text, jsme si již ukázali. S promÄ›nnými, které pÅ™enášejí Äíselné hodnoty se dají vytváÅ™et vÄ›tší kouzla. Protože jsou to Äíselné hodnoty, můžeme je mezi sebou sÄítat, odeÄítat, násobit a dÄ›lit. Dále jsou zde také pojmy inkrement a dekrement, kterých se ovšem vůbec nemusíme bát. Slouží pro pÅ™iÄtení, nebo naopak pro odeÄtení Äísla jedna od zadané promÄ›nné a zapisují se viz. pÅ™íklad níže.
<?php // Zadání Äísel $cislo1 = 1024; $cislo2 = 3.14; echo("SouÄet Äísel je " . ($cislo1 + $cislo2) ); //SeÄtení echo("Rozdíl Äísel je " . ($cislo1 - $cislo2) ); //OdeÄtení echo("SouÄin Äísel je " . ($cislo1 * $cislo2) ); //Vynásobení echo("Podíl Äísel je " . ($cislo1 / $cislo2) ); //VydÄ›lení // Inkrementace echo ("ÄŒíslo " . $cislo1 . " má po jeho inkrementaci hodnotu" . ($cislo1++) . " !" ); // Výraz $cislo1++ pÅ™iÅ™adí hodnotu 1025 ( = 1024 + 1 ) // Dekrementace echo ("ÄŒíslo " . $cislo1 . " má po jeho dekrementaci hodnotu" . ($cislo1--) . " !" ); // Výraz $cislo1-- pÅ™iÅ™adí hodnotu 1023 ( = 1024 - 1 ) ?>
POZN.: PÅ™i zadávání desetiných Äísel se jako desetinná Äárka používá teÄka.
Konstanty
Konstanta je vlastnÄ› promÄ›nná, která ovšem nemá promÄ›nnou hodnotu, ale má ji pevnÄ› danou. Další výrazný rozdíl je ve způsobu definování a zápisu. S konstantami se pracuje podobnÄ› jako s promÄ›nnými, ovšem pÅ™i zápisu se pro oznaÄení konstanty nepoužívá znak dolaru, jen se jednoduše zapíše oznaÄení konstanty (jako normální text). PÅ™i používání promÄ›nných je také zvykem používat velká písmena, Äehož se držte, protože to zpÅ™ehledňuje kód a bude vám hned jasné, že co je velkým písmenem je konstanta.
Definování konstanty probíhá za pomocí funkce define(), která oÄekává dva parametry. Prvním je oznaÄení konstanty a druhým je hodnota konstanty. Vše je jednoduše znázornÄ›no na pÅ™íkladu.
<?php define("OS" , "Microsoft Window 7"); define("MOJE_JMENO", "Milan Suk"); echo("Moje jméno je " . MOJE_JMENO . " a používám operaÄní systém " . OS . " !"); ?>
NÄ›které konstanty v jazyce PHP
V jazyce PHP jsou již nÄ›které konstanty (stejnÄ› tak jako obravská kvanta funkcí) definované a staÄí je jen použít. Jedna taková konstanta je napÅ™. PHP_OS, která vrací název operaÄního systému uživatele. SamozÅ™ejmÄ› je v PHP takovýchto konstant definovaných mnohem více, proto si v pÅ™íkladu níže uvedeme nÄ›které z nich.
// NÄ›které informace o operaÄním systému echo DIRECTORY_SEPARATOR; // ve Windows vrací výsledek / echo PHP_SHLIB_SUFFIX; // ve Windows vrací výsledek dll echo PATH_SEPARATOR; // ve Windows vrací výsledek ; // Další konstanty echo HTTP_ACCEPT_LANGUAGE; // zobrazí název jazyka echo REMOTE_ADDR; // Zobrazí IP adresu uživatele echo SCRIPT_URI; // Zobrazí adresu souboru
Další takovéto konstanty získáme, pokud použijeme funkci phpinfo(). Tato funkce nám vypíše všechna možná nastavení PHP, funkce a nebo právÄ› naše konstanty.
Zpracování formulářů
PromÄ›nné se samozÅ™ejmÄ› používají hlavnÄ› ve chvíli, kdy od uživatele potÅ™ebujeme získat nÄ›jaké informace. NejÄastÄ›jší způsob získání tÄ›chto informací je pÅ™es nÄ›jaký odesílací formuláÅ™. Tyto formuláÅ™e se definuj jako normální HTML prvky a až potom se jejich hodnoty kontrolují s pomocí skryptovacího jazyka. Pokud nevíte, jak s formuláÅ™i v jazyce HTML pracovat, pÅ™eÄtÄ›te si následující Älánek - http://www.jakpsatweb.cz/html/formulare.html.
PÅ™i odesílání ofrmuláÅ™e máme dva způsoby pÅ™enosu dat. První je metoda GET, pÅ™i níž se informace zobrazují v adrese a metoda POST, pÅ™i jejiž použítí se informace nikde nezobrazují, což je tedy výhodné napÅ™. pri registraci, Äi jiných kritických procesů na webu, kdy může hrozit napadení. Jakou metodou budeme data posílat upÅ™esňuje atribut method v tagu form (viz. http://www.jakpsatweb.cz/html/formulare.html#form). Dále je pro nás důležitý atribt action, který urÄuje, na které stránce se bude obsah zpracovávat. Zde je pÅ™íklad, kde od uživatele žádáme jeho jméno, které pošleme metodou POST a zpracovávat ho budeme na stránce zpracovani.php.
<form action="zpracovani.php" method="POST"> <input type="text" name="jeno" /> <input type="submit" value="Odeslat" /> </form>
Získání dat z polí formuláÅ™e
Když chceme s daty z polí formuláÅ™e pracovat, musíme potom skripty dát do umístÄ›ní, které jsme zadali v HTML tagu form atributu action. Zde se totiž data budou zasílat. V jednotlivých polích jsou pro nás zásadní také atributy name, které urÄují oznaÄení hodnoty. Pokud toto všechno víme, získání dat provedeme aplikací pÅ™íkladu níže.
// Definujeme si promÄ›nnou, do které hodnotu uožíme $jmeno = $_POST['jmeno']; echo("Vaše jméno je " . $jmeno); // Výpis informací
Data tedy získáváme pomoc pole $_POST[value] (co je to pole si Å™ekneme v dalších dílech) a za value dosazujeme de facto hodnotu, kterou jsme zadali za atribut name v textovém poli. Pokud bychom formuláÅ™i nastavili odesílací metodu GET, postupovali bychom obdobnÄ›, jen s tím rozdílem, že místo pole $_POST[] bychom použili pole $_GET[] (viz. níže).
// Definujeme si promÄ›nnou, do které hodnotu uožíme $jmeno = $_GET['jmeno']; echo("Vaše jméno je " . $jmeno); // Výpis informací
Jednoduchá kalkulaÄka
V naší kalkulaÄce budeme od uživatele oÄekávat zadání dvou Äíselných hodnot do textových polí ve stránce. Potom tyto hodnoty v další php stránce získáme a vypíšeme jejich souÄet, rozdíl, souÄin a podíl. Vše jsme vlastnÄ› již provedli zde, takže sestrojení kódu nebude problém. Pokud to není nezbytnÄ› nutné, vždy bych radÄ›ji volil metodu POST, protože je o nÄ›co bezpeÄnÄ›jší, než GET (útoÄník nevydí hodnoty v url adrese).
NejdÅ™íve si tedy vytvoÅ™íme stránku HTML s dvÄ›mi textovými poli:
<form action="spocitat.php" method="POST"> První Äíslo : <input type="text" name="n1" /> <br /> Druhé Äíslo : <input type="text" name="n2" /> <input type="submit" value="SpoÄítat" /> </form>
A potom vytvoÅ™íme stránku spocitat.php, ve které údaje spracujeme a vypíšeme výsledek :
<?php // Získání žádaných hodnot $n1 = $_POST['n1']; $n2 = $_POST['n2']; // VypoÄítat a vypsat echo("SouÄet Äísel je " . ($n1 + $n2) . "<br />"); //SeÄtení echo("Rozdíl Äísel je " . ($n1 - $n2) . "<br />"); //OdeÄtení echo("SouÄin Äísel je " . ($n1 * $n2) . "<br />"); //Vynásobení echo("Podíl Äísel je " . ($n1 / $n2) . "<br />"); //VydÄ›lení ?>
Níže můžete vidÄ›t výsledek našeho snažení. VšimnÄ›te si také, že se nemusíme starat o to, jestli zadáváme desetiná, nebo celá Äísla a taktéž i s výsledkem si PHP hravÄ› poradí i když je Äíslo desetiné.
ZávÄ›r
Tímto pÅ™íkladem bych tento díl oznaÄil za ukonÄený. Na vyzkoušení můžete udÄ›lat nÄ›jaké další interakce s uživatelem a nebo můžete naši kalkulaÄku ještÄ› doladit. V dalším díle tohoto seriálu se podíváme na rozhodovací struktury a budeme samozÅ™ejmÄ› pokraÄovat další webovou aplikací.