Typy žádostí o získání příspěvku. Požadavky Post and Get, jaký je mezi nimi rozdíl a který je lepší a pro jaké účely? Zdroje a metody

Tento příspěvek je určen k vysvětlení principů přenosu dat na internetu pomocí dvou hlavních metod: GET a POST. Napsal jsem to jako doplněk k návodu ke generátoru rozvrhu směn pro ty, které pravděpodobně nebudou zajímat podrobnosti ☺.

Přejděte na následující adresu (toto je pro vizuální vysvětlení): http://calendarin.net/calendar.php?year=2016 Věnujte pozornost adresnímu řádku prohlížeče: calendarin.net/calendar.php ?rok=2016 Hlavní soubor je pojmenován, za ním následuje otazník (?) a parametr „rok“ s hodnotou „2016“. Takže vše, co následuje za otazníkem, je požadavek GET. Je to jednoduché. Chcete-li předat více než jeden parametr, musí být odděleny znakem ampersand (&). Příklad: calendarin.net/calendar.php ?year=2016&display=work-days-and-days-off

Hlavní soubor je stále pojmenován, následuje otazník (?), poté parametr „rok“ s hodnotou „2016“, poté ampersand (&), poté parametr „zobrazení“ s hodnotou „pracovní dny- a-dny" -vypnuto".

Parametry GET lze změnit přímo v adresním řádku prohlížeče. Například změnou hodnoty „2016“ na „2017“ a stisknutím klávesy se dostanete do kalendáře pro rok 2017.

Jedná se o skrytý přenos dat (adresa stránky se nemění); to znamená, že můžete vidět pouze to, co bylo přeneseno pomocí programu (skriptu). Například v následujícím nástroji pro počítání znaků v textu jsou původní data přenášena metodou POST: http://usefulonlinetools.com/free/character-counter.php

Pokud máte nějaké dotazy, připomínky a můj e-mail je vám k dispozici.

Kromě metody GET, kterou jsme probrali v předchozím příspěvku, existuje ještě jedna metoda pro odeslání požadavku přes protokol HTTP - metoda POST. V praxi je také velmi často využívána metoda POST.

Pokud jsme pro kontaktování serveru metodou GET museli pouze zadat požadavek do URL, pak v metodě POST vše funguje na jiném principu.

Abychom mohli tento typ požadavku provést, musíme kliknout na tlačítko s atributem type="submit", které se nachází na webové stránce. Upozorňujeme, že toto tlačítko se nachází v prvku

, který má atribut method nastaven na post.

Zvažte tento HTML kód:

Zadejte text:


Pokud uživatel zadá text do textového pole a klikne na tlačítko „Odeslat“, textová proměnná bude odeslána na server s hodnotou obsahu, který uživatel zadal.

POST a GET požadavky jednoduchými slovy

Tato proměnná bude odeslána pomocí metody POST.

Pokud formulář napíšete takto:

Poté budou data odeslána metodou GET.

Pokud v případě požadavku GET bylo množství dat, které jsme mohli přenést, omezeno délkou adresního řádku prohlížeče, pak v případě požadavku POST žádné takové omezení neexistuje a můžeme přenést značné množství informací.

Dalším rozdílem mezi metodou POST a metodou GET je, že metoda POST skrývá všechny proměnné, které předává, a jejich hodnoty ve svém těle (Entity-Body). V případě metody GET byly uloženy v řetězci požadavku (Request-URI).

Zde je příklad požadavku provedeného pomocí metody POST:

POST / HTTP/1.0\r\n
Hostitel: www.site.ru\r\n
Referent: http://www.site.ru/index.html\r\n
Soubor cookie: příjem=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Obsah-délka: 35\r\n
\r\n
login=Dima&password=12345

Při přenosu dat metodou POST bude tedy pro útočníka mnohem obtížnější je zachytit, protože jsou skryty přímému pohledu, proto je metoda POST přenosu dat považována za bezpečnější metodu.

Navíc pomocí metody POST můžete přenášet nejen text, ale i multimediální data (obrázky, zvuk, video). Existuje speciální parametr Content-Type, který určuje typ informací, které je třeba přenést.

A konečně, pro příjem dat, která byla touto metodou přenesena na server, se používá proměnná POST.

Zde je příklad zpracování v PHP:

echo $_POST['text'];
?>

V posledním příspěvku jsme se rozhodli, že prohlížeč (klient) posílá HTTP požadavky na server a server posílá HTTP odpovědi klientovi. Tyto požadavky a odpovědi jsou formátovány podle určitých pravidel. Existuje něco jako syntaxe, jak a v jakém pořadí se má psát. Musí existovat přesně definovaná struktura.

