Domov›Nastavení›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
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
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:
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:
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:
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
, 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“?
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
Prohlížeč naváže spojení se serverem, odešle na server požadavek na dokument uvedený v atributu action tagu
Server analyzuje přijatý požadavek, vygeneruje odpověď, odešle ji do prohlížeče a uzavře spojení
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:
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
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.
=$_SERVER["PHP_SELF"]?>- zkrácený tvar pro echo $_SERVER["PHP_SELF"]; ?> .
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:
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" ]."
!"
;
}
?>
Na řádek 8 by se dalo stejně snadno napsat
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.
Řá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 "):
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) ;.
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
Oblíbené v kategorii:
Jak sloučit vrstvy ve Photoshopu do jedné nebo je spojit do skupiny...