php - pre začiatočníkov

Vytlač príspevok
Odporuč príspevok
Bookmark and Share PRIDAŤ NA VYBRALI.SME.SK

PHP Manuál : 7. Formuláre a superglobálne premenné

Jednou z výhod PHP je spôsob akým narába s formulármi ...
Doplnené (17-01-2008) : Formulár a skript v jednom súbore
Navigácia
  1. PHP a formuláre
    1.1 Formulár a skript v jednom súbore
  2. $_GET a $_POST
  3. Superglobálne premenné
             3.1 $_SERVER
             3.2 $_COOKIE
             3.3 $_FILES
             3.4 $_REQUEST
             3.5 $_SESSION
             3.6 $_GLOBALS
             3.7 $_phperrormsg

PHP A FORMULÁRE


Keďže pre vysvetlenie spôsobu práce PHP s formulármi je potrebná znalosť superglobálnych premenných (najmä $_GET alebo $_POST) spojil som túto časť s vysvetlením aj ostatných superglobálnych premenných. Ale pekne postupne najprv si rozoberieme prácu s formulármi.
Zoberme si ako príklad jednoduchý formulár (predpokladá sa základná znalosť HTML - tag <FORM>) :

Príklad 19
form.html
<form action="spracuj.php" method="post">
<p>Tvoje meno : <input type="text" name="meno"></p>
<p>Tvoj vek : <input type="text" name="vek"></p>
<input type="submit" value="Odošli">
</form>

Formulár bude vyzerať takto (zložitejší formulár bude použitý v blížiacej sa rekapitulácii) :

form.jpg
Nasleduje PHP skript :

spracuj.php
<?php

echo "Ahoj voláš sa ".$_POST["meno"]." a máš ".$_POST["vek"]." rokov.";

?>

Po spracovaní formulára (resp. skriptu spracuj.php) nám to vypľuje toto :

spracuj.jpg

Formulár a skript v jednom súbore

Na toto som zabudol ,tak to doplním teraz. Veď lepšie neskoro ako nikdy.
Ako ste si všimli predošlý formulár je uložený v jednom a skript v druhom súbore. Ale čo ak si situácia vyžaduje mať skript s formulárom v jednom súbore. Môžme na to použiť prefix "!".
Príklad :
jeden.php
<form action="jeden.php" method="post">
<p>Tvoje meno : <input type="text" name="meno"></p>
<p>Tvoj vek : <input type="text" name="vek"></p>
<input type="submit" value="Odošli">
</form>
<?php

if (!$_POST) {
echo "Formulár ešte nebol odoslaný";
}
else {
echo "Ahoj voláš sa ".$_POST["meno"]." a máš ".$_POST["vek"]." rokov.";
}

?>

Alebo môžme použiť HTML prvok hidden a jednoduchú podmienku :
jeden_2.php
<form action="jeden.php" method="post">
<p>Tvoje meno : <input type="text" name="meno"></p>
<p>Tvoj vek : <input type="text" name="vek"></p>
<input type="hidden" name="odoslany" value="ano">
<input type="submit" value="Odošli">
</form>
<?php
if ($_POST["odoslany"]=="ano") {
echo "Ahoj voláš sa ".$_POST["meno"]." a máš ".$_POST["vek"]." rokov.";
}

?>

$_GET a $_POST

Čo sa vlastne stalo ?
V prvom rade si všimnite ,že som metódu akou budú dáta s formulára spracované zvolil "POST". Tag <FORM> , atribút method. Tu je možné použiť namiesto "POST" , metódu "GET". Názov skriptu (atribút action) sme určili spracuj.php. Po odoslaní dát metódou POST sa nám spustil skript spracuj.php. Superglobálnu premennú $_POST nám nastavilo PHP automaticky. Ide vlastne o pole , ktoré obsahuje všetky dáta odosielané formulárom. Index (ako ste si už iste všimli) je názov jednotlivého elementu formulára. V prípade ,že by sme použili metódu "GET" , použili by sme superglobál $_GET.
Rozdiel medzi metódou GET a POST  je ten ,že GET  pripája prenášané dáta za URL a metóda POST  zakomponuje prenášané dáta do tela HTTP. Z toho vyplýva ,že bezpečnejšie je použiť metódu POST ,keďže pri metóde GET môžme prepísať URL a bez dostatočného ošetrenia skriptu môže napáchať veľké škody !
Ďalší rozdielom je ,že $_GET má obmedzenú veľkosť premennej na 100 znakov a $_POST nemá obmedzenie.
GET , resp. $_GET má využitie pri iných prípadoch, ktoré si vysvetlíme v nasledujúcej kapitole.