Podívejme se blíže na tuto strukturu, podle které jsou požadavky a odpovědi zabudovány v protokolu HTTP.

Požadavek HTTP se skládá ze tří hlavních částí, které se objevují v níže uvedeném pořadí. Mezi hlavičkami a tělem zprávy je prázdný řádek (jako oddělovač), který představuje znak posunu řádku.

Prázdný řetězec (oddělovač)

Požadavky Post and Get, jaký je mezi nimi rozdíl a který je lepší a pro jaké účely?

tělo zprávy (Entity Body) – volitelný parametr

Řetězec dotazu– určuje metodu přenosu, adresu URL, ke které se má přistupovat, a verzi protokolu HTTP.

Nadpisy– popisuje tělo zpráv, přenáší různé parametry a další informace a informace.

tělo zprávy- toto jsou samotná data, která jsou přenášena v požadavku. Tělo zprávy je volitelný parametr a může chybět.

Když obdržíme požadavek na odpověď ze serveru, tělo zprávy je nejčastěji obsahem webové stránky. Ale při odesílání požadavků na server může být také někdy přítomen, například když na server přenášíme data, která jsme vyplnili ve formuláři zpětné vazby.

Na každý prvek požadavku se podíváme podrobněji v následujících poznámkách.

Vezměme si například jeden skutečný požadavek na server. Každou část požadavku jsem zvýraznil jinou barvou: řádek požadavku je zelený, záhlaví oranžové a tělo zprávy modré.

Požadavek prohlížeče:

Hostitel: webgyry.info

Cookie: wp-settings

Spojení: keep-alive

V následujícím příkladu je již tělo zprávy přítomno.

Odpověď serveru:

Content-Typ: text/html; znaková sada=UTF-8

Transfer-Encoding: chunked

Spojení: keep-alive

Keep-Alive: časový limit=5

X-Pingback: //webgyry.info/xmlrpc.php

Dokument bez názvu

Jedná se o zprávy vyměňované mezi klientem a serverem prostřednictvím HTTP.

Mimochodem, chcete zjistit, zda má nějaký prvek na vašem webu smysl pomocí „cílů“ Yandex Metrics a Google Analytics?

Odstraňte to, co nefunguje, přidejte to, co funguje, a zdvojnásobte své tržby.

Kurz o nastavení cílů Yandex Metrics..

Kurz o nastavení cílů Google Analytics...

HTTP klient odešle požadavek na server ve formě zprávy požadavku, která má následující formát:

  • Řetězec dotazu (povinný)
  • Nadpis (volitelný prvek)
  • Prázdný řetězec (povinný)
  • Tělo zprávy (volitelný prvek)

Podívejme se na každý z těchto prvků samostatně.

Řetězec dotazu

Řádek požadavku začíná tokenem metody, za nímž následuje identifikátor URI požadavku a verze protokolu. Prvky jsou od sebe odděleny mezerami:

Podívejme se na tento prvek podrobněji.

Metoda požadavku

Tento prvek určuje metodu, která by měla být volána na straně serveru na zadaném URI.

HTTP má osm metod:

  • HLAVA
    Používá se k získání stavu a řetězce záhlaví ze serveru pomocí URI. Nemění data.
  • DOSTAT
    Používá se k příjmu dat ze serveru na zadaném URI. Nemění data.
  • POŠTA
    Používá se k odesílání dat na server (jako jsou informace o vývojáři atd.) pomocí formulářů HTML.
  • DÁT
    Nahradí všechna předchozí data ve zdroji novými načtenými daty.
  • VYMAZAT
    Odstraní všechna aktuální data na prostředku určeném identifikátorem URI.
  • PŘIPOJIT
    Naváže tunelové připojení k serveru na zadaném URI.
  • MOŽNOSTI
    Popisuje vlastnosti připojení pro zadaný prostředek.
  • STOPA
    Poskytuje zprávu obsahující návratovou stopu umístění zdroje zadaného v URI.

URI požadavku

URI (Uniform Resource Identifier) ​​je identifikátor zdroje, na který je požadavek odeslán. Nejběžněji používaný formát URI je následující:

‘*’ používá se, když se požadavek HTTP nevztahuje ke konkrétnímu zdroji, ale k serveru. Používá se pouze v případě, že metodu není třeba aplikovat na zdroj. Například,

absolutníURI používá se při požadavku HTTP na serveru proxy. Proxy je požádán o předání požadavku z dostupné mezipaměti a vrátí odpověď. Například:

absolutní_cesta | zdroj nejčastěji používané.

Naučit se pracovat s požadavky GET a POST

