Logo
Hľadanie
TOP 7 - stránky
Napaľovacie programy - 69 006x
Free Pascal - Úvod - 23 916x
3D grafické programy - 21 041x
Internetové prehliadače - 16 814x
Multimediálne prehrávače - 16 653x
Závodné hry - 15 247x
Download manažéry - 14 690x
Nové v diskusii
HTML - Formuláre - piatok 23.7.
Free Pascal - Začiatky - štvrtok 24.6.
HTML - META informácie - utorok 15.6.
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, má obmedzenú dĺžku a nehodí sa napríklad na odosielanie príspevkov do diskusie. Vtedy používame metódu POST (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="get">
 <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
 = ($_GET['napoj'] == "kava") ? "kávu" : "čaj";
if ($_GET['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">
 <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), $_GET['pouzivam'][0] bude CD a $_GET['pouzivam'][1] bude DVD.

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

<?php
if (isset($_GET['pouzivam']))
 foreach ($_GET['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,61
Diskusia k tejto stránke Co presne sa zobrazi? Nejaka chybova hlaska? Aku a...
Prejsť do diskusie»
'05-10, Business IT Solutions s.r.o.+Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0236 s. Valid XHTML, CSS.