POST požiadavky spracovávame v PHP. NodeJS. Ako spracovať požiadavky POST Spracovanie požiadaviek http php

Klienti prehliadača môžu odosielať informácie na webový server.

Pred odoslaním informácií prehliadač ich zakóduje pomocou schémy nazývanej kódovanie URL. V tejto schéme sú páry názov/hodnota spojené znakmi rovnosti a rôzne páry sú oddelené ampersandom.

Meno1=hodnota1&meno2=hodnota2&meno3=hodnota3

Medzery sú odstránené a nahradené znakom + a všetky ostatné nealfanumerické znaky sú nahradené hexadecimálnymi hodnotami. Po zakódovaní sa informácie odošlú na server.

GET metóda

Metóda GET odosiela zakódované informácie o používateľovi pripojené k žiadosti o stránku. Sú stránky a zakódované informácie od seba oddelené? otáznik.

http://www.test.com/index.htm?name1=value1&name2=value2

  • Metóda GET vytvára dlhý reťazec, ktorý sa zobrazuje v protokoloch vášho servera v poli „Umiestnenie“ prehliadača.
  • Metóda GET je obmedzená na odosielanie maximálne 1024 znakov.
  • Nikdy nepoužívajte metódu GET, ak máte heslo alebo iné citlivé informácie na odoslanie na server.
  • GET nemožno použiť na prenos binárnych údajov, ako sú obrázky alebo textové dokumenty, na server.
  • K údajom odoslaným metódou GET je možné pristupovať pomocou premennej prostredia QUERY_STRING.
  • PHP poskytuje asociatívne pole $_GET na prístup ku všetkým odoslaným informáciám pomocou metódy GET.

if($_GET["meno"] || $_GET["vek"]) ( echo "Vitajte ". $_GET["meno"]; echo "Ste ". $_GET["vek"]. " rokov "; VÝCHOD(); )

Názov: Vek:

metóda POST

Metóda POST prenáša informácie cez HTTP hlavičky. Informácie sú zakódované tak, ako je opísané v prípade metódy GET a umiestni sa do hlavičky QUERY_STRING.

  • Metóda POST nemá žiadne obmedzenie na veľkosť údajov, ktoré je potrebné odoslať.
  • Metódu POST možno použiť na odosielanie ASCII aj binárnych údajov.
  • Údaje odoslané pomocou metódy POST prechádzajú cez hlavičku HTTP, takže bezpečnosť závisí od protokolu HTTP. Použitím zabezpečeného protokolu HTTP môžete zabezpečiť, aby boli vaše informácie chránené.
  • PHP poskytuje asociatívne pole $_POST na prístup ku všetkým informáciám odoslaným pomocou metódy POST.

Vyskúšajte nasledujúci príklad umiestnením zdrojového kódu do skriptu test.php.