Je požadován konkrétní zdroj na konkrétním serveru. Klient chce například přijímat zdroj ze serveru přes port 80. Adresa zdroje je „www.proselyte.net“ a odesílá následující požadavek:

Dotazování na pole záhlaví

Pole záhlaví umožňují klientovi předat serveru další informace o požadavku ao něm samotném. Tato pole fungují jako modifikátory dotazu.

Níže je uveden seznam nejdůležitějších polí záhlaví, která lze použít:

  • Accept-Charset
  • Accept-Encoding
  • Přijímací jazyk
  • Oprávnění
  • Očekávat
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Rozsah
  • Referrer
  • User-Agent

Pokud chceme implementovat vlastního klienta a vlastní webový server, můžeme si vytvořit vlastní pole záhlaví.

Příklad požadavku HTTP

Tím končí naše studie požadavků HTTP.
V příštím článku se podíváme na HTTP odpovědi.

Jedním ze způsobů, jak odeslat požadavek HTTP na server, je metoda GET. Tato metoda je nejběžnější a nejčastěji se pomocí ní odehrávají požadavky na server.

Nejjednodušší způsob, jak vytvořit požadavek GET, je zadat adresu URL do adresního řádku prohlížeče.

Prohlížeč odešle serveru přibližně následující informace:

GET / HTTP/1.1
Hostitel: webgyry.info
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Přijmout: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: wp-settings
Spojení: keep-alive

Žádost se skládá ze dvou částí:

1. Linka žádostí

2. Záhlaví zpráv

Všimněte si, že požadavek GET nemá tělo zprávy. To ale neznamená, že s jeho pomocí nemůžeme přenášet žádné informace na server.

Rozdíl mezi metodami GET a POST

To lze provést pomocí speciálních parametrů GET.

Chcete-li do požadavku přidat parametry GET, musíte na konec adresy URL přidat „?“. a poté se jich začněte ptát podle následujícího pravidla:

název_parametru1=hodnota_parametru1& název_parametru2=hodnota_parametru2&…

Oddělovač mezi parametry je znak „&“.

Pokud například chceme serveru předat dvě hodnoty, uživatelské jméno a jeho věk, lze to provést pomocí následujícího řádku:

http://site.ru/page.php?name=dima&age=27

Když je tento požadavek proveden, data skončí v tzv. proměnné prostředí QUERY_STRING, ze které je lze na serveru načíst pomocí webového programovacího jazyka na straně serveru.

Zde je příklad toho, jak to lze provést v PHP.

echo "Vaše jméno: ". $_GET["jméno"] . "
»;
echo "Váš věk: " . $_GET["věk"] . "
»;
?>

Konstrukce $_GET[“parameter_name”] umožňuje zobrazit hodnotu předávaného parametru.

V důsledku spuštění tohoto kódu v prohlížeči se zobrazí následující:

Vaše jméno: dima
Váš věk: 27

Také provádíme požadavek na server pomocí metody GET.

V této lekci se podíváme na techniky předávání dat mezi formuláři a stránkami. Takové metody jsou POST a GET. O každém si povíme zvlášť a podrobněji. Obecně řečeno, je to potřeba pro komunikaci mezi formuláři. Například vyplníme některá pole na stránce a potřebujeme je přenést na jinou stránku ke zpracování.

Metoda GET v PHP

Nejprve se podívejme na metodu GET. To je, když jsou všechny proměnné a jejich hodnoty předávány přímo přes adresu. Nyní na příkladu uvidíte vše a dokonce pochopíte, jak většina webů a fór funguje.
Máme například html stránku, jako je tato:

Příklad stránky pro předávání proměnných pomocí Get odkaz

Viz odkaz? Je komplexní a skládá se z několika částí. Pojďme si to rozebrat kousek po kousku:
https://stránka— adresa domény nebo, jak se také nazývá, hostitel.
index.php— stránka v PHP, která zpracuje požadavek.
? — symbol oddělení adresy a bloku s proměnnými.
Dále následují proměnné a jejich hodnoty, které jsou odděleny symbolem & .
jméno=Sergej— název proměnné a její hodnota Sergey.
věk=22- totéž, proměnný věk, hodnota 22.

Vše jsme vyřešili, nyní se podívejme, jak je to zpracováno v php pomocí metody GET.
Stránka index.php, jak si vzpomínáte, jsme jí předali:

