NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Asociativní pole v PHP a obsluha formulářů

V předešlém cvičení, Řešené úlohy k 1.-5. lekci PHP, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Dnes si v PHP tutoriálu rozšíříme znalosti ohledně polí a hned je prakticky využijeme k vytvoření webové kalkulačky. Ano, konečně budeme reagovat na nějaký vstup od uživatele :)

Asociativní pole

Druhým typem polí v PHP je tzv. asociativní pole. Funguje úplně stejně jako číselně indexované pole, ale indexy již nejsou čísla, nýbrž textové řetězce. Indexům v tomto typu polí říkáme klíče.

Asociativní pole definujeme podobně jako číselně indexované, jenom kromě hodnot zadáváme i klíče. K tomu používáme operátor dvojité šipky (=>):

$oblibeneVeci = array(
    'homer' => 'kobliha',
    'marge' => 'trouba',
    'bart' => 'prak',
    'liza' => 'kniha',
    'maggie' => 'dudlík',
);

Zápis pole jsme rozdělili kvůli přehlednosti do více řádků, ale šlo by to i v jednom. V poli máme pět hodnot: 'kobliha', 'trouba', 'prak', 'kniha', 'dudlík'. Každá hodnota patří nějakému klíči ('homer', 'marge', 'bart', 'liza', 'maggie'). Hodnoty přiřadíme ke klíči pomocí šipky a oddělujeme je čárkou, která se většinou píše i za poslední položkou. Díky tomu ji nezapomeneme napsat, až do pole budeme přidávat další prvek.

Povšimněme si mimochodem, že pokud vytváříme proměnnou, jejíž název zahrnuje více slov, použijeme tzv. velbloudí notaci. První písmeno malé a každé počáteční písmeno dalšího slova velké. Lidé v PHP píšou různě, ale tato konvence je bezesporu nejlepší.

Pro práci s asociativním polem platí totéž, co jsme si ukazovali minule u pole číselně indexovaného:

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

Místo abychom napsali $oblibeneVeci[0], použijeme textový klíč. Obrovskou výhodou je přehlednost. Na rozdíl od číselného indexu, který nám mnohdy nic neříká, zde vidíme, co z pole vytahujeme.

Každé číselně indexované pole lze zapsat jako pole asociativní, a to takto:

$batoh = array('provaz', 'svítilna', 'peněženka');

$batoh2 = array(
    0 => 'provaz',
    1 => 'svítilna',
    2 => 'peněženka',
);

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

Z výpisu vidíme, že pole $batoh a $batoh2 jsou naprosto stejná. PHP totiž vnitřně zná jen pole asociativní, a když založíme pole číselně indexované, PHP jednoduše vytvoří indexy podle pořadí položek.

Ve většině jazyků je pole omezené svou velikostí, a když se jednou vytvoří, nelze do něj prvky již přidávat. V PHP tomu tak není, s polem si můžeme dělat úplně, co chceme.

Zpracování formulářů v PHP

Konečně se dostáváme k něčemu zajímavému. Pravé aplikace přece reagují na vstup od uživatele. Zkusme si takovou aplikaci vytvořit – naprogramujeme si jednoduchou webovou kalkulačku.

Webové aplikaci lze předat vstup pomocí dvou metod – GET a POST. HTTP protokol zná ještě několik dalších metod (REST), ale prohlížeče je nepodporují. Data dorazí do PHP skriptu vždy v asociativním poli, které se jmenuje podle metody, kterou data přišla.

Vytvořme si nějakou složku pro novou aplikaci (např. kalkulacka/).

Metoda GET

Vytvořme si soubor kalkulacka.php. Pokud budeme tomuto skriptu chtít předat nějaká data metodou GET, zadáme je do URL adresy pomocí tzv. query stringu. Query string začíná otazníkem (?) a jednotlivé parametry jsou oddělené ampersandy (&). Mezi názvem parametru a jeho hodnotou je rovnítko (=).