if($_POST["meno"] || $_POST["vek"]) ( if (preg_match("[^A-Za-z"-]",$_POST["meno"])) ( zomrieť (" neplatné meno a meno by mali byť alfa"); ) echo "Vitajte ". $_POST["meno"]; echo "Ste ". $_POST["vek"]. "rokov."; exit(); )

Názov: Vek:

$_REQUEST premenná

PHP premenná $_REQUEST obsahuje obsah ako $_GET, $_POST, takže $_COOKIE. Budeme diskutovať o premennej $_COOKIE keď hovoríme o cookies.

Premennú PHP $_REQUEST možno použiť na získanie výsledku z údajov formulára odoslaných pomocou metód GET a POST.

Prvou metódou na vykonanie požiadavky PHP POST je použitie file_get_contents . Druhá metóda bude používať fread v kombinácii s niekoľkými ďalšími funkciami. Obe možnosti používajú funkciu stream_context_create na vyplnenie požadovaných polí hlavičky požiadavky.

Vysvetlenie kódu

Premenná $sPD obsahuje údaje, ktoré sa majú preniesť. Musí byť vo formáte reťazca požiadavky HTTP, takže niektoré špeciálne znaky musia byť zakódované.

Vo funkcii file_get_contents aj vo funkcii fread máme dva nové parametre. Prvým je use_include_path . Keďže vytvárame požiadavku HTTP, bude v oboch príkladoch nepravdivá. Keď je nastavené na hodnotu true na čítanie lokálneho zdroja, funkcia bude hľadať súbor na adrese include_path .

Druhým parametrom je kontext, ktorý je vyplnený návratovou hodnotou stream_context_create, ktorá má hodnotu poľa $aHTTP.

Použitie file_get_contents na vytváranie požiadaviek POST

Ak chcete odoslať požiadavku POST pomocou file_get_contents v PHP, musíte použiť stream_context_create na manuálne vyplnenie polí hlavičky a určiť, ktorý "wrapper" sa má použiť - v tomto prípade HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "meno=Jacob&bench=150"; // POST dáta $aHTTP = array("http" => // Wrapper, ktorý bude použitý array("method" => "POST", // Metóda požiadavky // Hlavičky požiadaviek sú nastavené pod "header" => "Content - typ: application/x-www-form-urlencoded", "content" => $sPD)); $kontext = stream_context_create($aHTTP); $obsah = file_get_contents($sURL, false, $kontext); echo $obsah;

Použitie fread na vytváranie požiadaviek POST

Na vytvorenie požiadaviek POST môžete použiť funkciu fread. Nasledujúci príklad používa stream_context_create na vytvorenie potrebných hlavičiek HTTP požiadaviek:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "meno=Jacob&bench=150"; // POST dáta $aHTTP = array("http" => // Wrapper, ktorý bude použitý array("method" => "POST", // Metóda požiadavky // Hlavičky požiadaviek sú nastavené pod "header" => "Content - typ: application/x-www-form-urlencoded", "content" => $sPD)); $kontext = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $kontext); $obsah = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $obsah;

Vytváranie žiadostí GET pomocou PHP

Teraz sa zameriame na používanie fread a file_get_contents na sťahovanie obsahu z internetu cez HTTP a HTTPS. Ak chcete použiť metódy opísané v tomto článku, musíte povoliť možnosť fopen wrappers. Ak to chcete urobiť, musíte v súbore php.ini nastaviť parameter allow_url_fopen na hodnotu On.

Vykonávanie požiadaviek POST a GET v PHP sa používa na prihlásenie na webové stránky, načítanie obsahu webových stránok alebo kontrolu nových verzií aplikácií. Popíšeme si, ako vytvárať jednoduché požiadavky HTTP.

Používanie fread na sťahovanie alebo prijímanie súborov cez internet

Pamätajte, že čítanie webovej stránky je obmedzené na prístupnú časť paketu. Takže musíte použiť funkciu stream_get_contents ( podobne ako file_get_contents) alebo cyklus while na čítanie obsahu po menších kúskoch, kým sa nedosiahne koniec súboru:

V tomto prípade spracovania požiadavky PHP POST sa posledný argument funkcie fread rovná veľkosti fragmentu. Vo všeobecnosti by nemalo byť väčšie ako 8192 ( 8*1024 ).

Majte na pamäti, že môže byť väčší alebo menší a môže byť tiež obmedzený nastaveniami systému, na ktorom PHP beží.

Pomocou file_get_contents získate adresu URL stránky

Pri čítaní súboru cez HTTP je ešte jednoduchšie použiť túto metódu, keďže sa nemusíte starať o čítanie po častiach – všetko je riešené v PHP.

Táto publikácia je prekladom článku „Making POST Requests With PHP“, ktorý pripravil priateľský projektový tím

PHP je v súčasnosti jedným z najpopulárnejších jazykov na implementáciu webových aplikácií. Tento kurz je venovaný štúdiu jeho základov. Dôraz je kladený na praktickú aplikáciu získaných zručností.

Jazyk PHP bol vytvorený na vyriešenie konkrétneho praktického problému na internete (ktorý sa dá zistiť prečítaním prvej prednášky kurzu). Taktiež sa budeme snažiť nenechať sa príliš rozptyľovať teoretickým uvažovaním a na každej z prednášok sa budeme snažiť vyriešiť konkrétny problém. Väčšina príkladov je prevzatá zo skutočného systému: virtuálneho múzea histórie informatiky. Prvá časť kurzu je venovaná štúdiu základov syntaxe a riadiacich štruktúr. Potom sa technológia klient-server považuje za hlavnú aplikačnú oblasť jazyka PHP. Potom prejdeme k štúdiu najužitočnejších vstavaných funkcií podľa nášho názoru a riešeniu praktických problémov s ich pomocou. Hoci objektový model v jazyku PHP nie je najbohatší, jeho základná prítomnosť umožňuje prirodzene popisovať objektové dátové modely. Za základný model sa bude považovať dokumentový model virtuálneho múzea počítačovej vedy. Potom sa zváži množstvo aplikovaných aspektov: práca so súborovým systémom, s databázou, reťazcami, reláciami, DOM XML - to všetko nám umožní zvážiť kľúčové úlohy praktického používania jazyka.

Ako je zrejmé z vyššie uvedenej tabuľky, server Apache zaujíma vedúcu pozíciu. Všetko, čo kedy povieme o webových serveroch, je zamerané na Apache, pokiaľ nie je uvedené inak. O tom, ako ho nainštalovať do počítača, sme hovorili už na prvej prednáške. A teraz, ako sme sľúbili, poďme k protokolu HTTP.

HTTP protokol a spôsoby prenosu dát na server

Internet je vybudovaný na viacvrstvovom princípe, od fyzickej vrstvy, ktorá sa zaoberá fyzickými aspektmi prenosu binárnych informácií, až po aplikačnú vrstvu, ktorá poskytuje rozhranie medzi používateľom a sieťou.

HTTP (HyperText Transfer Protocol) je protokol aplikačnej vrstvy určený na výmenu hypertextových informácií na internete.

HTTP poskytuje súbor metód na určenie účelu požiadavky odoslanej na server. Tieto metódy sú založené na referenčnej disciplíne, kde sa univerzálny identifikátor zdroja, buď ako univerzálny lokátor zdroja (URL) alebo univerzálny názov zdroja, používa na označenie zdroja, na ktorý sa má metóda použiť. ,URN).

Správy cez sieť pri použití protokolu HTTP sa prenášajú vo formáte podobnom formátu správy internetovej pošty (RFC-822) alebo vo formáte správy MIME (Multipurpose Internet Mail Exchange).

HTTP sa používa na komunikáciu medzi rôznymi používateľskými programami a programami brán, ktoré poskytujú prístup k existujúcim internetovým protokolom, ako sú SMTP (Email Protocol), NNTP (News Transfer Protocol), FTP (File Transfer Protocol), Gopher a WAIS. HTTP je navrhnutý tak, aby umožnil takýmto bránam prenášať údaje cez proxy servery bez straty.

Protokol implementuje princíp požiadavka/odpoveď. Požadujúci program – klient iniciuje interakciu s odpovedajúcim programom – serverom a odošle požiadavku obsahujúcu:

Spôsob prístupu;

URI adresa;

Verzia protokolu;

Správa (formou podobná MIME) obsahujúca informácie o type prenášaných údajov, informácie o klientovi, ktorý požaduje, a prípadne obsah (telo) správy.

Odpoveď servera obsahuje:

Stavový riadok, ktorý obsahuje verziu protokolu a návratový kód (úspech alebo chyba);

Správa (vo forme podobnej MIME), ktorá obsahuje informácie o serveri, meta informácie (t. j. informácie o obsahu správy) a telo správy.

Protokol nešpecifikuje, kto by mal otvárať a zatvárať spojenie medzi klientom a serverom. V praxi spojenie zvyčajne otvára klient a server po odoslaní odpovede iniciuje jeho ukončenie.

Pozrime sa bližšie na formu, v akej sa požiadavky odosielajú na server.

Formulár žiadosti zákazníka

Klient odošle požiadavku na server v jednej z dvoch foriem: úplná alebo skrátená. Žiadosť v prvej forme sa nazýva úplná žiadosť a v druhej forme jednoduchá žiadosť.

Jednoduchá požiadavka obsahuje metódu prístupu a adresu zdroja. Formálne sa to dá napísať takto:

<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URI> <символ новой строки>

Metóda môže byť GET, POST, HEAD, PUT, DELETE a iné. O najbežnejších z nich si povieme o niečo neskôr. Požadovaný URI je najčastejšie adresa URL zdroja.

Príklad jednoduchej žiadosti:

ZÍSKAJTE http://phpbook.info/

Tu je GET prístupová metóda, t.j. metóda, ktorá by sa mala použiť na požadovaný zdroj, a http://phpbook.info/ je adresa URL požadovaného zdroja.

Kompletná požiadavka obsahuje stavový riadok, niekoľko hlavičiek (hlavička požiadavky, všeobecná hlavička alebo hlavička obsahu) a prípadne telo požiadavky. Formálne môže byť všeobecná forma úplnej žiadosti napísaná takto:

<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]

Hranaté zátvorky tu označujú voliteľné prvky hlavičky a alternatívne možnosti sú uvedené cez zvislú čiaru. Element<Строка состояния>obsahuje metódu požiadavky a URI zdroja (rovnako ako jednoduchá požiadavka) a navyše aj verziu použitého protokolu HTTP. Ak chcete napríklad zavolať externý program, môžete použiť nasledujúci stavový riadok:

POST http://phpbook.info/cgi-bin/test HTTP/1.0

V tomto prípade sa používa metóda POST a HTTP verzia 1.0.