Nejprve rada: VŽDY zkontrolujte správnost svých proměnných: prázdnotu, shodu s platnými hodnotami a tak dále. Protože se vše přenáší přes adresní řádek, data lze snadno vyměnit a poškodit web. Nyní k samotnému kódu: pomocí , jsme zkontrolovali prázdné proměnné jméno a věk, a pokud nebyly prázdné, zobrazili jsme je, a pokud byly prázdné, jednoduše jsme to nahlásili.
Je to jednoduché, souhlasíte? Můžete například vytvořit html stránku a vytvářet odkazy přes proměnné v menu a v index.php proměnnou zpracovat a zobrazit konkrétní stránku v závislosti na přijaté hodnotě. No, o tom si povíme později, v článku o vytvoření webu v PHP od nuly. Aby vám nic neuniklo, radím vám přihlásit se k odběru RSS.

Metoda POST v PHP

Abychom demonstrovali, jak tato metoda funguje, budeme potřebovat trochu víc než obyčejný řádek s adresou :) Budeme potřebovat vytvořit HTML stránku s formulářem k vyplnění, ale to nevadí, dám vám hotový příklad:

Příklad stránky pro předávání proměnných pomocí Post Vyplňte pole pro přenos informací:

Zadejte své jméno:

Uveďte prosím svůj věk:



Vytvořili jsme tedy html stránku s jednoduchým formulářem. Pamatujte, že metodu POST lze použít pouze ve formuláři.
Prvním parametrem formuláře je „metoda“, definuje metodu, kterou použijeme pro převod. Jak jste možná uhodli, jedná se buď o GET nebo POST. Navíc, pokud je nastaveno GET, pak jsou všechny názvy polí (ve formě názvů proměnných), stejně jako jejich hodnoty, předány odkazem, jako v části o metodě GET. Pokud je nastaveno POST, všechny názvy a hodnoty proměnných budou odeslány jako požadavek prohlížeče na webový server. To znamená, že nebudou viditelné v adresním řádku. V mnoha případech je to velmi užitečné. POST je také bezpečnější, což je pochopitelné, protože proměnné s jejich hodnotami již není tak snadné upravovat, i když je to také možné.

Druhý parametr formuláře je „akce“. Toto je cesta a název souboru skriptu, kterému předáváme data. V našem případě je to index.php. Tato cesta může být přenesena celá, tedy takto: action = „https://my_site.ru/index.php“. Pokud nezadáte hodnotu parametru „action“, pak se všechny informace přenesou do hlavního skriptu, tedy indexové stránky index.php vašeho webu, což je celkem logické.

Nyní získáme data z našeho formuláře. Protože jsme to předali index.php, níže bude kód této konkrétní stránky:

"; echo "name - "; echo $_POST["user_name"]; echo "
věk - "; echo $_POST["věk"]; echo "roky"; ) else ( echo "Proměnné nedorazily. Zkontrolujte vše znovu."; ) ?>

Nezapomeňte zkontrolovat prázdnotu a platné hodnoty. Dále musíme objasnit, proč se naše proměnné nazývají uživatelské_jméno a věk? A podívejte se na pole formuláře, který jsme vytvořili výše. Podívejte se tam input name="user_name" type="text"? Zde parametr name určuje název proměnné, kterou pomocí tohoto pole získáme. S věkem je to stejné. Doufám, že je to jasné. Získání proměnné a její hodnoty pomocí POST se téměř neliší od GET, o kterém jsme hovořili výše.

No, ukázalo se to jako velká lekce, ale jedna z nejužitečnějších, protože předávání proměnných mezi formuláři a stránkami je přesně ta interaktivita, pro kterou PHP používáme.

Společné mají to, že fungují stejným způsobem. Technicky mezi nimi není žádný rozdíl. Ale existují ideologické rozdíly.

Budu o nich mluvit v kontextu PHP. Upozorňujeme, že protokol HTTP nepřímo souvisí s PHP, protože byl vytvořen pro výměnu html stránek a PHP jednoduše rozšiřuje možnosti obou.

Požadavek GET se používá k příjmu dat a POST se používá k odesílání. (Pamatujte, že technicky fungují stejně).

Proto jsme v kontextu PHP na základě této ideologie udělali následující:
1. Při každém spuštění PHP se ve výchozím nastavení vytvoří superglobální pole ($_GET, $_POST).
2. Pokud je v řetězci dotazu otazník(?). Vše po tom je zváženo parametry GET požadavek, jsou prezentovány ve formátu "key"="value" a znak ampersand (&) je použit jako oddělovač.
Příklad:
GET /index.php?name=Andrey&surname=Galkin
Toto je řetězec dotazu, jsou zde 2 parametry. tyto parametry přejdou do pole $_GET.
3. $_POST se vyplňuje jiným způsobem. obsah tohoto pole je vyplněn z "hlaviček požadavku". Tedy z místa jasně skrytého zraku. Prohlížeč se stará o všechny práce spojené s vytvářením takových záhlaví. I když se občas něco upraví v nadpisech ručně.