Superglobálne premenné

$_POST
Táto premenná je vysvetlená o kapitolu vyššie. Tu je uvedená len pre úplnosť.

$_GET
Okrem použitia pri formulároch (namiesto bezpečnejšej $_POST) má táto superglobálna premenná využitie aj pri zbieraní hodnôt premenných z URL.

Ako sa vlastne premenné v URL používajú ?
Na predávanie premenných pomocou odkazu sa používa znak ? a &. Kde znak ? použijeme na definovanie prvej premennej a na definovanie ostatných premenných používame znak &. Objasní to príklad :
Zadanie URL : http://nas_server/skript.php?premenna1=10&premenna2=20
Skript by vyzeral takto :
Príklad 20
<?php
//zadanie premenných cez URL : skript.php?premenna1=10&premenna2=20

echo "premenna1 = ".$_GET["premenna1"]."<br />"; //vypise 10
echo "premenna2 = ".$_GET["premenna2"]; //vypise 20

?>

$_SERVER
Server je pole ,ktoré obsahuje informácie o hlavičkách, cestách a umiesteniach skriptu. Tento superglobál bol predstavený vo verzii PHP 4.0.1 . V skorších verziách je to $HTTP_SERVER_VARS .
Položky v tomto poli vytvára web server , preto niektoré z nasledujúcej tabuľky nemusia byť funkčné. Závisí to od nastavenia web servera. Zoznam nasledujúcich parametrov nie je kompletný :
  • "SERVER_NAME" - názov hostu servera, kde sa aktuálny skript vykonáva
  • "SERVER_SOFTWARE" - identifikačný reťazec servera , prenášaný v hlavičkách pri odpovediach
  • "REQUEST_METHOD" - zistí ,ktorá metóda bola použitá pre načítanie stránky
  • "HTTP_REFERER" - obsahuje URL z ktorej bola odoslaná požiadavka na načítanie stránky. Nie je to spoľahlivá informácia ,keďže toto má na starosti prehliadač a niektoré podporujú zmenu tejto hlavičky.
  • "HTTP_USER_AGENT" - obsahuje údaje z hlavičky user-agent. Je to reťazec ,ktorý obsahuje názov a typ prehliadača.
  • "HTTP_ACCEPT_CHARSET" - obsahuje informáciu o kódovaní. Ak je zadaná. Napr. iso-8859-1.
  • "HTTP_ACCEPT_LANGUAGE" - obsahuje informáciu o jazyku. Ak je zadaná. Napr. "sk"
  • "REMOTE_ADDR" - obsahuje IP adresu užívateľa ,ktorý si pozerá stránku
  • "REMOTE_HOST" - obsahuje názov host-u užívateľa ,ktorý si pozerá stránku
  • "REMOTE_PORT" - port ,ktorý sa používa na komunikáciu s web serverom na strane užívateľa
  • "SERVER_ADMIN" - vypíše nastavenie "server_admin" web servera Apache
  • "SERVER_PORT" - vypíše port používaný web serverom pre komunikáciu s okolitým svetom. Štandardne je to "80".
  • "SCRIPT_NAME" - obsahuje cestu k atkuálnemu skriptu
Zoznam parametrov je použitý zo stránky http://www.php.net . Pre kompletný zoznam použite odkaz uvedený na konci stránky.
Príklad :
echo $_SERVER["HTTP_USER_AGENT"]; // vypíše rodinu a typ Vášho prehliadača.

$_COOKIE