V oboch formách požiadavky hrá dôležitú úlohu URI požadovaného zdroja. Najbežnejší URI sa používa vo forme adresy URL zdroja. Pri prístupe na server môžete použiť plnú aj zjednodušenú adresu URL.

Úplný formulár obsahuje typ prístupového protokolu, adresu zdrojového servera a adresu zdroja na serveri (obrázok 4.2).

V skrátenej forme sú protokol a adresa servera vynechané, čo naznačuje iba umiestnenie zdroja z koreňového adresára servera. Úplný formulár sa používa, ak je možné preposlať požiadavku na iný server. Ak sa pracuje iba s jedným serverom, často sa používa skrátená forma.


Ryža. 4.2.Úplný URL formulár

Metódy

Ako už bolo spomenuté, každá požiadavka klienta na server musí začínať špecifikáciou metódy. Metóda komunikuje účel požiadavky klienta. Protokol HTTP podporuje pomerne veľa metód, ale v skutočnosti sa používajú iba tri: POST, GET a HEAD. Metóda GET vám umožňuje získať akékoľvek údaje identifikované pomocou URI v požiadavke na zdroj. Ak URI ukazuje na program, vráti sa výsledok činnosti programu, nie jeho text (pokiaľ, samozrejme, text nie je výsledkom jeho činnosti). Ďalšie informácie potrebné na spracovanie požiadavky sú zabudované do samotnej požiadavky (v stavovom riadku). Pri použití metódy GET sa skutočné požadované informácie (napríklad text dokumentu HTML) vrátia do poľa tela zdroja.

Existuje variácia metódy GET – podmienené GET. Táto metóda hovorí serveru, že požiadavka by mala byť zodpovedaná iba vtedy, ak je podmienka uvedená v poli if-Modified-Since v hlavičke požiadavky pravdivá. Presnejšie povedané, telo zdroja sa odovzdá ako odpoveď na požiadavku, ak bol zdroj upravený od dátumu uvedeného v if-Modified-Since.

Metóda HEAD je podobná metóde GET, ale nevracia telo zdroja a nemá podmienený náprotivok. Na získanie informácií o zdroji sa používa metóda HEAD. To môže byť užitočné napríklad pri riešení problému testovania hypertextových odkazov.

Metóda POST je určená na prenos informácií na server, ako sú anotácie zdrojov, správy a mailové správy, údaje, ktoré sa majú pridať do databázy, t.j. na prenos veľkého objemu a dosť dôležitých informácií. Na rozdiel od metód GET a HEAD, POST prenáša telo zdroja, čo sú informácie prijaté z polí formulára alebo iných vstupných zdrojov.

Doteraz sme len teoretizovali a zoznamovali sa so základnými pojmami. Teraz je čas naučiť sa toto všetko využívať v praxi. Neskôr sa v prednáške pozrieme na to, ako posielať požiadavky na server a ako spracovávať jeho odpovede.

Používanie formulárov HTML na odosielanie údajov na server

Ako preniesť dáta na server? Na tento účel má jazyk HTML špeciálnu konštrukciu – formuláre. Formuláre sú určené na prijímanie informácií od používateľa. Napríklad potrebujete poznať prihlasovacie meno a heslo používateľa, aby ste mohli určiť, na ktoré stránky webu môže mať prístup. Alebo potrebujete osobné údaje používateľa, aby ste ho mohli kontaktovať. Na zadávanie takýchto informácií sa presne používajú formuláre. Môžete do nich zadať text alebo vybrať vhodné možnosti zo zoznamu. Údaje zapísané vo formulári sa odosielajú na spracovanie do špeciálneho programu (napríklad PHP skriptu) na serveri. V závislosti od údajov zadaných používateľom môže tento program generovať rôzne webové stránky, odosielať dopyty do databázy, spúšťať rôzne aplikácie atď.

Poďme pochopiť syntax HTML formulárov. Mnohí to možno poznajú, ale aj tak si zopakujeme hlavné body, pretože je to dôležité.

Takže na vytvorenie formulára v HTML sa používa značka FORM. Vnútri je jeden alebo viac príkazov INPUT. Pomocou atribútov action a method tagu FORM zadáte názov programu, ktorý bude spracovávať údaje formulára, resp. metódu požiadavky. Príkaz INPUT špecifikuje typ a rôzne charakteristiky požadovaných informácií. Údaje formulára sa odosielajú po stlačení vstupného tlačidla typu odoslanie. Vytvorme formulár na registráciu účastníkov korešpondenčnej školy programovania.

Po spracovaní prehliadačom bude tento súbor vyzerať asi takto:


Ryža. 4.3. Príklad html formulára

Takto sa vytvárajú a vyzerajú HTML formuláre. Budeme predpokladať, že sme sa naučili alebo si zapamätali, ako ich vytvoriť. Ako vidíme, vo formulári môžete určiť spôsob prenosu údajov. Pozrime sa, čo sa stane, ak zadáte metódu GET alebo POST a aký bude rozdiel.

Pre metódu GET

Pri odosielaní údajov formulára pomocou metódy GET sa obsah formulára pripojí k adrese URL za otáznik ako páry názov=hodnota spojené so znakom &:

action?name1=value1&name2=value2&name3=value3

Akcia je tu adresa URL programu, ktorý by mal spracovať formulár (buď program špecifikovaný v atribúte action tagu formulára, alebo samotný aktuálny program, ak je tento atribút vynechaný). Názvy názov1, názov2, názov3 zodpovedajú názvom prvkov formulára a hodnota1, hodnota2, hodnota3 zodpovedajú hodnotám týchto prvkov. Všetky špeciálne znaky, vrátane = a &, budú z týchto názvov parametrov alebo hodnôt vynechané. Preto by ste tieto symboly a znaky cyriliky nemali používať v identifikátoroch v názvoch alebo hodnotách prvkov formulára.

Ak do vstupného poľa zadáte nejaký servisný znak, prenesie sa v jeho hexadecimálnom kóde, napríklad symbol $ bude nahradený znakom %24. Rovnakým spôsobom sa prenášajú aj ruské písmená.

Pre polia na zadanie textu a hesla (toto sú vstupné prvky s atribútom type=text a type=password) bude hodnota taká, aká zadá používateľ. Ak používateľ do takéhoto poľa nič nezadá, prvok name= bude prítomný v reťazci dopytu, kde name zodpovedá názvu tohto prvku formulára.

Pre začiarkavacie políčka a prepínače je hodnota určená atribútom VALUE, keď je tlačidlo začiarknuté. Nezačiarknuté tlačidlá sa pri vytváraní reťazca dotazu úplne ignorujú. Viaceré tlačidlá začiarkavacích políčok môžu mať v prípade potreby rovnaký atribút NAME (a rôzne hodnoty). Tlačidlá typu prepínač sú určené pre jednu zo všetkých ponúkaných možností, a preto musia mať rovnaký atribút NAME a rôzne atribúty VALUE.