Nejčastěji se ve formulářích používá požadavek na odeslání (k odeslání dat).

Máme například přihlašovací formulář se 2 poli: login a password.

Představme si, že používáme metodu GET. Poté při odesílání formuláře přejdeme na následující adresu /login.php?login=Andrey&password=123 Souhlasíte s tím, že předávání takových informací tímto způsobem není vůbec bezpečné. Kdokoli může otevřít váš prohlížeč a po zadání adresy webu uvidí vaše hesla a přihlašovací údaje z historie.

Pokud bychom však zadali metodu POST, obdrželi bychom následující požadavek:
POST /login.php (login=Andrey&password=123) to, co je v hranatých závorkách, by bylo skryto a nebylo by to nijak uloženo v prohlížeči.

Shrnout to:
GET znamená získat určitou stránku v určité formě (řazení, aktuální stránka blogu, vyhledávací lišta atd.).
POST - pro odesílání dat, která neovlivňují zobrazení stránky, v tom smyslu, že tato data ovlivňují pouze výsledek skriptu (login, hesla, čísla kreditních karet, zprávy atd.).

A další dobrou zprávou je, že se dají například kombinovat
POST /index.php?page=login (login=Andrey&password=123) Myslím, že jsem již dostatečně vysvětlil, co z toho vzejde a jaké parametry půjdou do kterého pole.

HTML formuláře. $_POST a $_GET pole

HTML formuláře. Metody odesílání dat na server

Pravděpodobně jste se již setkali s HTML formuláři:

Zadejte své jméno:

Uložením tohoto kódu do souboru HTML a jeho zobrazením ve vašem oblíbeném prohlížeči uvidíte známý HTML formulář:

Štítek

, mající spárovanou koncovou značku
, vlastně nastavuje formu. Jeho atributy jsou oba volitelné:

  • akce - určuje URL (úplnou nebo relativní), na kterou bude formulář odeslán. Pokud tento atribut není zadán, většina prohlížečů (přesněji všechny prohlížeče, které znám) odešle formulář do aktuálního dokumentu, tedy „sám sobě“. Toto je pohodlná zkratka, ale podle standardu HTML je atribut action povinný.
  • metoda - způsob odeslání formuláře. Jsou dva.
    • GET - odeslání dat formuláře v adresním řádku.
      Možná jste si všimli na různých webových stránkách přítomnosti „?“ na konci adresy URL. a následující data ve formátu parametr=hodnota. Zde "parametr" odpovídá hodnotě atributu name prvků formuláře (viz níže o značce ) a „hodnota“ je obsah atributu value (obsahuje například vstup uživatele do textového pole stejné značky ).
      Zkuste například něco vyhledat v Yandexu a věnujte pozornost adresnímu řádku prohlížeče. Toto je metoda GET.
    • POST - údaje formuláře jsou odeslány v těle požadavku. Pokud není zcela jasné (nebo zcela nejasné), co to je, nebojte se, brzy se k tomuto problému vrátíme.
    Pokud atribut metody není zadán, předpokládá se GET.

Štítek - určuje prvek formuláře definovaný atributem type:

  • Hodnota "text" určuje jednořádkové pole pro zadávání textu
  • Hodnota "odeslat" určuje tlačítko, které po kliknutí odešle formulář na server

Jiné hodnoty jsou možné (a - není jedinou značkou, která určuje prvek formuláře).

Co se tedy stane, když klikneme na „OK“?

  1. Prohlížeč se podívá na prvky obsažené ve formuláři a vytvoří data formuláře z jejich atributů názvu a hodnoty. Řekněme, že je zadáno jméno Vasya. V tomto případě jsou data formuláře jméno=Vasya&okbutton=OK
  2. Prohlížeč naváže spojení se serverem, odešle na server požadavek na dokument uvedený v atributu action tagu
    , pomocí metody odesílání dat specifikované v atributu metody (v tomto případě - GET), předávání dat formuláře v požadavku.
  3. Server analyzuje přijatý požadavek, vygeneruje odpověď, odešle ji do prohlížeče a uzavře spojení
  4. Prohlížeč zobrazí dokument přijatý ze serveru

Ruční odeslání stejného požadavku (pomocí telnetu) vypadá takto (za předpokladu, že název domény webu je www.example.com):

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Hostitel: www.example.com\r\n \r\n

Jak jste již pravděpodobně uhodli, kliknutí na tlačítko Odeslat ve formuláři s metodou odeslání „ZÍSKAT“ je stejné jako zadání příslušné adresy URL (s otazníkem a údaji z formuláře na konci) do adresního řádku prohlížeče:

Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

Ve skutečnosti se metoda GET používá vždy, když požadujete dokument ze serveru pouhým zadáním jeho URL nebo kliknutím na odkaz. Použitím , k URL se jednoduše připojí otazník a data formuláře.

Možná vám všechny tyto technické detaily a cvičení s telnetem připadají neuvěřitelně nudné a dokonce zbytečné („co s tím má společného PHP?“). Ale marně. :) To jsou základy práce s HTTP protokolem, které musí znát každý webový programátor nazpaměť a nejedná se o teoretické znalosti - to vše se bude hodit v praxi.

Nyní nahradíme první řádek našeho formuláře následujícím:

Způsob odeslání jsme zadali jako „POST“. V tomto případě jsou data odesílána na server mírně odlišným způsobem:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Hostitel: www.example.com\r\n Content-Type: application/x-www-form-urlencoded\r\ n Content-Length: 41263\r\n \r\n name=Vasya&okbutton=OK

Při použití metody POST jsou data formuláře odeslána po „dvou vstupech“ - v těle požadavku. Vše výše uvedené je ve skutečnosti hlavička požadavku (a když jsme použili metodu GET, data formuláře byla odeslána v hlavičce). Aby server věděl, na kterém bajtu má přestat číst tělo požadavku, hlavička obsahuje řádek Content-Length; že data formuláře budou přenášena ve tvaru parametr1=hodnota1¶metr2=hodnota2... a hodnoty se přenášejí ve tvaru urlencode - tedy úplně stejně jako při použití metody GET, ale v těle souboru request - hlavička Content informuje server -Typ: application/x-www-form-urlencoded .

Výhodou metody POST je, že není omezena délka datového řádku formuláře.

Při použití metody POST není možné odeslat formulář pouhým „následováním odkazu“ jako tomu bylo u GET .

Při použití formuláře POST můžete v atributu akce za otazníkem zadat parametry formuláře GET. Metoda POST tedy zahrnuje metodu GET.

$_GET a $_POST pole

Formuláře jsou tedy hlavním způsobem výměny dat mezi webovým serverem a prohlížečem, to znamená, že poskytují interakci s uživatelem – vlastně k čemu slouží webové programování.

Podívejme se na jednoduchý příklad:



if ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
echo"

Ahoj, " $_POST [ "jméno" ]."

!" ;
}
?>
">
Zadejte své jméno:






Formulář zobrazený na řádcích 8-12 obsahuje dva prvky: název a tlačítko ok. Atribut method určuje způsob odeslání formuláře POST, zatímco atribut action určuje URL, na kterou je formulář odeslán, a je vyplněn hodnotou serverové proměnné PHP_SELF - adresa aktuálně spuštěného skriptu.

- zkrácený tvar pro .

Předpokládejme, že jsme do pole názvu zadali hodnotu Vasya a klikli na tlačítko OK. V tomto případě prohlížeč odešle na server požadavek POST. Tělo požadavku: name=Vasya&okbutton=OK . PHP automaticky naplní pole $_POST:

$_POST ["name" ] = "Vasya"
$_POST ["okbutton" ] = "OK"

Ve skutečnosti je hodnota "Vasya" odeslána prohlížečem ve formě urlencode; pro kódování windows-1251 tato hodnota vypadá jako %C2%E0%F1%FF . Jelikož ale PHP automaticky zvládá potřebné dekódování, můžeme na tuto funkci „zapomenout“ – dokud nebudeme muset HTTP požadavky řešit ručně.

Protože tělo požadavku specifikuje pouze jména a hodnoty, ale ne typy prvků formuláře, PHP netuší, zda $_POST["name"] odpovídá vstupnímu řetězci, tlačítku nebo seznamu. Ale obecně tyto informace vůbec nepotřebujeme. :)

Protože nepotřebujeme vědět, co říká tlačítko Odeslat, můžeme odstranit atribut name na řádku 11 a zkrátit popis tlačítka na . V tomto případě prohlížeč odešle požadavek POST name=Vasya.

A teď to samé, ale pro formulář GET:



if (isset($_GET [ "název" ])) (
echo"

Ahoj, " $_GET [ "jméno" ]."

!" ;
}
?>
">
Zadejte své jméno:







Na řádek 8 by se dalo stejně snadno napsat

: GET je výchozí metoda. Tentokrát prohlížeč odešle požadavek GET, což je ekvivalentní zadání adresy do adresního řádku: http://site-address/script-name.php?name=Vasya.

PHP dělá totéž s formuláři GET jako s POST, s tím rozdílem, že pole $_GET je vyplněno.

