5. diel - Asociatívne polia v PHP a obsluha formulárov
V predchádzajúcom cvičení, Riešené úlohy k 1.-4. lekciu PHP, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V minulej lekcii, Riešené úlohy k 1.-4. lekciu PHP , sme sa naučili zadávať textové reťazce rôznymi spôsobmi a uviedli sme si pole. Dnes si v PHP tutoriálu rozšírime znalosti ohľadom polí a hneď je prakticky využijeme na vytvorenie webovej kalkulačky. Áno, konečne budeme reagovať na nejaký vstup od užívateľa
Asociatívne pole
Druhý typ polí v PHP je tzv. Pole asociatívne. Funguje úplne rovnako, ako číselne indexované, ale indexy už nie sú čísla, ale textové reťazce. Indexom v tomto type polí hovoríme kľúča.
Asociatívne pole definujeme podobne ako číselne indexované, len okrem
hodnôt zadávame aj kľúče. K tomu používame operátor dvojitej šípky
(=>
):
$oblibeneVeci = array( 'homer' => 'šiška', 'marge' => 'rúra', 'bart' => 'prak', 'liza' => 'kniha', 'meggie' => 'cumlík', );
Zápis pole sme rozdelili kvôli prehľadnosti do viacerých riadkov, ale
išlo by to aj v jednom. V poli máme 5 hodnôt:
' šiška '
, ' rúra '
,
' prak '
, ' kniha '
,
' cumlík '
. Každá hodnota patrí nejakému kľúči
('homer'
, 'marge'
, 'bart'
,
'liza'
, 'meggie'
). Hodnoty priradíme ku kľúču
pomocou šípky a oddeľujeme čiarkou, ktorá sa väčšinou píše aj za
poslednou položkou. Nezabudnete ju tak napísať až do poľa budete pridávať
ďalší prvok.
Mimochodom, všimnite si, že ak vytvárame premennú, ktorej názov zahŕňa viac slov, použijeme tzv. Ťaví notáciu. Prvé písmeno malé a každé začiatočné písmeno ďalšieho slova veľké. Ľudia v PHP píšu rôzne, ale táto konvencie je bezpochyby najlepší.
Pre prácu s asociatívnym poľom platí to isté, ako sme si ukazovali minule u poľa číselne indexovaného:
{PHP}
$oblibeneVeci = array(
'homer' => 'šiška',
'marge' => 'rúra',
'bart' => 'prak',
'liza' => 'kniha',
'meggie' => 'cumlík',
);
echo('Homer má rád: ' . $oblibeneVeci['homer']);
{/PHP}
Namiesto aby sme napísali $oblibeneVeci[0]
, použijeme textový
kľúč. Obrovskou výhodou je prehľadnosť. Vidíme, čo z poľa vyťahujeme,
na rozdiel od číselného indexu, ktorý nám mnohokrát nič nehovorí.
Každé číselne indexované pole možno zapísať ako pole asociatívne a to takto:
{PHP}
$batoh = array('povraz', 'svietidlo', 'peňaženka');
$batoh2 = array(
0 => 'povraz',
1 => 'svietidlo',
2 => 'peňaženka',
);
print_r($batoh);
print_r($batoh2);
{/PHP}
Z výpisu vidíme, že pole $batoh
a $batoh2
sú
úplne rovnaká. PHP totiž vnútorne pozná len polia asociatívne a keď
založíme číselne indexované, jednoducho vytvorí indexy podľa poradia
položiek.
Vo väčšine jazykov je pole obmedzené svojou veľkosťou a keď sa raz vytvorí, nemožno do neho prvky pridávať. V PHP tomu tak nie je, s poľom si môžete robiť úplne čo chcete.
Spracovanie formulárov v PHP
Konečne sa dostávame k niečomu zaujímavému. Pravé aplikácie predsa reagujú na vstup od užívateľa. Skúsme si takú aplikáciu vytvoriť - naprogramujeme si jednoduchú webovú kalkulačku.
Webovej aplikácii možno odovzdať vstup pomocou dvoch metód -
GET
a POST
. HTTP protokol pozná ešte niekoľko
ďalších metód (REST), ale prehliadača je nepodporujú. Dáta dorazí do PHP
skriptu vždy v asociatívnom poli, ktoré sa volá podľa metódy, ktorú
prišla.
Vytvorme si nejakú zložku pre novú aplikáciu (napríklad
kalkulacka/
).
Metóda GET
Vytvorte si súbor kalkulacka.php
. Ak budeme tomuto skriptu
chcieť odovzdať nejaké dáta metódou GET
, zadáme ich do URL
adresy pomocou tzv. Query stringu. Query string začína otáznikom
(?
) A jednotlivé parametre sú oddelené ampersand
(&
). Medzi názvom parametra a jeho hodnotou je rovná sa
(=
).
Do URL adresy by sme teda zadali toto:
localhost/kalkulacka/kalkulacka.php?cislo1=10&cislo2=20
Skriptu odovzdávame metódou GET
dve premenné. Prvá sa volá
cislo1
a má hodnotu 10
, cislo2
má
hodnotu 20
.
Obsah skriptu by mohol byť nasledovné:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <?php $soucet = $_GET['cislo1'] + $_GET['cislo2']; echo("Súčet: $soucet"); ?> </body> </html>
Skript pracuje s tzv. Superglobálním poľom
$_GET
. Superglobálním preto, že je prístupné
odkiaľkoľvek. Všetky premenné, ktoré boli skriptu odoslané v query
stringu, nájdeme v tomto poli. Pole je asociatívne, ako kľúč zadáme názov
premennej a dostaneme jej hodnotu. Súčet hodnôt jednoducho vypíšeme.
výsledok:
Metóda GET
slúži skôr pre získavanie podstránok webu a pre
kalkulačku sa príliš nehodí.
Metóda POST
Metóda POST
sa zvyčajne používa pre odosielanie formulárov.
Naša aplikácia sa bude teraz skladať z dvoch súborov. V prvom bude
formulár, kam užívateľ zadá 2 čísla do textových polí a odošle
tlačidlom "vypočítajte". Dáta sa odošlú druhému súboru, čo bude PHP
skript, ktorý vykoná výpočet.
kalkulacka.html
Súbor obsahuje formulár. Môžeme mu dať koncovku PHP, ale nie je to
nutné, žiadne PHP bloky tu nie sú. Ak súbor pomenujete index, zobrazí sa
samozrejme ako predvolený stránka, keď do zložky kalkulacka/
pristúpite. Súbor bude vyzerať asi takto:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <p>Vitajte v kalkulačke, zadajte 2 čísla a získajte ich súčet.</p> <form method="POST" action="soucet.php"> <input name="cislo1" type="text" /><br /> <input name="cislo2" type="text" /><br /> <input type="submit" value="Spočítaj" /> </form> </body> </html>
Výsledok by mal vyzerať takto:
Na HTML stránke máme formulár a v ňom pár vstupných textových polí
typu text. Ak ctíte HTML 5, môžete použiť ako typ polí vo formulári
"number"
. Posledné pole je odosielacie tlačidlo, ktoré vyvolá
odoslanie formulára.
Zaujímavejšie sú atribúty formulára. method="POST"
udáva
spôsob, akým sa dáta z formulára odošlú. Hoci POST
nie je
predvolená hodnota, nedáva pre formuláre príliš zmysel používať žiadnu
inú. Ak by sme atribút neuviedli, použila by sa metóda GET
, kde
by formulár odoslal dáta ako query string do URL adresy. Tak by boli jednak
vidieť a tiež je dĺžka adresy obmedzená. Používajte teda vždy
POST
. action
označuje skript, ktorý formulár
spracuje. Ak atribút neuvedieme, odošle sa formulár do toho istého súboru,
v ktorom sa nachádza.
soucet.php
Súbor je skript s obslužným kódom, ktorému sa dáta z formulára
odošlú a on je spracuje. Asi vás neprekvapí, že dáta z formulára prídu v
superglobálním poli $_POST
. Opäť je
asociatívne a kľúčom sú názvy textových (alebo iných) polí, teda ich
atribúty name
.
Obsah skriptu bude nasledujúci:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <?php $soucet = $_POST['cislo1'] + $_POST['cislo2']; echo("Súčet: $soucet"); ?> </body> </html>
Oproti obslužnému skriptu pre metódu GET
sa vlastne vôbec
nezmenil. Môžete si vyskúšať, že kalkulačka naozaj počíta
Projekty máte k stiahnutiu nižšie a ja sa na vás teším v budúcej lekcii, Riešené úlohy k 5. lekcii PHP , predstavíme si totiž podmienky.
V nasledujúcom cvičení, Riešené úlohy k 5. lekcii PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 2505x (1.32 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php