V zásade nie je potrebné vytvárať HTML formulár na prenos údajov metódou GET. Požadované premenné a ich hodnoty môžete jednoducho pridať do reťazca adresy URL.

http://phpbook.info/test.php?id=10&user=pit

V tomto smere má prenos dát metódou GET jednu významnú nevýhodu – falšovať hodnoty parametrov môže každý. Preto neodporúčame používať túto metódu na prístup na stránky chránené heslom alebo na prenos informácií, ktoré ovplyvňujú bezpečnosť programu alebo servera. Okrem toho by ste nemali používať metódu GET na prenos informácií, ktoré používateľ nesmie meniť.

Napriek všetkým týmto nevýhodám je použitie metódy GET celkom pohodlné pri ladení skriptov (potom môžete vidieť hodnoty a názvy odovzdávaných premenných) a pri odovzdávaní parametrov, ktoré neovplyvňujú bezpečnosť.

Pre metódu POST

Obsah formulára je zakódovaný presne rovnakým spôsobom ako pri metóde GET (pozri vyššie), ale namiesto pridania reťazca do adresy URL sa obsah požiadavky odošle ako blok údajov v rámci operácie POST. Ak je prítomný atribút ACTION, potom hodnota adresy URL, ktorá sa v ňom nachádza, určuje, kam sa má tento blok údajov odoslať. Táto metóda, ako už bolo uvedené, sa odporúča na prenos veľkých blokov údajov.

Informácie zadané používateľom a odoslané na server pomocou metódy POST sa poskytujú na štandardnom vstupe do programu špecifikovaného atribútom action alebo do aktuálneho skriptu, ak je tento atribút vynechaný. Dĺžka odosielaného súboru sa odovzdáva v premennej prostredia CONTENT_LENGTH a typ údajov sa odovzdáva v premennej CONTENT_TYPE.

Údaje môžete odosielať iba metódou POST pomocou formulára HTML, pretože údaje sa odosielajú v tele požiadavky a nie v hlavičke, ako je to v prípade GET. V súlade s tým môžete zmeniť hodnotu parametrov iba zmenou hodnoty zadanej vo formulári. Pri použití POST používateľ nevidí údaje odoslané na server.

Hlavnou výhodou požiadaviek POST je ich väčšia bezpečnosť a funkčnosť v porovnaní s požiadavkami GET. Preto sa metóda POST častejšie používa na prenos dôležitých informácií, ako aj informácií veľkého rozsahu. Nemali by ste sa však úplne spoliehať na bezpečnosť tohto mechanizmu, pretože údaje požiadavky POST môžu byť tiež sfalšované, napríklad vytvorením súboru HTML na vašom počítači a jeho vyplnením potrebnými údajmi. Navyše nie všetci klienti môžu používať metódu POST, čo obmedzuje jej prípady použitia.

Pri odosielaní údajov na server akýmkoľvek spôsobom sa prenášajú nielen údaje zadané používateľom, ale aj množstvo premenných nazývaných premenné prostredia, ktoré charakterizujú klienta, jeho prevádzkovú históriu, cesty k súborom atď. Tu sú niektoré z premenných prostredia:

REMOTE_ADDR – IP adresa hostiteľa (počítača), ktorý odosiela požiadavku;

REMOTE_HOST – názov hostiteľa, z ktorého bola odoslaná požiadavka;

HTTP_REFERER – adresa stránky odkazujúcej na aktuálny skript;

REQUEST_METHOD – metóda, ktorá bola použitá pri odoslaní požiadavky;

QUERY_STRING – informácie nachádzajúce sa v adrese URL za otáznikom;

SCRIPT_NAME – virtuálna cesta k programu, ktorý sa má spustiť;

HTTP_USER_AGENT – informácie o prehliadači, ktorý klient používa

Zatiaľ sme len spomenuli, že požiadavky klientov sú na serveri spracovávané pomocou špeciálneho programu. V skutočnosti si tento program môžeme napísať sami, a to aj v PHP, a s prijatými dátami bude robiť, čo chceme. Aby ste mohli napísať tento program, musíte sa oboznámiť s niektorými pravidlami a nástrojmi, ktoré PHP na tento účel ponúka.

V rámci skriptu PHP existuje niekoľko spôsobov, ako získať prístup k údajom odoslaným klientom prostredníctvom protokolu HTTP. Pred PHP 4.1.0 sa prístup k takýmto údajom uskutočňoval podľa názvov prenášaných premenných (pamätajte, že údaje sa prenášajú vo forme párov „názov premennej, symbol „=“, hodnota premennej“). Ak teda bolo zadané napríklad first_name=Nina, potom sa v skripte objavila premenná $first_name s hodnotou Nina. Ak bolo potrebné rozlíšiť, akým spôsobom boli dáta prenášané, tak sa použili asociatívne polia $HTTP_POST_VARS a $HTTP_GET_VARS, ktorých kľúčmi boli názvy prenášaných premenných a hodnotami boli hodnoty ​týchto premenných. Ak je teda pár first_name=Nina odovzdaný metódou GET, potom $HTTP_GET_VARS["first_name"]="Nina".

Nie je bezpečné používať názvy odovzdaných premenných priamo v programe. Preto bolo počnúc PHP 4.1.0 rozhodnuté použiť špeciálne pole – $_REQUEST – na prístup k premenným prenášaným prostredníctvom HTTP požiadaviek. Toto pole obsahuje údaje prenášané pomocou metód POST a GET, ako aj pomocou HTTP cookies. Ide o superglobálne asociatívne pole, t.j. jeho hodnoty možno získať kdekoľvek v programe pomocou názvu zodpovedajúcej premennej (prvku formulára) ako kľúča.

Príklad 4.2. Povedzme, že sme vytvorili formulár na registráciu účastníkov do korešpondenčnej školy programovania, ako v príklade vyššie. Potom do súboru 1.php, ktorý spracováva tento formulár, môžete napísať nasledovné:

$str = "Dobrý deň,
".$_REQUEST["first_name"]."
".$_REQUEST["priezvisko"]."!
";
$str .="Vybrali ste si študovať kurz v
".$_REQUEST["kurs"];
echo $str;
?>

Potom, ak sme do formulára zadali meno „Vasya“, priezvisko „Petrov“ a spomedzi všetkých kurzov vybrali kurz PHP, na obrazovke prehliadača sa nám zobrazí nasledujúca správa:

Dobrý deň, Vasya Petrov!

