Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 192x
Free Pascal - Úvod - 65 877x
Lazarus - Kreslenie - 47 455x
Free Pascal - Začiatky - 44 741x
Free Pascal - Podmienky - 37 097x
Free Pascal - Cykly - 36 348x
Internetové prehliadače - 36 214x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Tvorba Webu > PHP - Spracovanie formulárov

PHP - Spracovanie formulárov

Jedna z najdôležitejších vlastností PHP je možnosť spracúvať dáta získané z HTML formulárov (tag FORM). Vaše skripty teraz konečne získajú plný význam - budete môcť reagovať na to, čo zadá užívateľ (volá sa to tiež „vstup“).

Príklad na začiatok

Najskôr si vysvetlíme, ako formuláre fungujú. Dajme tomu, že máme súbor zadaj.html s jednoduchým formulárom. V ňom sú ňom dva textové políčka s jedným odosielacím tlačidlom:

<form action="spocitaj.php" method="get">
 Prvé číslo: <input name="prve"><br>
 Druhé číslo: <input name="druhe"><br>
 <input type="submit" value="Spočítaj">
</form>

Súbor spocitaj.php bude mať za úlohu spočítať dva čísla, zadané v textových políčkach s názvami prve a druhe. Zatiaľ však doňho napíšeme iba:

<?php

?>

Otvorte stránku zadaj.php v prehliadači a skúste zadať napríklad čísla 5 a 8. Stlačte odosielacie tlačidlo. Zobrazí sa prázdna stránka, čo je v poriadku. Všimnite si však adresu stránky, ktorá sa vám práve načítala:

http://localhost/spocitaj.php?prve=5&druhe=8

Za názvom súboru nasleduje otáznik a páry názov=hodnota, oddelené znakom &. Podobným spôsobom môžete používať adresy aj sami (bez pomoci formulárov), napr.:

<a href="zobraz.php?id=vlaky">Vlaky</a>

Ešte musím poznamenať, že ak dáme tlačidlu meno a hodnotu, tieto údaje sa tiež odošlú.

To som ale trochu odbočil od témy.

Teraz si ukážeme, ako tieto údaje získať v jazyku PHP. Keďže ako metódu formulára (atribút METHOD) sme zvolili GET, k údajom budeme pristupovať pomocou poľa $_GET. To obsahuje prvky s indexmi nazvanými podľa atribútov NAME jednotlivých políčok. Napríklad tento kód vypíše hodnotu políčka prve:

<?php
 echo $_GET['prve'];
?>

Keďže chceme hodnoty políčok spočítať, upravíme kód takto:

<?php
 echo $_GET['prve'] + $_GET['druhe'];
?>

Pripravil som pre vás aj funkčnú ukážku:

Prvé číslo:
Druhé číslo:

Metóda POST

Metóda GET, ktorú sme použili, je vhodná pre akcie, ktoré nemenia stav servera, iba zobrazujú informácie. Ak by sme ju použili napr. na uloženie hlasu do ankety, pri každej návšteve našich stránok indexovacím robotom (napr. Googlebotom) by sa zaznamenal nový hlas. Aj preto existuje metóda POST. Medzi nevýhody GET-u patrí tiež obmedzená dĺžka parametrov.

Metódu POST použijeme jednoducho - zmeníme atribút METHOD formulára. Dáta tu nie sú ukladané do adresy. Pristupujeme k nim pomocou poľa $_POST.

Zaškrtávacie políčko

Samozrejme, že textové políčka nie sú jediný spôsob, ako získať od užívateľa informácie. Vezmime si napr. štvorcové zaškrtávacie políčko. To nastaví svoju hodnotu na on, ak je zaškrtnuté. V PHP má neprázdny reťazec pravdivú logickú hodnotu, čo sa dá využiť pri tvorbe podmienky. Ako príklad uvediem zdrojový kód súboru uvar.php:

<form action="uvar.php" method="post">
 <input type="checkbox" name="cukor"> s cukrom
 <input type="submit" value="Uvar kávu">
</form>

<?php
 if ($_POST['cukor'])
  echo "Prajete si kávu s cukrom.";
 else
  echo "Prajete si kávu bez cukru.";
?>

Iste ste zistili, že odosielací formulár a prijímací skript môžu byť tá istá stránka.

Výberové políčko

Guľaté výberové políčko je jednou z foriem, ako si užívateľ môže vybrať jednu z ponúkaných možností.

<form action="uvar.php" method="post">
 <input type="radio" name="napoj"
  value="kava"> káva
 <input type="radio" name="napoj"
  value="caj" checked="checked"> čaj
 <input type="checkbox" name="cukor"> s cukrom
 <input type="submit" value="Uvar">
</form>

<?php
$napoj
 = ($_POST['napoj'] == "kava") ? "kávu" : "čaj";
if (isset($_POST['cukor']))
 echo "Prajete si $napoj s cukrom.";
else
 echo "Prajete si $napoj bez cukru.";
?>
káva čaj s cukrom

Viacnásobný výber

Nasledujúci príklad bude trochu náročnejší.

Vyskúšajme výberové pole (tag SELECT) s možnosťou výberu viacerých možností naraz (atribút MULTIPLE). V tomto prípade je nutné dať za názov SELECTu hranaté zátvorky, aby sa hodnoty ukladali do poľa.

<form action="vyskum.php" method="post">
 <select multiple="multiple" name="pouzivam[]">
  <option>CD</option>
  <option>DVD</option>
 </select>
 <input type="submit" value="Hlasuj">
</form>

Napríklad, ak v prehliadači vyberiete obidve možnosti (tlačidlom Ctrl), $_POST['pouzivam'][0] bude CD a $_POST['pouzivam'][1] bude DVD.

Pomocou isset zistíme, či premenná existuje, a ak áno, prejdeme pole príkazom foreach.

<?php
if (isset($_POST['pouzivam']))
 foreach ($_POST['pouzivam'] as $medium)
  echo "Používam $medium. ";
?>

Obrázkové tlačidlo

Obrázkové tlačidlo má oproti bežnému jednu zvláštnu vlastnosť - odosiela aj súradnice, kde užívateľ klikol.

Napríklad, tlačidlo sa volá odosli a metóda formulára je GET. X-ová súradnica bude uložená v premennej $_GET['odosli_x'], y-ová v $_GET['odosli_y'].

Bezpečnosť

Predstavte si, že podobným spôsobom vytvoríte napr. diskusné fórum. Príspevky budete ukladať do súboru a potom ich vypíšete. Na vašu stránku príde nejaký užívateľ a ako text príspevku vloží:

<script>
alert("Pozor!");
</script>
<img src="http://hnusne-reklamy.com/1.jpg">

Každému návštevníkovi, ktorý sa potom dostane na vaše fórum, sa zjaví JavaScriptové výstražné okno a nejaký obrázok (napr. reklama).

To je samozrejme nežiadúce. Preto je potrebné nejako tieto dáta zakódovať, aby sa z nich stal obyčajný text. Na to slúži funkcia htmlspecialchars. Prevedie špeciálne HTML znaky na entity.

$prispevok = htmlspecialchars($prispevok);
...

Potom sa text na stránke zobrazí doslovne a žiaden skript ani obrázok tam nebude.

Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 2,8
Diskusia k tejto stránke bububu
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0497 s. Valid XHTML, CSS.