Zásadní rozdíl je v řádku 4. Protože pouhé zadání adresy do řádku prohlížeče je požadavkem GET, kontrola, zda ($_SERVER["REQUEST_METHOD"] == "GET") nemá smysl. Proto se uchýlíme ke konstrukci isset(), která vrací true, pokud je proměnná definována (to znamená, že jí byla přiřazena hodnota), a false, pokud proměnná definována není. Pokud byl formulář vyplněn - jak jste již pochopili, PHP automaticky přiřadí $_GET["name"] příslušnou hodnotu.

Metoda ověření pomocí isset() je univerzální, lze ji také použít pro formulář POST. Navíc je výhodnější, protože vám umožňuje zjistit, která pole formuláře jsou vyplněna.

Trochu složitější příklad.




echo "Zadejte prosím jméno!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
echo
"
;
) jinak (

" ;

echo "Tobě". $věk . "let
" ;
}
echo"


" ;
}
?>
">
Zadejte své jméno:


Zadejte rok narození:







Nejsou zde použity žádné nové techniky. Zjistěte to, spusťte kód, zkuste upravit...

Změňme poslední příklad, aby uživatel nemusel pole znovu vyplňovat. Chcete-li to provést, vyplňte atributy hodnot prvků formuláře hodnotami, které jsme právě zadali.



$name = isset($_POST [ "jméno" ]) ? $_POST [ "jméno" ] : "" ;
$year = isset($_POST [ "rok" ]) ? $_POST [ "rok" ] : "" ;

If (isset($_POST [ "název" ], $_POST [ "rok" ])) (
if ($_POST [ "jméno" ] == "" ) (
echo "Zadejte prosím jméno!
" ;
) else if ($_POST [ "rok" ]< 1900 || $_POST [ "year" ] > 2004 ) {
echo "Uveďte prosím rok narození! Platný rozsah hodnot: 1900..2004
"
;
) jinak (
echo "Ahoj," . $_POST [ "jméno" ] . "!
" ;
$věk = 2004 - $_POST [ "rok" ];
echo "Tobě". $věk . "let
" ;
}
echo"


" ;
}
?>
">
Zadejte své jméno:


Zadejte rok narození:







Řádky 4 a 5 mohou být poněkud matoucí Vše je velmi jednoduché: řádek 4 lze napsat takto:

if (isset($_POST [ "název" ]))
$jméno = $_POST ["jméno" ];
jiný
$jméno = "" ;

Může vyvstat otázka - proč nevyhodit řádky 4-5 a nenapsat:

Zadejte své jméno: ">

Zadejte rok narození: ">

Jde o to, že pokud tyto proměnné POST nejsou definovány – a to bude případ, kdy formulář ještě nebyl vyplněn – PHP vydá varování o použití neinicializovaných proměnných (a celkem rozumně: taková zpráva vám umožní rychle najít těžko odhalitelné překlepy v názvech proměnných a také varovat před možnými „díry“ na webu). Isset kód můžete samozřejmě vložit přímo do formuláře, ale bude to příliš těžkopádné.

Mám to? Nyní zkuste najít chybu v daném kódu. No, není to tak úplně chyba, ale chyba.

htmlspecialchars()

Nenašli jste to? Dám ti nápovědu. Zadejte například do pole „name“ dvojitou uvozovku a nějaký text, například „Va“ Odešlete formulář a podívejte se na zdrojový kód výsledné stránky. Čtvrtý řádek bude mít něco jako:

Zadejte své jméno:

Tedy nic dobrého. Co když mazaný uživatel zadal kód JavaScript?

Chcete-li tento problém vyřešit, musíte použít funkci htmlspecialchars(), která nahradí speciální znaky jejich HTML reprezentací (například citát s "):



$name = isset($_POST [ "jméno" ]) ? htmlspecialchars ($_POST [ "název" ]): "" ;
$year = isset($_POST [ "rok" ]) ? htmlspecialchars ($_POST [ "rok" ]): "" ;

If (isset($_POST [ "název" ], $_POST [ "rok" ])) (
if ($_POST [ "jméno" ] == "" ) (
echo "Zadejte prosím jméno!
" ;
) else if ($_POST [ "rok" ]< 1900 || $_POST [ "year" ] > 2004 ) {
echo "Uveďte prosím rok narození! Platný rozsah hodnot: 1900..2004
"
;
) jinak (
echo "Ahoj," . $jméno . "!
" ;
$věk = 2004 - $_POST [ "rok" ];
echo "Tobě". $věk . "let
" ;
}
echo"


" ;
}
?>
">
Zadejte své jméno:


Zadejte rok narození:







Opakujte experiment a ujistěte se, že kód HTML je nyní správný.

Pamatujte – funkci htmlspecialchars() je nutné použít při každém zobrazení obsahu proměnné, která může obsahovat speciální znaky HTML.

phpinfo()

Funkce phpinfo() je jednou z nejdůležitějších v PHP. Zobrazuje informace o nastavení PHP, hodnoty různých konfiguračních proměnných...

Proč to zmiňuji v článku o formulářích? phpinfo() je pohodlný nástroj pro ladění. phpinfo() mimo jiné vypíše hodnoty všech proměnných $_GET, $_POST a $_SERVER. Pokud se tedy proměnná formuláře ztratí, nejjednodušší způsob, jak zjistit, co je špatně, je použít funkci phpinfo(). Aby funkce zobrazovala pouze hodnoty proměnných (a aniž byste museli procházet desítky stránek), měla by být volána následovně: phpinfo(INFO_VARIABLES); , nebo - což je naprosto totéž - phpinfo(32) ;.



">
Zadejte své jméno:


phpinfo(32);
?>



Nebo například tato situace: chcete zjistit IP adresu návštěvníka. Pamatujete si, že odpovídající proměnná je uložena v poli $_SERVER, ale – smůla – zapomněli jste, jak se proměnná přesně jmenuje. Opět zavolejte phpinfo(32); , vyhledejte svou IP adresu ve znaku a najděte ji v řádku $_SERVER["REMOTE_ADDR"] .

Štítek

- jedna z nejdůležitějších součástí každé webové stránky. Obsahuje všechny prvky - pole, tlačítka, zaškrtávací políčka, přepínače a další.

Akce a metoda

Formulář má mnoho atributů, ale ty hlavní a povinné jsou A . Pokud tyto atributy chybí, formulář nebude přijímat zadané hodnoty.

Atribut akce

— atribut, který určuje odkaz na obsluhu hodnoty. Tedy prvek, který je specifikován v , zpracuje hodnoty formuláře. Pokud jej nezadáte, všechny hodnoty se vrátí na původní hodnotu a obnoví stránku.

Můžete zadat cestu "form.html", ale častěji se používají handlery napsané v jazyce "php(form.php)". Může se také stát, že stránka, na které se formulář nachází, zpracovává hodnoty sama a je napsána v PHP. V tomto případě můžete atribut vynechat .

Také e-mailová adresa může sloužit jako zpracovatel. Chcete-li to zaznamenat v atributu action, použijte klíčové slovo mailto:, které určuje název e-mailové adresy.

Pokud k odesílání používáte e-mail, po aktivaci se otevře standardní program Windows.

Atribut metody

— odpovídá za způsob zpracování hodnot. Po aktivaci formuláře bude zadaná metoda nahlášena serveru a následně zpracována podle ní.

Existují celkem 2 způsoby zpracování - A Jsou to hodnoty atributů.

Každá hodnota může být zadána s velkým nebo malým písmenem. Na tom moc nezáleží.

metoda GET

je nejpoužívanější metoda protokolu HTTP. Přijme všechna data formuláře, zpracuje je a poté je zobrazí v adresním řádku.

Tato metoda je velmi pohodlná, protože umožňuje změnit výsledné hodnoty v řádku prohlížeče. Kromě toho lze na jeho adresu odkazovat několikrát.


Špatná stránka používání je snížení bezpečnosti a omezené množství zpracovávaných dat. Má to špatný vliv na bezpečnost, protože všechny zadané hodnoty se zobrazují v adresním řádku.

Nepoužívat vytvářet formuláře s důvěrnými informacemi. Takové formy mají zvýšenou pravděpodobnost hackování.

Metoda POST

Používá se méně často než . Také předává hodnoty formuláře, ale nezobrazuje je v adresním řádku, což zlepšuje celkové zabezpečení webu. Z tohoto důvodu se lépe hodí pro použití ve webových aplikacích.

Metoda Umožňuje předat více informací než . Můžete přenášet malé textové soubory až do velikosti 4 kB.

Díky většímu množství informací je vhodnější pro velká fóra a poštovní služby. Je vhodnější pro práci s databázemi.

Zpracované hodnoty se jednou uloží a poté zůstanou nezměněny. To znamená, že ke stejné adrese nemůžete přistupovat neomezeně mnohokrát, jako při použití této metody .

Závěr

V tomto článku jste se dozvěděli více o atributech značky formuláře a také o hodnotách A To samozřejmě nejsou všechny informace o jejich funkcích. Více o jejich práci se můžete dozvědět při učení PHP.

Tyto metody můžete podrobně porozumět studiu dalších informací. Bavte se učením!




Horní