Po zavedení poľa $_REQUEST boli polia $HTTP_POST_VARS a $HTTP_GET_VARS kvôli konzistencii premenované na $_POST a $_GET, ale samotné z dôvodu kompatibility s predchádzajúcimi verziami PHP nezmizli z používania. Na rozdiel od svojich predchodcov sa polia $_POST a $_GET stali superglobálnymi, t.j. prístupné priamo a vo vnútri funkcií a metód.

Uveďme príklad použitia týchto polí. Povedzme, že potrebujeme spracovať formulár obsahujúci vstupné prvky s názvom meno, priezvisko, kurs (napríklad formulár.html vyššie). Údaje boli prenesené metódou POST a údaje prenášané inými metódami nechceme spracovávať. Dá sa to urobiť nasledovne:

$str = "Dobrý deň,
".$_POST ["first_name"]."
".$_POST ["priezvisko"] ."!
";
$str .= "Vybrali ste si študovať kurz na ".
$_POST["kurs"];
echo $str;
?>

Ak potom na obrazovke prehliadača zadáme meno „Vasya“, priezvisko „Petrov“ a spomedzi všetkých kurzov vyberieme kurz PHP, zobrazí sa nám správa ako v predchádzajúcom príklade:

Dobrý deň, Vasya Petrov!
Rozhodli ste sa študovať kurz PHP

Aby sa zachovala schopnosť spracovávať skripty staršie ako PHP 4.1.0, bola zavedená direktíva register_globals, ktorá povoľuje alebo zakazuje prístup k premenným priamo podľa ich názvov. Ak je parameter register_globals=On v súbore nastavení PHP, k premenným odovzdaným na server pomocou metód GET a POST možno pristupovať jednoducho podľa ich názvov (t. j. môžete napísať $first_name). Ak register_globals=Off, potom musíte napísať $_REQUEST["first_name"] alebo $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"]. Z bezpečnostného hľadiska je lepšie túto direktívu zakázať (t.j. register_globals=Off). S povolenou direktívou register_globals budú polia uvedené vyššie obsahovať aj údaje odovzdané klientom.

Niekedy potrebujete poznať hodnotu premennej prostredia, napríklad metódu použitú na odoslanie požiadavky alebo IP adresu počítača, ktorý požiadavku odoslal. Tieto informácie môžete získať pomocou funkcie getenv(). Vracia hodnotu premennej prostredia, ktorej názov je odovzdaný ako parameter.

getenv("POŽIADAVKA_METÓDA");
// vráti použitú metódu
echo getenv("VZDIALENA_ADDR");
// zobrazí IP adresu používateľa,
// kto odoslal žiadosť
?>

Ako sme povedali, ak sa použije metóda GET, potom sa údaje prenesú pridaním reťazca dotazu vo forme párov názov_premennej=hodnota do adresy URL zdroja. Čokoľvek za otáznikom v URL je možné získať pomocou príkazu

getenv("QUERY_STRING");

Vďaka tomu je možné pomocou metódy GET prenášať dáta aj v inej forme. Napríklad môžete zadať iba hodnoty niekoľkých parametrov pomocou znamienka plus a v skripte môžete analyzovať reťazec dopytu na časti alebo môžete odovzdať hodnotu iba jedného parametra. V tomto prípade sa v poli $_GET objaví prázdny prvok s kľúčom rovným tejto hodnote (celý reťazec dopytu) a znak „+“, ktorý sa vyskytuje v reťazci dopytu, bude nahradený podčiarkovníkom „_“.

Pri metóde POST sa údaje prenášajú iba pomocou formulárov a používateľ (klient) nevidí, aké údaje sa odosielajú na server. Aby ich videl, musí hacker nahradiť náš formulár svojím vlastným. Potom server odošle výsledky spracovania nesprávneho formulára na nesprávne miesto. Aby ste tomu zabránili, môžete skontrolovať adresu stránky, z ktorej boli údaje odoslané. Môžete to urobiť znova pomocou funkcie getenv ():

getenv("HTTP_REFERER");

Teraz je čas vyriešiť problém sformulovaný na začiatku prednášky.

Príklad spracovania požiadavky pomocou PHP

Pripomeňme si, o akú úlohu išlo a objasnime jej formuláciu. Na registráciu účastníkov do korešpondenčnej školy programovania je potrebné napísať formulár a po registrácii poslať účastníkovi správu. Túto správu sme nazvali univerzálne písmeno, ale bude sa mierne líšiť od písmena, ktoré sme zložili v predchádzajúcej prednáške. Tu tiež nebudeme nič posielať e-mailom, aby sme neboli ako spameri, ale jednoducho túto správu vygenerujeme a zobrazíme na obrazovke prehliadača. Úvodnú verziu registračného formulára sme už poskytli vyššie. Zmeníme to tak, aby si každý matrikár mohol vybrať toľko kurzov, koľko chce navštevovať a nebudeme vám potvrdzovať prijatie prihlášky.

Všetko je tu celkom jednoduché a jasné. Jediná vec, ktorú treba poznamenať, je spôsob odovzdávania hodnôt prvku začiarkavacieho políčka. Keď do názvu prvku napíšeme kurs, znamená to, že prvý zaškrtnutý prvok poľa kurs sa zapíše do prvého prvku poľa kurs, druhý začiarknutý políčko sa zapíše do druhého prvku poľa atď. Prvky zaškrtávacieho políčka môžete, samozrejme, jednoducho pomenovať, čo však skomplikuje spracovanie údajov, ak existuje veľa kurzov.

Skript, ktorý toto všetko bude analyzovať a spracovávať, sa volá 1.php (formulár sa konkrétne vzťahuje na tento súbor, ktorý je zapísaný v jeho atribúte action). Štandardne sa na prenos používa metóda GET, no zadali sme POST. Na základe informácií prijatých od registrovanej osoby skript vygeneruje zodpovedajúcu správu. Ak si človek vybral nejaké kurzy, dostane správu o čase ich konania a lektoroch, ktorí ich vyučujú. Ak si človek nič nevybral, zobrazí sa mu správa o ďalšom stretnutí Korešpondenčnej školy programátorov (ZSH).

HTML formuláre umožňujú odosielanie užívateľom zadaných údajov na server, kde môžu byť ďalej spracované. Údržba formulára sa vykonáva v dvoch etapách. Formulár je potrebné najprv predložiť používateľovi, ktorý ho vyplní svojimi údajmi a následne odošle na server. Každý formulár má vstupnú webovú stránku, ktorá sa musí načítať na spracovanie údajov odoslaných používateľom. Často je to ten istý súbor skriptu, ktorý generuje formulár. V tomto prípade kód PHP jednoducho skontroluje údaje vo formulári, aby určil, či znova zavolať skript na vytvorenie formulára alebo začať spracovávať prijaté údaje.

Pozor! Lekcia je zastaraná. Nové lekcie na túto tému obsahuje kurz PHP pre začiatočníkov.

Vo väčšine prípadov odoslanie formulárov na server zahŕňa nejaký druh práce s databázou. Napríklad operácia vyhľadávania v databáze je nevyhnutnou akciou pre najrôznejšie aplikácie, či už ide o vyhľadávanie príspevkov vo fóre, používateľov alebo blogu. V každom prípade táto operácia môže užívateľovi uľahčiť život. Pretože V tejto chvíli sme sa ešte nezoznámili s interakciou PHP a MySQL DBMS, v tomto článku sa pozrieme na jednoduché príklady spracovania formulárov a hlavnou úlohou pre mňa je ukázať, ako sa informácie prenášajú pomocou jazyka PHP .

Prenos informácií pomocou jazyka PHP

Táto časť poskytuje základné informácie o tom, ako je možné prenášať údaje medzi webovými stránkami. Niektoré z týchto informácií sa netýkajú výlučne technológie PHP, ale opisujú interakciu nástrojov PHP a HTML alebo sa týkajú samotného protokolu HTTP.

Nedostatok štátnej podpory v protokole HTTP

Najdôležitejšou vlastnosťou akejkoľvek webovej technológie, ktorú treba mať vždy na pamäti, je, že samotný protokol HTTP je bezstavový. To znamená, že každá požiadavka HTTP (ktorá sa vo väčšine prípadov rovná požiadavke na prijatie a doručenie jedného zdroja, ako je HTML stránka, súbor .jpg, šablóna štýlov atď.) je nezávislá od všetkých ostatných požiadaviek, obsahovať akékoľvek - informácie o identifikácii klienta a nezanecháva stopy v pamäti počítača.

Aj keď je stránka navrhnutá tak, že navigácia, t.j. prechod z jednej stránky na druhú prebieha striktne jedným smerom (povedzme, že stránka 1 vedie iba na stránku 2, ktorá vedie iba na stránku 3 atď.), nástroje na podporu protokolu HTTP nemajú informácie a neberú do úvahy, že používateľ prezeranie stránky 2 muselo predtým navštíviť stránku 1. Nemôžete priradiť hodnotu premennej na strane 1 a očakávať, že bude importovaná na stránku 2 pomocou samotného HTML. HTML kód možno použiť na zobrazenie formulára a tento kód možno použiť dokonca aj na zadávanie informácií, ale pokiaľ sa nepoužijú nejaké ďalšie prostriedky na prenos zadaných informácií na inú stránku alebo program, hodnota priradená premennej po presunutí jednoducho zmizne. na inú stránku.

Technológie spracovania formulárov ako PHP sú navrhnuté tak, aby riešili presne tento problém. PHP vám umožňuje zachytiť hodnotu premennej prenášanej z predchádzajúcej stránky na ďalšiu a sprístupniť túto hodnotu pre neskoršie použitie. Ako sa ukázalo, technológia PHP poskytuje schopnosť vykonávať tieto typy funkcií prenosu údajov mimoriadne dobre, takže vám umožňuje rýchlo a jednoducho nasadiť potrebné nástroje na riešenie širokej škály problémov spojených so zabezpečením fungovania webovej stránky.

Formuláre HTML poskytujú pohodlný spôsob, ako odovzdať malý počet hodnôt z danej stránky na akúkoľvek inú stránku na webe. Existujú aj iné spôsoby, ako zachovať stav pri mnohých zobrazeniach stránok, ktoré sú dlhšie trvajúce, ako sú súbory cookie a relácie, ktorým sa budeme venovať v budúcom článku. Tento článok sa zameriava najmä na najjednoduchšie spôsoby prenosu informácií medzi webovými stránkami, ktoré využívajú metódy GET a POST v kombinácii s protokolom HTTP na vytváranie dynamicky generovaných stránok a spracovanie údajov z formulárov.

GET parametre

Metóda GET odovzdáva parametre z predchádzajúcej stránky na ďalšiu ako súčasť reťazca dotazu, ktorý je reprezentovaný vo formáte URI Uniform Resource Identifier. Keď na spracovanie formulára použijete metódu GET, za adresou URL identifikovanou atribútom akcie formulára nasleduje za oddeľovačom otáznik, za ktorým nasleduje zadaný názov (názvy) premennej a hodnota (hodnoty) a celý reťazec je odovzdané spracovateľovi (v tomto prípade webovému serveru).

Nižšie je uvedený príklad HTML formulára, ktorý používa metódu GET (napíšte toto označenie a uložte súbor ako sportselect.html):

Základy PHP

Vyberte si svoj obľúbený šport

Keď používateľ urobí svoj výber a klikne na tlačidlo Odoslať, prehliadač pripojí nasledujúce prvky v zobrazenom poradí bez medzier medzi prvkami:

  • URL v úvodzovkách za slovom action (http://localhost/sports.php).
  • Otáznik (?), ktorý označuje, že nasledujúce znaky tvoria reťazec GET.
  • Názov premennej, znamienko rovnosti (=) a príslušný parameter hodnoty (hodnota=Hokej).
  • Ampersand (&), za ktorým nasleduje pár názov=hodnota (ak existuje).

Prehliadač teda vygeneruje nasledujúci reťazec adresy URL:
http://localhost/sports.php?sport=Hockey

Prehliadač potom presmeruje výsledný reťazec adresy URL vo svojom vlastnom adresnom priestore ako novú požiadavku. PHP skript nižšie (sports.php), do ktorého je formulár odoslaný, načíta hodnoty premenných GET z poslednej časti reťazca dotazu, vloží tieto premenné a hodnoty premenných do superglobálneho poľa $_GET (má byť krátko popísané) a vykoná s týmito hodnotami niektoré potrebné akcie; v tomto prípade sa vloženie uskutoční do textového reťazca.

Nižšie je uvedený príklad kódu, ktorý ukazuje obslužný program formulára PHP pre vyššie uvedený formulár HTML:

Obľúbený šport

Váš obľúbený šport je

Všimnite si, že hodnota zadaná do poľa formulára HTML s atribútom name="sport" na predchádzajúcej stránke je teraz dostupná ako premenná PHP s názvom $_GET["sport"]. Nasledujúci obrázok ukazuje, ako tento príklad funguje:

Teraz musíme presne vysvetliť, ako môžete získať prístup k hodnotám odovzdaným zo stránky na stránku. Tento článok pojednáva o dvoch hlavných metódach odovzdávania hodnôt používaných vo formulároch - GET a POST. Každá metóda má spojené superglobálne pole. Superglobálne polia sú podrobnejšie popísané v článku „Premenné a konštanty“. Charakteristickým znakom superglobálnych polí od iných polí je prítomnosť predpony v názve vo forme podčiarknutia.

Procesor formulárov pristupuje ku každému prvku odoslanému pomocou metódy GET prístupom k poľu $_GET a ku každému prvku odoslanému pomocou metódy POST prístupom k poľu $_POST. Syntaktická štruktúra použitá na prístup k akémukoľvek prvku superglobálneho poľa je jednoduchá a úplne jednotná:

$_array_name["index_name"]

Index_name je tu časť názvu z páru názov-hodnota (pre metódu GET) alebo názov poľa formulára HTML (pre metódu POST). Podľa predchádzajúceho príkladu $_GET["sport"] špecifikuje hodnotu prvku select formulára s názvom "sport"; táto hodnota bola odovzdaná pomocou operácie GET vykonanej na pôvodnom súbore. Obsluha formulára musí použiť pole zodpovedajúce metóde, ktorou boli údaje odoslané. Konkrétne v tomto príklade hodnota $_POST["sport"] nie je definovaná, pretože pôvodný formulár neodoslal žiadne údaje pomocou metódy POST.

Metóda spracovania formulára GET má oproti metóde POST jednu významnú výhodu – v skutočnosti vám umožňuje zakaždým vygenerovať nový reťazec dopytu URL, vhodný pre aktuálnu situáciu. Používatelia si potom môžu túto stránku uložiť ako záložku. Na druhej strane výsledky odosielania formulárov metódou POST nemožno uložiť do záložiek.

To, že požadovanú funkcionalitu možno dosiahnuť pomocou parametrov GET, neznamená, že je potrebné použiť metódu GET. Nevýhody metódy GET, ktoré sa vyskytujú vo väčšine typov spracovania formulárov, sú také významné. Pôvodná pracovná špecifikácia HTML 4.0, publikovaná v roku 1997, túto metódu neodporúčala. Hlavné nevýhody metódy GET sú uvedené nižšie:

  • Metóda GET nie je použiteľná na vytváranie registračných okien, pretože používateľské meno a heslo sú úplne viditeľné na obrazovke a je tiež možné, že tieto údaje sú uložené v pamäti prehliadača klienta ako informácie o navštívenej stránke.
  • Každá operácia prenosu GET, vrátane samotného súboru údajov, je zaznamenaná na webovom serveri.
  • Metóda GET priraďuje údaje k premennej prostredia servera, takže dĺžka adresy URL je obmedzená. Možno ste videli, ako vyzerajú veľmi dlhé adresy URL, keď sa prenášajú pomocou metódy GET, a skutočne je nepravdepodobné, že by niekto chcel poslať 300-slovný kus HTML textu pomocou tejto metódy.

Pôvodná špecifikácia HTML uvádzala, že dĺžka reťazca dotazu by nemala presiahnuť 255 znakov. Samozrejme, toto obmedzenie bolo neskôr odstránené a zostalo len odporúčanie dodržať limit 255 znakov, no používanie dlhších riadkov môže stále spôsobovať rušenie.

Parametre POST

V súčasnosti je preferovanou metódou odosielania údajov formulára POST (najmä v prípadoch, keď vykonávanie akcií vedie k trvalým zmenám, ako je napríklad zadávanie informácií do databázy). Súbor údajov formulára je zahrnutý do tela formulára, keď je formulár presmerovaný na agenta spracovania (v tomto prípade na interpret PHP). Reťazec adresy URL neprechádza žiadnymi viditeľnými zmenami, ktoré by odrážali rôznorodosť prenášaných údajov.

Medzi vývojármi je rozšírený neopodstatnený názor, že metóda POST je bezpečnejšia ako GET. V skutočnosti ani jedna metóda nie je viac či menej bezpečná ako tá druhá. Návštevník môže zobraziť premenné a údaje odoslané pomocou metódy POST rovnako dobre ako pomocou metódy GET. Jediný rozdiel je v tom, že v prvom prípade sa prenášané dáta nenachádzajú v adresnom riadku. To však neznamená, že sú skryté. Údaje odoslané pomocou metódy POST môže používateľ webovej stránky prezerať a upravovať.

Prvé a najdôležitejšie pravidlo programovania, najmä sieťového programovania, je toto:
Nikdy neverte vstupným údajom.

Vždy by ste mali predpokladať, že návštevník mohol zlomyseľne alebo dokonca náhodne zmeniť údaje prenášané do konkrétnej aplikácie, takže tieto údaje musíte starostlivo skontrolovať.

Prenášané údaje formulára sú viac-menej bezpečné iba vtedy, ak je požiadavka zabezpečená pomocou SSL, TLS alebo inej metódy šifrovania. Dáta ale stále prichádzajú ku koncovému používateľovi či návštevníkovi v prehľadnej forme, takže má stále možnosť údaje prezerať a meniť tak či onak. Faktom je, že protokol SSL jednoducho šifruje údaje prenášané cez sieť, čo neumožňuje zobrazenie údajov v čistom texte vo fáze ich prechodu od odosielateľa k príjemcovi. Čo sa týka možnosti návštevníka vykonávať zmeny v údajoch formulárov, protokol SSL neposkytuje nič, čo by tomu bránilo.

Ak chcete zmeniť spôsob prenosu údajov v predchádzajúcom príklade, musíte vykonať nasledujúce zmeny:

...

Práca s viacerými hodnotami

Ak má formulár začiarkavacie políčka alebo prepínače, vzniká nový problém. Napríklad používateľ môže vybrať dve hodnoty naraz vo formulári, ale premenná nemôže uložiť viac ako jednu hodnotu, takže bude potrebné použiť pole. Táto situácia je znázornená na príklade nižšie:

"metóda="post">
Vyberte si svoje obľúbené domáce zvieratá

Vybrané zvieratá: "; foreach ($animal as $a) ( echo " ".htmlentities($a).""; } } ?>

Tento formulár umožňuje používateľovi vybrať si svoje obľúbené domáce zvieratá. V tomto príklade môže používateľ začiarknuť niekoľko políčok naraz. To znamená, že pri spracovaní údajov formulára v skripte PHP je potrebné poskytnúť možnosť prístupu k viacerým hodnotám pomocou jedného názvu. Za názov v atribúte name sme umiestnili pár hranatých zátvoriek (), aby bolo možné odoslať viacero možností ako pole. Ak by boli hranaté zátvorky vynechané a používateľ by zaškrtol viaceré políčka, ich výber by bol prepísaný posledným zaškrtnutým políčkom. Umiestnením hranatých zátvoriek za názov sme naznačili, že hodnoty by mali byť uložené ako pole.

V obslužnom programe je pole uložené v premennej $animal a vymenované pomocou cyklu foreach, ako bežné pole.

Overenie formulára a formátovanie premenných formulára

Keď aplikácia prijme údaje od používateľa, musí zakaždým skontrolovať ich správnosť. Ak nekontrolujete údaje zadané používateľom, môžete mať veľa problémov vrátane bezpečnostných rizík. Vykonať previerku nie je také ťažké, ako sa môže zdať.

Pre používateľov je pohodlnejšie kontrolovať na strane klienta pomocou JavaScriptu, ale bez ohľadu na to, či sa táto kontrola používa, musí sa vykonať overenie na strane servera.

Ďalšia vec, ktorú je potrebné zvážiť pri vytváraní formulárov HTML, je, že ak formulár potrebuje zobraziť predvyplnený vstup, musí byť nastavený atribút value. Tento bod platí najmä pre dva typy formulárov – formuláre, ktoré sa používajú na úpravu údajov prijatých z databázy, a formuláre, ktoré sú určené na odosielanie údajov viackrát. Posledný prípad je veľmi častý v situáciách, keď sa formulár musí znova zobraziť po zistení chýb v už vopred vyplnených údajoch. Príkladom môže byť registračný formulár, ktorý neprijíma údaje na spracovanie, kým používateľ neposkytne platnú e-mailovú adresu alebo iné požadované údaje.

Príklad nižšie ukazuje, ako spracovať formulár vrátane overenia na strane servera a spracovania na tej istej stránke formulára:

Základy PHP

"metóda="post">
Kontaktné informácie "class="">
"class="">

Tento príklad používa funkciu filter_var(), ktorá testuje premennú pomocou filtra a berie dva parametre – zdrojový reťazec a konštantu označujúcu typ filtra. Okrem overovania e-mailových adries (FILTER_VALIDATE_EMAIL) táto funkcia podporuje nasledujúce konštanty: FILTER_VALIDATE_URL - kontroluje hodnotu pre správnosť URL (napríklad), FILTER_VALIDATE_IP - kontroluje hodnotu pre správnosť IP adries, FILTER_VALIDATE_REGEXP - kontroluje hodnotu pre správnosť syntaxe regulárneho výrazu a niekoľkých ďalších konštánt, ktoré sú alternatívami k funkciám is_bool(), is_float(), is_int() atď.

Táto a nasledujúce časti stručne popíšu, ako vytvoriť základné webové aplikácie pomocou PHP. To, čo bolo diskutované v tejto časti, zjavne nestačí na to, aby vaša aplikácia komunikovala s používateľom a formulovala v závislosti od akcií, ktoré vykonal, alebo parametrov, ktoré zadal. Čo chýba? Nie je dostatok vedomostí o tom, ako organizovať zadávanie používateľských údajov a prenos týchto údajov na server. Mali by ste už mať základné vedomosti o tom, ako programovo spracovať informácie prijaté na serveri.

Metódy HTTP požiadaviek a ich parametre

Akákoľvek dynamická webová aplikácia generuje odpoveď používateľovi v súlade s ním zadanými parametrami alebo akciami vykonanými na strane klienta. Kontaktovanie servera sa najčastejšie skladá z dvoch typov požiadaviek: pomocou metódy GET alebo metódy POST. Niekoľko slov o rozdieloch medzi týmito dvoma typmi žiadostí.

GET metóda:

    Parametre sa odovzdávajú v hlavičke HTTP požiadavky, takže sú viditeľné na príkazovom riadku a takúto požiadavku je možné uložiť ako záložky. Keďže celková dĺžka hlavičky je obmedzená, je obmedzený aj počet a dĺžka parametrov odovzdaných pomocou GET.

    Predpokladá sa, že výsledky niekoľkých identických požiadaviek GET vykonaných v rade by mali byť rovnaké.

Spôsob POST:

    Parametre požiadavky sa odovzdávajú v tele požiadavky HTTP, takže sa nenachádzajú v príkazovom riadku. Počet a veľkosť parametrov je neobmedzená.

    Predpokladá sa, že výsledky viacerých identických požiadaviek POST môžu vrátiť rôzne hodnoty, pretože môžu zmeniť vlastnosti cieľového objektu.

Metóda GET by sa mala použiť na získanie obsahu informačného zdroja podľa parametrov, keď nie je potrebné vykonávať zmeny v dátových štruktúrach cieľového zdroja a má zmysel uložiť požiadavku (URL) do záložiek. Metóda GET môže byť rýchlejšia ako podobné požiadavky využívajúce metódu POST.

Metóda POST by sa mala použiť, keď potrebujete skryť parametre odovzdané serveru z adresy URL. Táto metóda by sa mala použiť aj v požiadavkách na zmeny obsahu cieľového zdroja, pričom sa poskytne popis týchto zmien v parametroch (v tele požiadavky).

Cesta k zdroju?parameter1=hodnota1¶meter2=hodnota2&…

Ak nemáte špeciálny HTML formulár na vyplnenie parametrov, môžete odladiť fungovanie vašej PHP aplikácie zadaním testovacích parametrov priamo na príkazovom riadku prehliadača, napríklad:

Http://site/php-samples/sql.php?sql=select * from d_staff

Na prístup k parametrom požiadavky na strane servera by ste mali použiť globálne polia $_GET A $_POST resp. Ak vašej aplikácii nezáleží na tom, akou metódou sa k nej pristupuje, mali by ste použiť pole $_REQUEST, ktorý kombinuje údaje polí $_GET a $_POST, napríklad takto:

$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"] : "";

V tomto príklade program zisťuje, či bol zadaný parameter „sql“: ak áno, priradí jeho hodnotu zodpovedajúcej premennej, a ak nie, priradí jej prázdnu hodnotu.

Definovanie parametrov HTTP požiadavky cez HTML formulár

Samozrejme, manuálne definovanie parametrov priamo v príkazovom riadku prehliadača nie je príliš pohodlné. Táto metóda je vhodná na programové vykonávanie HTTP požiadaviek, keď webové aplikácie medzi sebou komunikujú. Na zadanie a vykonanie prvotného overenia údajov na strane klienta by ste mali použiť formuláre HTML a . Nižšie je uvedený príklad najjednoduchšieho formulára, pomocou ktorého sa zadáva textový parameter (hodnota), ktorý sa následne odovzdá serveru ako parameter metódy POST.

metóda ="príspevok" akcie =’sql.php’ > SQL:

Atribút metódy prvku formulára určuje metódu, ktorá určuje spôsob prenosu údajov na server (získanie alebo odoslanie). Atribút akcie určuje php súbor, ktorá žiadosť spracuje. Ak by mal byť obslužným programom aktuálny súbor, potom atribút action nie je potrebné pridávať. Pre všetky prvky, ktorých hodnota musí byť odovzdaná ako parameter požiadavky HTTP, musíte definovať jedinečnú hodnotu pre atribút name. Je to hodnota atribútu názov bude index v poliach $_GET, $_POST alebo $_REQUEST (pozri príklad vyššie). Stlačením tlačidla Predložiť odošle formulár so všetkými zadanými hodnotami na server.