IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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:

echo('Homer má rád: ' . $oblibeneVeci['homer']);

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:

$batoh = array('povraz', 'svietidlo', 'peňaženka');

$batoh2 = array(
    0 => 'povraz',
    1 => 'svietidlo',
    2 => 'peňaženka',
);

print_r($batoh);
print_r($batoh2);

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:

Kalkulačka
localhost/kal­kulacka/kalku­lacka.php?cis­lo1=10&cislo2=20

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:

Kalkulačka
localhost/kal­kulacka/kalku­lacka.html

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é 2507x (1.32 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php

 

Predchádzajúci článok
Riešené úlohy k 1.-4. lekciu PHP
Všetky články v sekcii
Základné konštrukcie jazyka PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5. lekcii PHP
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
3 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity