Požaduje příspěvek a dostat to, co ještě přijde. Naučit se pracovat s požadavky Získejte a post

Existují dva koncepty, které jsou společné pro téměř všechny programy - to je zpracování vstupních dat a výstupního výstupu. Na této stránce se zaměřujeme na zpracování položky programu CGI. Za prvé, kde vstupní data pocházejí, a za druhé, protože vstupní data jsou přenášena na server. Chcete-li psát efektivní programy CGI, musíte mít jasnou představu o těchto věcech.

Trochu o http

Server obdrží tři typy požadavků: dostat, post a hlavu. Požadavek na program na webový server je následující:

Získejte /index.html http / 1,0

První část tento případ Získání je metoda dotazu, druhá, index.html, je požadovaná adresa URL, třetí, http / 1.0, protokol používaný klientem.

Dva hlavní metody dotazu jsou dostanete a post. Jedná se o většinu metod, které jsou k dispozici při vytváření formuláře. Metoda hlavy je zřídka používána prohlížečem, protože požádá pouze titulu reakce a tělo odezvy není v tomto případě přenášeno. Chcete-li například ověřit, zda se stránka nezměnila, prohlížeč může požádat název, ale nevytváří plnohodnotnou výměnu dat.

Získat metodu

Ve výchozím nastavení se metoda GET používá při požadavku. Metoda příspěvku se používá pouze v případě, že je jasně uvedena v žádost formuláře. Pro programátor CGI je velmi důležité pochopit, že při požadavku na metodu GET jsou tyto formuláře přenášeny na server spolu s URL. CGI podpora webových serverů Zkopírujte tato data do proměnné prostředí s názvem Query_String. Poté se týkají programu Získání údajů z proměnné životního prostředí a jejich zpracování je přiřazen k programu CGI.

URL z řetězce dotazu vypadá takto:

Http://www.domen-name.com/login.pl?nick\u003dmaks&psw\u003dparol.

Podepsat? odděluje řetězec dotazu z adresy URL zdroje; Nick a PSW - proměnné přenášené na server, MAKS a PAROL - jejich hodnoty, resp.

Post Metoda

Metoda příspěvku se používá, když je explicitně uvedena v atributu formuláře metody. Na rozdíl od metody GET, pošta umístí data ne v adresáři URL, ale v těle dotazu. Příspěvek dotaz je z velké části podobný reakci HTTP. První řádek je standard dotaz http.ve kterém je zadána metoda příspěvku. Může mít potřebné další titulky oddělené od těla žádosti prázdným řetězcem.

Tělo dotazu při použití metody POST je přenášen do programu jako standardní vstupní proud.

Volba mezi dostat a post

Je jasné, že při vývoji forem před programátorem CGI bude otázka následující: Která z těchto metod platí. Ve většině případů jsou použitelné obě metody a oba budou fungovat dobře. Existují však situace, kdy použití jedné nebo jiné metody poskytuje určité výhody.

Zvažte několik situací, kdy má smysl preferovat metodu získat nebo post.

  • Pokud chcete, aby váš program byl nazýván odkazem, předvolba by měla být zadána metoda GET.
  • Pokud nechcete, aby argumenty přenášené váš program byl zaznamenán v souboru sestavy serveru, použijte metodu POST. Pokud například formulář vyžaduje zadávání uživatelského jména a hesla, je nepravděpodobné, že chcete, aby se jména a hesla uložena do souboru sestavy. Kromě toho není rozumné předat heslo jako součást adresy URL.
  • Pokud má váš formulář významné velikosti, není to textové pole s poznámkami a připomínkami, měla by být použita metoda příspěvku. Obecně řečeno, je možné a v tomto případě použijte metodu Získat, ale pak se můžete setkat s omezením velikosti URL, liší se pro různé operační systémy a prohlížeče (omezení vzhledem k velikosti proměnných prostředí). Je snazší použít metodu POST.
  • Pokud váš formulář obsahuje pole souboru, použijte metodu POST. Kromě toho v tomto případě musíte nastavit hodnotu atributu ENCYPE v multipartových / formulářových datech.

Klienti prohlížeče mohou odesílat informace na webový server.

Než prohlížeč odešle informace, kóduje jej pomocí schématu nazvaného kódování URL. V tomto schématu se název / hodnota kombinuje se stejnými značkami a různé dvojice jsou rozděleny ampersandem.

Jméno1 \u003d Value1 & Name2 \u003d Value2 & Name3 \u003d Value3

Prostory jsou odstraněny a nahrazeny symbolem A + a jakékoli jiné ne-alfa číselné znaky jsou nahrazeny hexadecimálními hodnotami. Po zakódování informací přejde na server.

Získat metodu

Získat metodu odesílá kódované informace o uživateli přidané do požadavku stránky. Stránky a kódované informace jsou od sebe odděleny? podepsat otázku.

http://www.test.com/index.htm?name1\u003dvalue1&name2\u003dvalue2.

  • Získejte metodu vytvoří dlouhý řetězec, který se zobrazí v protokolech serveru v poli "Umístění" prohlížeče.
  • Získejte metodu je omezena pro odeslání pouze 1024 znaků.
  • Pokud máte heslo nebo jiné důvěrné informace, nikdy nepoužívejte metodu GET, pokud máte heslo nebo jiné důvěrné informace, které chcete odeslat na server.
  • Získat nelze použít k přenosu binárních dat, jako jsou obrázky nebo textové dokumenty na server.
  • Přístup k datům odeslaným metodou GET lze získat pomocí proměnné prostředí Query_String.
  • PHP poskytuje asociativní $ _get pole pro přístup ke všem odeslaným informacím pomocí metody GET.

pokud ($ _ dostat ["Jméno"] || $ _get ["Vítejte". $ _get ["Jméno"]; echo "Jste." $ _GET ["AGE"]. "AGE"]. ;)

Název: Stáří:

Post Metoda

Metoda POŠTA. Odesílá informace prostřednictvím http titulky. Informace jsou kódovány tak, jak je popsáno v případě metody Dostat.a umístěny v názvu Řetězec dotazu..

  • Metoda příspěvku nemá žádná omezení velikosti dat, které chcete odeslat.
  • Způsob příspěvku lze použít k odeslání ASCII, stejně jako binárních dat.
  • Data odeslaná poštou procházejí hlavičkou HTTP, takže bezpečnost závisí na protokolu HTTP. Použití zabezpečeného http, můžete se ujistit, že vaše informace jsou chráněny.
  • PHP poskytuje asociativní $ _POST pole pro přístup ke všem odeslaným informacím pomocí metody POST.

Vyzkoušejte následující příklad umístěním zdrojového kódu do skriptu test.php.

pokud ($ _ příspěvek ["Jméno"] || $ _Post ["věk"]) (pokud (Preg_match ("[^ A-ZA-Z-Z" -] ", $ _ Post [" Jméno "])) (umírají) ("Neplatný název a jméno by měly být alfa");) echo "welcome". $ _Post ["Jméno"]; echo "Jste. $ _Post [" věk "]." EXIT ();)

Název: Stáří:

Proměnná $ _request.

PHP proměnná $ _REQUEST. Obsahuje obsah AS. $ _Get., $ _POST., takže I. $ _Cookie.. Diskutujeme o proměnné $ _Cookie.Když říkáme o cookies.

Proměnná PHP $ _Request lze použít k získání výsledku z dat formulářů odeslaných pomocí metod GET a POST.

Společný mezi nimi, skutečnost, že pracují stejně. Rozdíl mezi nimi je technicky ne. Ale existují ideologické rozdíly.

Řeknu o nich v kontextu PHP. Upozorňujeme, že protokol HTTP k PHP má nepřímý přístup, protože byl vytvořen pro výměnu hTML stránky A PHP jednoduše rozšiřuje možnosti a druhý.

Získejte dotaz se používá k získání dat za příspěvek k odeslání. (Připomínám vám, že technicky funguje stejně).

Proto v kontextu PHP se spoléhla na tuto ideologii následovně:
1. Každý čas je spuštěn PHP, SuperGlobal Arrays ($ _get, $ _POST) jsou standardně vytvořeny.
2. Pokud dojde k otazník v řetězci dotazu (?). Pak je vše považováno za to parametry Získejte požadavky, které jsou uvedeny v "Key" Format \u003d "hodnota" a jako separátor se používá znaménko ampersandu (&)
Příklad:
Získejte /index.php?Name\u003dandrey&surname\u003dhalkin.
Jedná se o řetězec dotazu, zde 2 parametry. Tyto parametry budou spadat do pole $ _GET.
3. $ _POST je naplněn jiným způsobem. Obsah tohoto pole je vyplněn z "záhlaví požadavku". To znamená, že od místa skrytého před očima explicitně. Celá rutina vytvářet takové titulky vezměte v prohlížeči. I když se někdy něco upraví v titulcích.

Nejčastěji se požadavek na příspěvek používá ve formulářích (posílat data).

Například máme formulář pro přihlášení k přihlášení 2 polí.

Představte si, že používáme metodu GET. Poté, když odesíláte formulář, obracíme se na následující adresu /Login.php?login\u003dAndrey&password\u003d123 souhlasíte s tím, že tyto informace není bezpečné. Každý, kdo může otevřít prohlížeč a začne se zadat adresu webu. Vidí vaše hesla a přihlášení.

Pokud jsme však stanovili metodou post, pak bychom získali následující žádost:
Post /login.php (Login \u003d Andrey & Password \u003d 123) Co by bylo v závorkách skryté a ne uložené v prohlížeči.

Obecně, shrnout:
Získat je získat určitou stránku ve specifickém formuláři (třídění, aktuální stránka v blogu, vyhledávací řetězec atd.).
Příspěvek - pro data trnu, která nemá vliv na zobrazení stránky, tak, aby tato data ovlivňovala výsledek spuštění skriptu (přihlašovací údaje, hesla, čísla kreditních karet, zpráv atd.).

A další dobrá zpráva lze kombinovat například
Post /index.php?page\u003dlogin (Login \u003d Andrey & Password \u003d 123) Myslím, že jsem již vysvětlil dost, že se to dopustí a jaké parametry, kterému do kterého pole padne.

Moderní webové zdroje neposkytují návštěvníkům pouze informace, ale také s ním interagují. Chcete-li komunikovat s uživatelem, musíte od něj obdržet některé informace. Existuje několik metod pro získání dat, velmi běžných metod. Dostat. a POŠTA.. A resp. B. Php. Pro tyto metody přenosu dat je podpora Dostat. a POŠTA.. Podívejme se, jak tyto metody fungují.
Získat metoduData dOSTAT. Přenos přidáním do adresy URL volaného scénáře určeného pro zpracování přijatých informací. Pro vysvětlení tato metoda Vytočte adresu URL prostředku do panelu Adresa v panelu Adresa a nejprve přidejte otazník (?), A potom číslo num \u003d 10. například

http: //domure.ru/script.php? num \u003d 10


Pokud máte místní server, pak obvykle doména bude localhost a pak bude předchozí záznam vypadat

http: //localhost/script.php? num \u003d 10


V tomto případě vysíláme parametr num na 10. Chcete-li přidat následující parametry, musí být skript použitelný například ampersant (&), například

http: //domure.ru/script.php? num \u003d 10 & typ \u003d nová & v \u003d text


V tomto případě jsme přenesli tři parametry do skriptu: num s hodnotou 10, zadejte hodnotu "Nový" a V s hodnotou "Text".
Chcete-li tyto parametry v skriptu, musíte použít vestavěné pole. $ _Get. $ _Get ["num"], $ _get ["typ"], $ _ dostat ["v"]. Tyto prvky pole budou obsahovat hodnoty přenášených parametrů. Chcete-li tento příklad ukázat, vytvořte soubor Script.php následujícím způsobem.



Kontrola metody GET v PHP


echo ($ _get ["num"]. "
");
echo ($ _get [typ "]."
");
echo ($ _get ["v"]);
?>


A nyní zavolejte tento soubor v prohlížeči

http: //at/script.php? num \u003d 10 & typ \u003d nová & v \u003d text


a zobrazí se vysílané parametry v okně prohlížeče. Ale pokud zavoláte tento soubor bez další parametry http: /////script.php, uvidíte chyby, které budou poskytovat tlumočníka Php.Že neexistují žádné takové prvky pole $ _get. Kontrola těchto dat z uživatele lze zvýraznit ne jeden článek, takže v tomto článku se tohoto okamžiku nedotýkám.
Jak již chápete, přinutit uživatele k vytáčení dat v adresním řádku není příliš dobré a zcela nepohodlné. Proto přijímat data od uživatele, které potřebujete použít formulář HTML. Napište jednoduchý html -form.


Zadejte číslo

Máš počítač?

Tvůj komentář:





Komentuji k vytvořenému formuláři. Formuláře jsou vytvořeny značkou formuláře. Pole Formy jsou vytvořeny vstupem, výběrem, TextArea tagy (můžete si přečíst více). V značce formuláře je adresa URL skriptu zadán v atributu akce, který tyto formuláře obdrží. V našem případě jsme již zadali již existující soubor Script.php. Atribut metody nastaví metodu odesílání dat. Ukázali jsme metodu Dostat.. Nyní víme, jaký soubor bude tento soubor přenášen, a jakým způsobem zůstane zjistit, kde je hledat?!
Tato data formuláře budou přenesena do prohlížeče webového prostředku přidáním do adresy URL: bude nejprve otazník (?), Poté jsou parametry odděleny ampersantem (&). Název parametru bude převzat z atributu Název, který musí být napsán z libovolného pole pole. Hodnota parametru bude záviset na typu pole. Pokud je pole textové, text zadaný uživatelem bude uživatel. Pokud bude pole seznam, skupina přepínačů nebo příznaků, pak hodnota hodnoty hodnoty vybrané položky bude hodnota parametru. Vysvětlím příklad naší formy. Pokud uživatel zadá číslo 10 ve vstupním poli, bude název parametru num (hodnota atributu názvu vstupního tagu) a hodnota bude hodnota (uživatelsky zadané číslo). Proto prohlížeč bude tvořit pár "num \u003d 10". Pokud uživatel ze seznamu vybere možnost "Ano", pak bude název parametru typ (atribut hodnoty volby názvové značky), a hodnota bude hodnota (hodnota hodnoty volby hodnota ). Prohlížeč se tedy vytvoří pár "typu \u003d ano".
Tento formulář bude nyní umístěn na stránce Forma.php.



Formulář přenosu dat pomocí GET a PHP



Zadejte číslo

Máš počítač?

Tvůj komentář:







Zadejte všechny hodnoty v polích formuláře a klepněte na tlačítko "Odeslat". Po stisknutí tlačítka prohlížeče otevřete jinou stránku (Script.php) a zobrazí se data, která zadaná okno prohlížeče budou zobrazeny. Myslím, že je jasné, proč: Prohlížeč přenášet data do skriptu Script.php a ve skriptu budou tyto údaje zpracovávány a zobrazeny.
Post MetodaPodívejme se nyní, jak metoda funguje POŠTA..
Poslat tyto metody POŠTA. Musíte použít HTML-Formulář. Jak si pamatujeme, že způsob formuláře je zodpovědný za způsob odeslání formuláře formuláře dat. Proto musíte zadat hodnotu příspěvku v atributu metody. V opačném případě může být formulář stejný jako pro metodu GET. Změníme náš tvar, který jsme již používali k přenosu dat do metody GET pro přenos metodou POST.


Zadejte číslo

Máš počítač?

Tvůj komentář:





Jak vidíte, formulář zůstává stejný s výjimkou atributů metody a akce. Nyní budou data předána skriptu Script_Post.php. Umístěte náš formulář na stránce Forma_Post.php.



Formulář pro přenos dat PHP



Zadejte číslo

Máš počítač?

Tvůj komentář:







Nyní musíte napsat skript, který bude zpracovávat naše formuláře dat.
Chcete-li získat přenášenou metodu v datovém skriptu POŠTA. Potřebujete používat vestavěné pole $ _POST.. Klíče tohoto pole budou názvy parametrů. V našem případě musíte použít $ _Post ["num"], $ _Post ["typ"], $ _ příspěvek ["v"]. Tyto prvky pole budou obsahovat hodnoty přenášených dat. Jak vidíte rozdíl od použití metody Získat, je vyjádřen pouze při použití pole $ _POST. Proto nebudeme obtížné napsat soubor Script_post.php:



Ověření metody post v PHP


echo ($ _Post ["num"]. "
");
echo ($ _Post [typ "]."
");
echo ($ _Post ["v"]);
?>


Nyní otevřete soubor forma_post.php v prohlížeči. Zadejte některá data do pole formuláře a stiskněte tlačítko "Odeslat". Nyní, pravděpodobně jste si všimli rozdíl mezi metodou příspěvku z Get - tyto formuláře se neobjevily v adresním řádku prohlížeče. Metoda dat POŠTA. Nelze projít adresním panelem prohlížeče. Tento základní rozdíl musí být zapamatován.
V Php. V nezávislosti byla data metody odeslána - metodou příspěvku nebo metodou ZÍSKAT - získání dat pomocí pole $ _Request. Porovnání metod získávání a postPři použití metody GET jsou data přenášena přidáním do adresy URL. Budou tedy viditelné pro uživatele, že z hlediska bezpečnosti není vždy dobré. Maximální množství přenášených dat bude také záviset na prohlížeči - z maximálního přípustného počtu znaků adresního panelu prohlížeče.
Při použití metody POST, data nebudou pro uživatele viditelná (není zobrazena v adresním řádku prohlížeče). A tedy jsou chráněny více chráněny, a proto program zpracování těchto dat je více chráněno z hlediska bezpečnosti. Také množství přenášených dat není prakticky omezeno.
Při výběru způsobu přenosu dat je třeba zvážit vlastnosti uvedené a zastavit za nejpřijatelnější metodou.

Forma html. Arrays $ _Post a $ _get

Forma html. Metody odesílání dat na server

S HTML-Formuls jste pravděpodobně již splnili:

Zadejte své jméno:

Uložení tohoto kódu v souboru HTML a prohlížení s vaším oblíbeným prohlížečem zobrazí se obvyklý formulář HTML:

Štítek

S dvojicí finální značky
Vlastně se ptá formulář. Jeho atributy jsou volitelné:

  • akce - označuje adresu URL (plné nebo relativní), ke kterému bude formulář odeslán. Pokud tento atribut nezadáte, většina prohlížečů (přesněji řečeno, všechny prohlížeče známé mi) pošlete formulář do aktuálního dokumentu, to je "na sebe". Toto je vhodné snížení, ale podle Standard HTML je vyžadován atribut akce.
  • metoda je způsob odeslání formuláře. Existují dva z nich.
    • Získejte - odesílání dat formulářů do adresního řádku.
      Mohl byste si všimnout přítomnosti na konci URL symbolu "?" A následující data ve formátu parametru \u003d hodnota. Zde "Parametr" odpovídá hodnotě atributu názvu prvků formuláře (viz níže o TEG ) a "hodnota" - obsah atributu hodnoty (v něm, například obsahuje vstup uživatele do textového pole stejné značky ).
      Zkuste například hledat něco v Yandexu a věnovat pozornost adresním řádku prohlížeče. Toto je metoda GET.
    • Post - forma Tyto jsou zasílány v těle dotazu. Pokud to není zcela jasné (nebo je zcela nejasné), co to je - Neboj se, brzy se vrátíme k tomuto problému.
    Pokud není specifikován atribut metody - je určen.

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

  • Hodnota "Text" Nastaví jedno řádkové vstupní pole
  • Hodnota "Odeslat" Nastaví tlačítko, když je formulář stisknuto na server

Další hodnoty jsou možné (a - Není to jediná značka, která určuje prvek formuláře).

Co se stane, když stiskneme tlačítko "OK"?

  1. Prohlížeč procházení prvků obsažených ve tvaru a generuje z názvu a atributů hodnoty těchto formulářů. Předpokládejme, že jméno Vasya byl zaveden. V tomto případě tyto formuláře - NAME \u003d VASYA & OKBUTTON \u003d OK
  2. Prohlížeč vytvoří připojení k serveru, odešle požadavek na server zadaný v atributu ACCE TAG
    Použití metody odesílání zadané v atributu metody (v tomto případě - get), přenos dat do dotazu.
  3. Server analyzuje přijatý dotaz, vytvoří odpověď, odešle jej do prohlížeče a zavírá připojení
  4. Prohlížeč zobrazuje dokument přijatý ze serveru.

Posílání stejného dotazu ručně (s telnetovou pomocí) vypadá takto (předpokládat, že doménové jméno Stránky - www.example.com):

Telnet www.example.com 80 Get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1,0 r \\ n Hostitel: www.example.com r \\ r

Jako vy, s největší pravděpodobností již hádali, stisknutím tlačítka Odeslat ve formuláři s metodou odesílání "GET" je podobný vstupu odpovídající adresy URL (s otazníkem a data formulář na konci) v adrese prohlížeče) bar:

Http://www.example.com/cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok.

Ve skutečnosti je metoda GET vždy používána při požadavku na dokument ze serveru, jednoduše zadáním adresy URL nebo kliknutím na odkaz. Použitím URL jednoduše přidá otazník a data formulář.

Snad všechny tyto technické detaily a cvičení s telnet-Ohm se zdají být neuvěřitelně nudné a dokonce zbytečné ("a co mají php?"). A marně. :) Jedná se o základy práce na protokolu HTTP, které potřebujete vědět každému webovému programátoru, a to není teoretické znalosti - to vše je užitečné v praxi.

Nyní nahradit první řetězec naší podoby následujícím:

Ukázali jsme na posílat metodu "post". V tomto případě jsou data odeslána na server několikrát:

Telnet www.example.com 80 Příspěvek /cgi-bin/form_handler.cgi http / 1,0 r \\ n Hostnit: www.example.com r \\ t N Obsah-délka: 41263 r \\ r n Název \u003d Vasya & Okbutton \u003d OK

Při použití metody POST jsou tyto formuláře odeslány po "dvou vstupech" - v těle dotazu. Vše, co výše je vlastně záhlaví dotazu (a když jsme použili metodu Získání, tyto formuláře byly odeslány v názvu). Aby server věděl, jak dokončit čtení orgánů požadavku, je název přítomen v řádku obsahu; Stejně tak, že data formuláře budou přenášeny parametrem1 \u003d hodnota1 & parametr2 \u003d hodnota2 ... a hodnoty jsou přenášeny jako URLENCODE - to je stejně jako u metody GET, ale v těle dotazu, server Zprávy o obsahu obsahu -Type: aplikace / x-www-formulář-urllencoded.

Výhodou metody post je nedostatek limitu délky řetězce s údaji formuláře.

Při použití metody post, je nemožné poslat formulář, jen "jít na odkaz", jak to bylo s dostat.

Při použití post-formulář v atributu akce můžete určit po otazník a parametry získat. Způsob příspěvku tedy zahrnuje jak získat metodu.

Arrays $ _get a $ _post

Formuláře jsou tedy hlavní způsob výměny dat mezi webovým serverem a prohlížečem, to znamená, že poskytují interakci s uživatelem - ve skutečnosti, pro které potřebujete webové programování.

Zvažte jednoduchý příklad:



pokud ($ _Server ["request_method"] \u003d\u003d "post") (
Echo "

Ahoj, "$ _Post [" Jméno "]."

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




Formulář v řádcích 8-12 obsahuje dvě položky: jméno a Okbutton. Atribut metody Určuje metodu poštovního formuláře, atribut akce označující adresu URL, ke kterému je formulář odeslán, je vyplněn hodnotou proměnné PHP_Self Server - adresa skriptu v tuto chvíli.

- zkrácená forma záznamu .

Předpokládejme, že v poli název jsme zadali hodnotu Vasya a stisknete tlačítko OK. Současně prohlížeč odešle do poštovního serveru. Tělo dotazu: Jméno \u003d Vasya & Okbutton \u003d OK. PHP automaticky vyplní pole $ _POST:

$ _POST ["Jméno"] \u003d "Vasya"
$ _POST [OKBUTTON] \u003d "OK"

Ve skutečnosti hodnota "Vasya" je odeslána do prohlížeče v Urlencode-formě; Pro kódování Windows-1251 tato hodnota vypadá jako% C2% E0% F1% FF. Vzhledem k tomu, že PHP automaticky provádí potřebné dekódování, můžeme "zapomenout" o této funkci - dokud nebudete muset pracovat s dotazy HTTP ručně.

Vzhledem k tomu, že v těle dotazu jsou uvedeny pouze názvy a hodnoty, ale ne typy prvků formuláře, PHP nemá ponětí, odpovídá $ _Post ["Name"] vstupní řádek, tlačítko nebo seznam. Ale tyto informace obecně nejsou nezbytně nutné. :)

Vzhledem k tomu, že víte, co je napsáno na tlačítko Odeslat, jsme volitelné, v řádku 11 můžete odstranit atribut název, zkrátění popisu tlačítka . V tomto případě prohlížeč odešle název \u003d Vasya-Vasya.

A teď - totéž, ale pro get-ve tvaru:



pokud (ISSET ($ _ dostanete ["Jméno"]) (
Echo "

Ahoj, "$ _Get [" Jméno "]."

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





V řadě 8 by bylo možné psát se stejným úspěchem

: Získejte - výchozí metoda. Tentokrát prohlížeč odešle požadavek GET, což je ekvivalentní zadání adresy adresy: http: //adress-site./mety-script.php? Název \u003d Vasya.

PHP s get-formuláře vstupuje stejným způsobem jako s příspěvkem, s rozdílem, který je plná pole $ _get.

Kardinál rozdíl je v řádku 4. Vzhledem k tomu, že jednoduchý vstup adresy v řetězci prohlížeče je que-queuita, zkontrolujte, zda ($ _Server ["request_metdod"] \u003d\u003d "get") je bezvýznamný. Proto se uchýlíme k designu ISSET (), který se vrátí, pokud je tato proměnná definována (tj. Byla přiřazena hodnota) a FALSE - pokud není proměnná definována. Pokud formulář byl vyplněn - jak jste již pochopili, PHP automaticky přiřadí $ _get ["Name"] odpovídající hodnotu.

Kontrola se používá pomocí ISSET () - Univerzální, může být použit pro post-formulář. Navíc je vhodnější, protože vám umožní zjistit, které pole formuláře jsou vyplněny.

O něco složitějším příkladem.




Echo "Určete jméno!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Echo.
"
;
) Jinak (

" ;

Echo "vy. $ Věk. "let
" ;
}
Echo "


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


Zadejte svůj rok narození:





Žádné nové techniky zde nejsou používány. Dodržujte, proveďte kód, zkuste modifikovat ...

Změňte poslední příklad tak, aby uživatel nemusel znovu vyplnit pole. Chcete-li to provést, vyplňte atributy hodnoty prvků formuláře právě zadané hodnoty.



$ NAME \u003d ISSET ($ _ Post ["Jméno"])? $ _POST ["Jméno"]: "";
$ rok \u003d ISSET ($ _ Post ["rok"])? $ _Post ["rok"]: "";

Pokud (ISSET ($ _ příspěvek ["název"], $ _Post ["rok"]) (
Pokud ($ _Post ["Jméno"] \u003d\u003d "") (
Echo "Určete jméno!
" ;
) Jinak, pokud ($ _Post ["rok"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "Uveďte rok narození! Platný rozsah hodnot: 1900..2004
"
;
) Jinak (
Echo "Ahoj,". $ _POST ["Jméno"]. "!
" ;
$ věk \u003d 2004 - $ _Post ["rok"];
Echo "vy. $ Věk. "let
" ;
}
Echo "


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


Zadejte svůj rok narození:





Několik nepochopitelných řádků 4 a 5. Všechno je velmi jednoduché: Linka 4 by mohla být zaznamenána takto:

iF (ISSET ($ _ POST ["NAME"]))
$ NAME \u003d $ _POST ["Jméno"];
jINÝ.
$ Jméno \u003d "";

Může nastat otázka - proč nehodit řetězce 4-5 a ne psát:

Zadejte své jméno: ">

Zadejte svůj rok narození: ">

Skutečnost je, že pokud tyto příspěvky nejsou definovány - a bude-li formulář ještě nebyl vyplněn, - PHP vydá varování o použití neinicializovaných proměnných (a, dobře založené: Taková zpráva vám umožní rychle Najděte pevně upevněné překlepy v názvech variabilních a také varování z možných "otvorů" na místě). Můžete samozřejmě položit kód s imitátem přímo do formuláře, ale to dopadne příliš těžkopádné.

Přišla na to? A nyní se pokuste najít chybu v níže uvedeném kódu. No, ne úplně chybu, ale vady.

htmlspecialchars ()

Nenašel? Řeknu vám. Zadejte například v poli "Jméno" poli dvojité uvozovky a nějaký text, například VA "SIA. Poslat formulář a podívejte se na zdrojový kód přijaté stránky. Ve čtvrtém řádku bude něco jako :

Zadejte své jméno:

To je - nic dobrého. A pokud uživatel mazaný zadal kód JavaScriptu?

Pro vyřešení tohoto problému je nutné použít funkci htmlspecialchars (), která nahradí servisní znaky na jejich reprezentaci html (například uvozovky - on "):



$ NAME \u003d ISSET ($ _ Post ["Jméno"])? Htmlspecialchars ($ _Post ["Jméno"]): "";
$ rok \u003d ISSET ($ _ Post ["rok"])? Htmlspecialchars ($ _Post ["rok"]): "";

Pokud (ISSET ($ _ příspěvek ["název"], $ _Post ["rok"]) (
Pokud ($ _Post ["Jméno"] \u003d\u003d "") (
Echo "Určete jméno!
" ;
) Jinak, pokud ($ _Post ["rok"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "Uveďte rok narození! Platný rozsah hodnot: 1900..2004
"
;
) Jinak (
Echo "Ahoj,". $ Jméno. "!
" ;
$ věk \u003d 2004 - $ _Post ["rok"];
Echo "vy. $ Věk. "let
" ;
}
Echo "


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


Zadejte svůj rok narození:





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

Nezapomeňte - funkce HTMLSPECIALCHARSHARS () musí být vždy použita, když se zobrazí obsah proměnné, ve které může být zobrazen speciální HTML.

phpinfo ()

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

Proč ji zmiňuji v článku o formách? PHPINFO () - pohodlnější ladicí nástroj. PHPINFO (), mimo jiné zobrazuje hodnoty všech $ _get, $ _POST a proměnné $ _Server. Pokud tedy variabilní formy "ztracené", nejjednodušší způsob, jak detekovat, jaký je případ - použijte funkci phpinfo (). Aby byla funkce zobrazena pouze hodnoty proměnných (a nemusíte se procházet desítkami stránek), mělo by být nazýváno následovně: phpinfo (info_variables); nebo - to je naprosto stejné - phpinfo (32);



">
Zadejte své jméno:


phpinfo (32);
?>

Nebo například tato situace: chcete znát IP adresu návštěvníka. Pamatujete si, že odpovídající proměnná je uložena v řadě $ _Server, ale - to nestačí - zapomněli přesně, jak se nazývá proměnná. Znovu zavolejte phpinfo (32); Hledáme vaši IP adresu v desce a najdeme ji - v řetězci $ _Server ["Remote_Addr"].