Toto pole obsahuje reťazec premenných odosielaných cez HTTP cookies. Prakticky obashuje tie informácie ,ktoré sú v skripte nastavené funkciou setcookie(). (O tej si povieme neskôr v článku venovanému koláčikom)
Predstavené v PHP 4.0.1 , v predošlých verziách $HTTP_COOKIE_VARS.
Čo je cookie ?
Cookie/s v preklade koláčiky (: slúžia väčšinou na identifikáciu užívateľa. Je to malý súbor ,ktorý pošle server na používateľský počítač spolu s načítaním stránky/skriptu. V ňom má uložené rôzne informácie ,ktoré potom server/skript využíva. Napríklad keď  sa prihlasujete na nejakú stránku znova a nemusíte zadávať svoje používateľské meno, alebo sa nemusíte vôbec prihlasovať. Vtedy sú použité cookies.

$_FILES

Týmto poľom server reprezentuje uploadované súbory. $_FILES je jednoduchou cestou ako uploadovať súbory.
Predstavené v PHP 4.0.1, v predošlých verziách $HTTP_FILES_VARS .
 Zoznam parametrov ,ktoré definujeme :
  • "file" - názov elementu použitého vo formulári (id , name)
  • "name" - meno súboru
  • "typ" - typ súboru podľa špecifikácie MIME
  • "size" - veľkosť súboru v bajtoch
  • "tmp_name" - dočasný názov súboru pod ktorým bol uložený na serveri
Zápis : $_FILES["file"]["name"]
Uploadu súborov (kde si podrobnejšie rozoberieme toto pole) sa budeme venovať v časti venovanej práci so súbormi.

$_REQUEST

Toto pole obsahuje údaje obsiahnuté v poliach $_GET , $_POST , $_COOKIE a od PHP 4.3.1. aj $_FILES.
 Možno ho napríklad použiť na zbieranie dát z formulára.
$_REQUEST["nazov elementu formulara"] - vypíše to isté ako $_GET / $_POST.
Predstavené v PHP 4.0.1 , v predošlých verziách pole neexistovalo.

$_SESSION

Predstavené v PHP 4.0.1 , v predošlých verziách $HTTP_SESSION_VARS .
Prenáša údaje aktuálnemu skriptu v rámci "sedenia".
Zápis : $_SESSION["sedenie"] = hodnota;
Session sa používa ak chcete medzi jednotlivými stránkami prenášať rôzne údaje a identifikovať užívateľa. Typickým príkladom je napríklad prihlásenie sa do mailovej schránky cez web. Prihlásením začnete session a aplikácia vie ,že do odhlásenia ste používateľom vy.
Session si samozrejme vyžaduje samostatný článok.

$_GLOBALS

Predstavené v PHP 3.0.0
Je pole ,ktoré obsahuje globálne premenné použité v skripte ,kde indexom je názov jednotlivých premenných. Problematika ohľadom $_GLOBALS je vysvetlená v článku PHP Manuál : 5. Funkcie , v časti "Premenné vo funkciách".

$_phperrormsg

Táto premenná obsahuje poslednú chybu vygenerovanú PHP. Bude fungovať len v danej oblasti a za predpoklad ,že je zapnutá voľba track_info v nastaveniach PHP. (Tá je implicitne vypnutá).


Články

Predošlý článok : 6. Knižnice
Nasledujúci článok : 8. Práca so súbormi



Odkazy
Stiahnite si príklady vypracované v článku
Kompletný zoznam elementov $_SERVER na http://php.net


php | stály odkaz

Komentáre

  1. Zdravím...
    ...zaujímavé, dá sa PHPčkom spracovať napr. aj nejakým spôsobom databáza? Niečo podobné funkcii, ktorú využíva Word na hromadnú korešpondenciu s premennými a podmienkami. Vďaka.
    publikované: 10.01.2008 18:23:33 | autor: calmoasis (e-mail, web, autorizovaný)
  2. hmm ...
    bohužiaľ neviem akú funkciu Word používa na hromadnú korešpondenciu , ale s istotou viem ,že PHP spolupracuje s databázami. Resp. PHP skript môže byť klientom , ktorý sprístupňuje ,alebo pracuje s obsahom databázy (napr. SQL).
    Na základe svojich vedomostí (podmienky,premenné a databázy) s PHP si trúfam povedať ,že funkciu hromadnej korešpondencie by v pohode PHP zvládlo aj napriek tomu ,že ju nepoznám (: .
    publikované: 10.01.2008 18:40:33 | autor: php (e-mail, web, autorizovaný)
  3. aasdas
    skusska
    publikované: 18.07.2008 10:32:12 | autor: dgh (e-mail, web, neautorizovaný)
  4. obrazok-foto AKO priloha formulara ?
    ....a ako to je s moznostou, aby bolo mozne do formulara nielen vkladat data, ale napr. prilozit aj obrazok-foto ?
    publikované: 09.08.2009 13:49:17 | autor: raso (e-mail, web, neautorizovaný)
Pozor, na konci je potreba spočítať neľahkú matematickú úlohu! Inak komentár nevložíme. Pre tých lenivejších je tam tlačidlo kúzlo.



Prevádzkované na CMS TeaGuru spoločnosti Singularity, s.r.o., © 2004-2014