V následující ukázce použijeme znak &. Na české klávesnici ho píšeme pomocí pravého Alt a klávesy C:

Operátory and a or - Základní konstrukce jazyka PHP

Do URL adresy bychom tedy zadali toto:

localhost/kalkulacka/kalkulacka.php?cislo1=10&cislo2=20

Skriptu předáváme metodou GET dvě proměnné. První se jmenuje cislo1 a má hodnotu 10, cislo2 má hodnotu 20.

Obsah skriptu by mohl být následující:

<!DOCTYPE html>
<html lang="cs">
    <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("Součet: $soucet");
        ?>
    </body>
</html>

Skript pracuje s tzv. superglobálním polem $_GET. Superglobálním proto, že je přístupné odkudkoli. Všechny proměnné, které byly skriptu odeslány v query stringu, nalezneme v tomto poli. Pole je asociativní, jako klíč zadáme název proměnné a dostaneme její hodnotu. Součet hodnot jednoduše vypíšeme.

Výsledek:

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

Metoda GET slouží spíše pro získávání podstránek webu a pro kalkulačku se příliš nehodí.

Metoda POST

Metoda POST se obvykle používá pro odesílání formulářů. Naše aplikace se bude nyní skládat ze dvou souborů. V prvním bude formulář, kam uživatel zadá dvě čísla do textových polí a odešle tlačítkem Sečti. Data se odešlou druhému souboru, což bude PHP skript, který provede výpočet.

kalkulacka.html

Soubor obsahuje formulář. Můžeme mu dát koncovku PHP, ale není to nutné, žádné PHP bloky zde nejsou. Pokud soubor pojmenujeme index, zobrazí se samozřejmě jako výchozí stránka, když do složky kalkulacka/ přistoupíme. Soubor bude vypadat takto:

<!DOCTYPE html>
<html lang="cs">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Kalkulačka</title>
    </head>
    <body>
        <p>Vítejte v kalkulačce, zadejte 2 čísla a získejte jejich součet.</p>

        <form method="POST" action="soucet.php">
            <input name="cislo1" type="text" /><br />
            <input name="cislo2" type="text" /><br />
            <input type="submit" value="Sečti" />
        </form>

    </body>
</html>

Výsledek by měl vypadat takto:

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

Na HTML stránce máme formulář a v něm pár vstupních textových polí typu text. Pokud ctíte HTML 5, můžete použít jako typ polí ve formuláři number. Poslední pole je odesílací tlačítko, které vyvolá odeslání formuláře.

Zajímavější jsou atributy formuláře. Atribut method na hodnotě POST udává způsob, jakým se data z formuláře odešlou. Ačkoli POST není výchozí hodnotou, nedává pro formuláře příliš smysl používat žádnou jinou. Pokud bychom atribut neuvedli, použila by se metoda GET, kde by formulář odeslal data jako query string do URL adresy. Tak by byly jednak vidět a jednak délka adresy není neomezená. Používejte tedy vždy POST. Atribut action označuje skript, který formulář zpracuje. Pokud atribut neuvedeme, odešle se formulář do téhož souboru, ve kterém se nachází.

soucet.php

Soubor je skript s obslužným kódem, kterému se data z formuláře odešlou a který data zpracuje. Asi vás nepřekvapí, že data z formuláře přijdou v superglobálním poli $_POST. To je opět asociativní a klíčem jsou názvy textových (nebo jiných) polí, tedy jejich atributy name.

Obsah skriptu bude následující:

<!DOCTYPE html>
<html lang="cs">
    <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("Součet: $soucet");
        ?>
    </body>
</html>

Oproti obslužnému skriptu pro metodu GET se vlastně vůbec nezměnil. Můžete si vyzkoušet, že kalkulačka opravdu počítá :)

V následujícím cvičení, Řešené úlohy k 6. lekci PHP, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 2546x (1.32 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

Předchozí článek
Řešené úlohy k 1.-5. lekci PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 6. lekci PHP
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
459 hlasů
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 se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity