Žiada o post a dostať to, čo ešte príde. Naučiť sa pracovať s získaním a poštovými požiadavkami

Existujú dve koncepty, ktoré sú spoločné pre takmer všetky programy - toto je spracovanie vstupných dát a výstupu výstupu. Na tejto stránke sa zameriavame na spracovanie vstupu programu CGI. Po prvé, kde vstupné údaje pochádzajú, a po druhé, pretože vstupné údaje sa prenášajú na server. Ak chcete napísať efektívne programy CGI, musíte mať jasnú predstavu o týchto veciach.

Trochu o http.

Server prijíma tri typy požiadaviek: Získajte, post a hlavu. Žiadosť o program na webovom serveri je nasledovný:

Get /index.html http / 1,0

Prvá časť tento prípad Získajte je metóda dotazu, druhý, index.html, je požadovaná adresa URL, tretí, HTTP / 1.0, protokol používaný klientom.

Dva hlavné metódy dotazov sa získajú a pošta. Toto sú najviac spôsobov, ktoré vám sú k dispozícii pri vytváraní formulára. Metóda hlavy je zriedka používa prehliadač, pretože požaduje iba titulok reakcie a orgán odpovede nie je v tomto prípade prenášať. Ak chcete napríklad overiť, či stránka sa nezmenila, prehliadač môže požiadať o názov, ale nevytvára plnohodnotnú výmenu údajov.

Získať metódu

V predvolenom nastavení sa pri vyžiadaní používa metóda Získavania. Spôsob post sa používa len vtedy, keď je jasne uvedená v žiadosti o formulár. Pre programátor CGI je veľmi dôležité pochopiť, že pri vyžiadaní metódy získania, tieto formuláre sa prenášajú na server spolu s adresou URL. CGI Support Web Servery Skopírujte tieto údaje do premennej prostredia s názvom Query_string. Po tom, že záujem o získanie údajov z premennej životného prostredia a ich spracovanie je priradený k programu CGI.

URL z reťazca dotazu vyzerá takto:

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

Značka? oddeľuje reťazec dotazu zo samotného zdroja URL; Nick a PSW - premenné prenášané na server, maks a parol - ich hodnoty.

Post

Prístupová metóda sa používa, keď je výslovne uvedená v atribúte formy metódy. Na rozdiel od spôsobu Získania, príspevkové údaje nie sú v adresári URL, ale v tela dotazu. Príspevok je do značnej miery podobný HTTP reakcii. Prvý riadok je štandardom dotaz HTTP.v ktorom je špecifikovaná metóda post. Môže mať potrebné dodatočné titulky oddelené od orgánu žiadosti o prázdny reťazec.

Teleso dotazu pri použití post metódy sa prenáša do programu ako štandardný vstupný prúd.

Voľba medzi dostať a poštou

Je jasné, že pri vývoji formulárov pred programátorom CGI bude otázka nasledovná: ktorá z týchto metód platí. Vo väčšine prípadov sa použijú obe metódy a obe budú fungovať dobre. Existujú však situácie, keď používanie jednej alebo inej metódy poskytuje určité výhody.

Zvážte niekoľko situácií, keď dáva zmysel uprednostniť metódu get alebo post.

  • Ak chcete, aby bol váš program nazývaný odkazom, preferencia by mala dostať metódu Získať.
  • Ak nechcete, aby sa argumenty prenášané svojím programom, ktorý sa má zaznamenať v súbore prehľadu servera, použite metódu post. Napríklad, ak formulár vyžaduje špecifikáciu používateľského mena a hesla, nepravdepodobné, že chcete, aby sa názvy a heslá uložili do súboru správy. Okrem toho nie je rozumné prejsť heslo ako súčasť adresy URL.
  • Ak má vaša forma významné veľkosti, nie je to textové pole s poznámkami a komentármi, mala by sa použiť metóda post. Všeobecne povedané, je možné a v tomto prípade použite metódu Získať, ale potom sa môžete stretnúť s obmedzeniami veľkosti URL, ktorá sa líši od rôznych operačné systémy a prehliadače (obmedzenie kvôli veľkosti premenných prostredia). Je jednoduchšie používať metódu post.
  • Ak váš formulár obsahuje pole súborov, použite metódu post. Okrem toho, v tomto prípade, musíte nastaviť hodnotu atribútu encype v multipart / forma-dáta.

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

Pred odoslaním prehliadača ho kóduje pomocou schémy nazvaného kódovaním URL. V tejto schéme párov sa názov / hodnota kombinuje s rovnakými príznakmi a rôzne páry sú rozdelené AMPERSKOM.

Názov1 \u003d hodnota1 a name2 \u003d hodnota2 a name3 \u003d hodnota3

Spaces sú odstránené a nahradené symbolom + a akékoľvek iné ne-alfa numerické znaky sú nahradené hexadecimálnymi hodnotami. Po zakódovaní informácií sa prejde na server.

Získať metódu

Získajte metódu odosiela kódované informácie o používateľovi pridané na požiadavku stránky. Stránky a kódované informácie sú od seba oddelené? podpísať otázku.

http://www.test.com/index.htm?name1\u003dValue1&name2\u003dValue2.

  • Získa sa metóda vytvorí dlhý reťazec, ktorý sa zobrazí vo vašom denníku servera v poli "LOKUMENT" prehliadača.
  • Metóda Získania je obmedzená na odosielanie len na 1024 znakov.
  • Nikdy nepoužívajte metódu Get Ak máte na odosielanie hesla alebo iných dôverných informácií hesla alebo iné dôverné informácie.
  • Získajte nie je možné použiť na prenos binárnych údajov, ako sú obrázky alebo textové dokumenty na server.
  • Prístup k údajom zaslaným spôsobom Získať možno získať pomocou premennej prostredia Query_string.
  • PHP poskytuje Associative $ _GET Array na prístup ku všetkým odoslaným informáciám pomocou metódy Získať.

iF ($ _ GET ["NAME"] || $ _GET ["Vitajte". $ _GET ["NÁZOV"]; ECHO "Ty si." $ _GET ["AGE"]. ;)

Názov: Vek:

Post

Metóda Post. Odosiela informácie prostredníctvom titulkov HTTP. Informácie sú kódované, ako je opísané v prípade metódy Dostať.a umiestnené v názve Query_string..

  • Post Metóda nemá žiadne obmedzenia veľkosti údajov, ktoré chcete odoslať.
  • Post Metóda môže byť použitá na odosielanie ASCII, ako aj binárnych údajov.
  • Údaje odoslané postskou metódou prechádzajú cez hlavičku HTTP, takže bezpečnosť závisí od protokolu HTTP. Pomocou Secure HTTP môžete uistiť, že vaše informácie sú chránené.
  • PHP poskytuje Associative $ _Post Array na prístup ku všetkým odoslaným informáciám pomocou metódy post.

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

ak ($ _ príspevok ["Názov"] || $ _POST ["AGE"]) (ak (preg_match ("[^ A-ZA-Z" -] ", $ _ príspevok [" Názov "])) (Die ("Neplatný názov a názov by mal byť alfa");) echo "welcome". $ _POST ["NÁZOV"]; ECHO "Ty si. $ _POST [" AGE "]." EXIT (););)

Názov: Vek:

Premenná $ _REQUEST

Premenná php $ _Request Obsahuje obsah ako $ _GET., $ _POST., takže ja. $ _COOKIE.. Diskutujeme o premennej $ _COOKIE.Keď hovoríme o cookies.

Premenná PHP $ _REQUEST je možné použiť na získanie výsledku z údajov formulára odoslaných pomocou Metódy GET a POST.

Spoločný medzi nimi, skutočnosť, že pracujú rovnako. Rozdiel medzi nimi je technicky č. Ale existujú ideologické rozdiely.

Poviem im v kontexte PHP. Upozorňujeme, že protokol HTTP na PHP má nepriamy postoj, pretože bol vytvorený na výmenu hTML Stránky A PHP jednoducho rozširuje možnosti a druhé.

Získajte dotaz sa používa na získanie údajov poštou na odoslanie. (Pripomínam vám, že technicky fungujú rovnako).

Preto sa v kontexte PHP spoliehali na túto ideológiu takto: \\ t
1. Zakaždým, keď sa spustí PHP, sú štandardne vytvorené superglobálne polia ($ _GET, $ _POST).
2. Ak existuje otáznik v reťazci dotazu (?). Potom sa všetko zvažuje parametre Získajte požiadavky, ktoré sú prezentované vo formáte "Key" \u003d "Hodnota" a AMPERSAnd Sign (&) sa používa ako oddeľovač
Príklad:
Get /index.php?name\u003dandrey&surname\u003dhalkin
Toto je reťazec dotazu, tu 2 Parametre. Tieto parametre spadnú do polovice $ _GET.
3. $ _POST je naplnený iným spôsobom. Obsah tohto poľa sa vyplní z "hlavičiek požiadavky". To znamená, že z miesta skryté z očí explicitne. Celá rutina na vytvorenie takýchto titulkov prevezme prehliadač. Aj keď sa niekedy niečo upraví v titulkoch do manuálu.

Najčastejšie sa požiadavka príspevku používa vo formách (na odosielanie údajov).

Máme napríklad formulár, ktorý sa chcete prihlásiť do 2 prihlásenia a hesla.

Predstavte si, že používame metódu Get. Potom, keď posielame formulár, obrátime sa na nasledujúcu adresu /login.php?login\u003dandrey&password\u003d123 Súhlasím s tým, že to nie je bezpečné prenos takýchto informácií. Každý môže otvoriť váš prehliadač a začať zadať adresu stránok. Môže vidieť vaše heslá a prihlásenie.

Ale ak sme zadali metódu post, potom by sme dostali nasledujúcu požiadavku:
Post /Login.php (Login \u003d Andrey & Password \u003d 123) Čo je v zátvorkách skryté a nie sú uložené v prehliadači.

Všeobecne platí, že sumarizuje:
Získajte je získať určitú stránku v konkrétnej forme (triedenie, aktuálna stránka v blogu, vyhľadávací reťazec atď.).
Post - pre tŕňové údaje, ktoré neovplyvňujú zobrazenie stránky, spôsobom, ktorý tieto údaje ovplyvňujú len výsledok vykonania skriptu (prihlásenia, heslá, čísla kreditných kariet, správ atď.).

A ešte jedna dobrá správa môže byť kombinovaná
Post /index.php?page\u003dLOGIN (LOGIN \u003d ANDREY & PASSWORD \u003d 123) Myslím, že som už viac vysvetlil, že sa ukázalo, a aké parametre, ku ktorému poľa spadne.

Moderné webové zdroje neposkytujú len informácie pre návštevníka, ale aj s ním spolupracovať. Ak chcete komunikovať s užívateľom, musíte z neho získať nejaké informácie. Existuje niekoľko metód na získanie údajov, veľmi bežných metód. Dostať. a Post.. A resp. B. Php. Pre tieto metódy prenosu údajov je podpora Dostať. a Post.. Pozrime sa, ako tieto metódy fungujú.
Získať metóduDáta dostať. Pridaním ich pridaním na adresu URL nazývaného scenára určeného na spracovanie prijatých informácií. Pre vysvetlenie táto metóda Vytočte adresu URL prostriedku v paneli s adresou v paneli s adresou a najprv pridajte otázku (?), A potom číslo num \u003d 10. napríklad

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


Ak máte lokálny server, potom zvyčajne doména bude localhost, a potom sa predchádzajú predchádzajúci záznam

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


V tomto prípade vysielame Num parameter na 10. Ak chcete pridať nasledujúce parametre, musí sa použiť napríklad skript - ampergál (&), napríklad

http: //domure.ru/script.php? num \u003d 10 & typ \u003d NEW & V \u003d text


V tomto prípade sme preniesli tri parametre do skriptu: Num s hodnotou 10, zadajte "NOVÝ" a V HODNOTKU S HODNOTOM "TEXT".
Ak chcete získať tieto parametre v skripte, musíte použiť vstavané pole. $ _GET. $ _GET ["NUM"], $ _GET ["TYPY"], $ _ Získajte ["V"]. Tieto prvky poľa budú obsahovať hodnoty prenášaných parametrov. Pre demonštrovanie tohto príkladu vytvorte súbor script.php nasledovne.



Kontrola metódy Získania v PHP


eCHO ($ _GET ["NUM"]. "
");
eCHO ($ _GET ["TYP"]. "
");
eCHO ($ _GET ["V"]);
?>


A teraz zavolajte tento súbor v prehliadači

http: //at/script.php? num \u003d 10 & typ \u003d NEW & V \u003d text


a zobrazí sa vysielané parametre v okne prehliadača. Ale ak zavoláte tento súbor bez Ďalšie parametre http: ////script.php, uvidíte chyby, ktoré poskytnú tlmočník Php.Že nie sú takéto prvky poľa $ _GET. Kontrola týchto údajov od užívateľa je možné zdôrazniť nie jeden článok, takže v tomto článku sa tento okamih nedotýkam.
Ako pravdepodobne chápete, aby ste donútili používateľa na vytáčanie údajov v paneli s adresou nie je veľmi dobrá a úplne nepohodlná. Preto, aby ste dostali údaje z používateľa, musíte použiť html-formulár. Napíšte jednoduchý html -form.


Zadajte číslo

Máš počítač?

Tvoj komentár:





Vyzerám o vytvorenú formulár. Formuláre sú vytvorené značkou formulára. Polia formulárov sú vytvorené vstupom, vyberte, TAGE, TAGE TAGEAEA (viac môžete čítať). V značke formulára je URL skriptu špecifikovaná v atribúte akcie, ktorý dostane tieto formuláre. V našom prípade sme už zadali už existujúci súbor script.php. Atribút metódy nastaví metódu odosielania dát. Uviedli sme metódu Dostať.. Teraz vieme, aký súbor sa tento súbor bude prenášať, a akú cestu zostáva zistiť, kam hľadať ich?!
Tieto údaje formulára budú prevedené do prehliadača webových zdrojov pridaním do adresy URL: bude najprv otáznikom (?), Potom sú parametre oddelené ampergátom (&). Názov parametra bude prevzatý z atribútu Názov, ktorý musí byť napísaný z ľubovoľného poľa. Hodnota parametra bude závisieť od typu poľa. Ak je pole textové, text zadaný užívateľom bude užívateľ. Ak pole bude zoznam, skupina prepínačov alebo vlajok, potom hodnota hodnoty hodnoty vybranej položky bude hodnota parametra. Vysvetlím sa na príklad nášho formulára. Ak užívateľ vstúpi na číslo 10 na vstupnom poli, názov parametra bude num (hodnota atribútu názvu vstupnej značky) a hodnota bude hodnota (číslo zadané používateľom). V súlade s tým, prehliadač bude tvoriť pár "num \u003d 10". Ak používateľ zo zoznamu vyberie možnosť "ÁNO", potom názov parametra bude zadať (atribút hodnoty názvu Tag Select) a hodnota bude hodnota (hodnota hodnoty možnosti označenia hodnoty ). V súlade s tým, prehliadač vytvorí pár "typu \u003d yes".
Teraz bude tento formulár umiestnený na stránke Forma.PHP.



Formulár pre prenos dát pomocou Get a PHP



Zadajte číslo

Máš počítač?

Tvoj komentár:







Zadajte všetky hodnoty do polí formulára a kliknite na tlačidlo "Odoslať". Po stlačení tlačidla prehliadača otvoríte inú stránku (script.php) a zobrazia sa údaje, ktoré ste zadali, zobrazí sa okno prehliadača. Myslím, že je jasné, prečo: prehliadač prenesie dáta do skriptu Script.PhP a v skripte budú tieto údaje spracované a zobrazené.
PostPozrime sa teraz na to, ako spôsob funguje Post..
Odoslanie týchto metód Post. Musíte použiť html-formulár. Ako si uvedomíme, že metóda formulára je zodpovedná za spôsob odosielania formulára formulára. Preto musíte zadať post hodnoty v atribúte metódy. V opačnom prípade môže byť formulár rovnaký ako pre metódu získanú. Zmeníme našu tvaru, ktorú sme už používali na prenos údajov do metódy Získania pre vysielanie metóda post.


Zadajte číslo

Máš počítač?

Tvoj komentár:





Ako vidíte, formulár zostáva rovnaký s výnimkou atribútov metódy a akcie. Teraz budú údaje prenesené do skriptu Script_Post.php. Umiestnite náš formulár na stránke forma_Post.php.



Formulár prenosu dát a PHP



Zadajte číslo

Máš počítač?

Tvoj komentár:







Teraz musíte napísať skript, ktorý bude spracovať naše údaje formulára.
Získanie prenášaného spôsobu v dátovom skripte Post. Potrebujete používať vstavané pole $ _POST.. Kľúče tohto poľa budú názvy parametrov. V našom prípade musíte použiť $ _POST ["NUM"], $ _POST ["TYP"], $ _ Post ["V"]. Tieto prvky poľa budú obsahovať hodnoty prenášaných údajov. Ako vidíte rozdiel z používania metódy Získa », je vyjadrený len pri používaní Array $ _Post. Preto nebudeme ťažké napísať súbor script_post.php:



Overenie postovej metódy v PHP


eCHO ($ _POST ["NUM"]. "
");
eCHO ($ _POST ["TYP"]. "
");
eCHO ($ _POST ["V"]);
?>


Teraz otvorte súbor forma_post.php v prehliadači. Zadajte niektoré údaje do poľa Form a stlačte tlačidlo "Odoslať". Teraz, pravdepodobne ste si všimli rozdiel medzi postskou metódou z získania - tieto formuláre sa nezobrazili v paneli s adresou prehliadača. Metóda dát Post. Nemôžete prejsť cez adresný panel prehliadača. Tento základný rozdiel je potrebné pripomenúť.
V Php. V nezávislosti, akú metódu boli odoslané - podľa metódy post alebo metóda získania - na získanie údajov pomocou USE _REQUEST. Porovnanie metód get a postPri použití metódy Získať sa údaje prenášajú pridaním do adresy URL. Budú teda viditeľné pre používateľa, že pokiaľ ide o bezpečnosť nie je vždy dobrá. Maximálne množstvo prenášaných údajov bude závisieť od prehliadača - od maximálneho prípustného počtu znakov panela s adresou prehliadača.
Pri použití metódy príspevku, údaje nebudú pre používateľa viditeľné (nezobrazené v paneli s adresou prehliadača). A preto sú viac chránené, a preto spracovanie programu tieto údaje sú viac chránené z hľadiska bezpečnosti. Množstvo prenášaných údajov je tiež prakticky obmedzené.
Pri výbere spôsobu prenosu dát, musíte zvážiť uvedené funkcie a zastaviť na najprobinnejší spôsob.

HTML forma. Súbory $ _POST a $ _GET

HTML forma. Metódy odosielania údajov na server

S HTML-formami, ktoré ste pravdepodobne už stretli:

Zadajte svoje meno:

Uloženie tohto kódu do súboru HTML a prezeranie s vaším obľúbeným prehliadačom uvidíte obvyklý formulár HTML:

Tag

Mať záverečnú značku
V skutočnosti sa pýta na formu. Jeho atribúty sú voliteľné:

  • akcia - označuje adresu URL (plná alebo príbuzná), na ktorú bude formulár odoslaný. Ak tento atribút nešpecifikuje, väčšina prehliadačov (presnejšie hovorenie, všetky prehliadače, ktoré sú mi známe) poslať formulár do aktuálneho dokumentu, to znamená, "na seba". Ide o vhodnú redukciu, ale podľa HTML štandardu sa vyžaduje atribút akcie.
  • spôsob je spôsob odosielania formulára. Existujú dva z nich.
    • Získajte - odosielanie údajov formulára do panela s adresou.
      Mohli by ste si všimnúť prítomnosť na konci adresy URL symbolu "?" A nasledujúce údaje v parametri formátu \u003d hodnota. Tu "Parameter" zodpovedá hodnote atribútu názvu prvkov formulára (pozri nižšie o TEG ) a "hodnota" - obsah atribútu hodnoty (v nej napríklad obsahuje vstup používateľa do textového poľa rovnakej značky ).
      Skúste napríklad hľadať niečo v Yandex a venovať pozornosť na adresu prehliadača. Toto je metóda.
    • Post - forma, ktoré sú odoslané v tela dotazu. Ak nie je úplne jasné (alebo je úplne nejasné), čo to je - nebojte sa, čoskoro sa vrátime k tomuto problému.
    Ak nie je špecifikovaný atribút metódy - Získa sa.

Tag - Určuje formulárový prvok definovaný atribútom typu:

  • Hodnota "Text" nastaví jedno-line vstupné pole
  • Hodnota "Odoslať" Nastaví tlačidlo, keď je formulár stlačený na server

Možné sú aj iné hodnoty (a - nie je jedinou značkou, ktorá špecifikuje prvku formulára).

Čo sa stane, keď stlačíme tlačidlo "OK"?

  1. Prehliadač prehliadaním prvkov zahrnutých do tvaru a vytvára z ich názvu a hodnoty atribútov týchto formulárov. Predpokladajme, že názov Vasya bola zavedená. V tomto prípade tieto formuláre - meno \u003d vasya & okbutton \u003d ok
  2. Prehliadač sa zavádza pripojenie k serveru, pošle požiadavku na server zadaný v atribúte akčného štítku
    Pomocou metódy odosielania uvedená v atribúte metódy (v tomto prípade - dostanete), prenášanie údajov v dotaze.
  3. Server analyzuje prijatý dotaz, vytvorí odpoveď, pošle ho do prehliadača a zatvorí pripojenie
  4. Prehliadač zobrazuje dokument prijatý zo servera.

Odoslanie rovnakého dotazu manuálne (s pomocnou pomocou Telnet) vyzerá takto (predpokladať, že doménové meno Site - www.example.com):

Telnet www.example.com 80 get /cgi-bin/form_handler.cgi?Name\u003dVASYA&okbutton\u003dOK http / 1,0 r n hosť: www.example.com r \\ n \\ t

Ako ste, s najväčšou pravdepodobnosťou, už uhádli, stlačte tlačidlo Odoslať vo formulári s metódou odosielania "Získať" je podobný vstupu príslušnej adresy URL (s otázkou a formulára na konci) v adresári prehliadača Bar:

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

V skutočnosti, metóda Get sa vždy používa, keď požiadate o dokument zo servera, jednoducho zadaním jeho adresy URL, alebo kliknutím na odkaz. Použitím URL jednoducho pridá otáznik a formulár údaje.

Snáď všetky tieto technické detaily a cvičenia s telnet-ohm sa zdajú neuveriteľne nudné a dokonca zbytočné ("a čo majú PHP?"). A márne. :) Toto sú základy práce na protokole HTTP, ktoré potrebujete vedieť každému webový programátor, a to nie je teoretické vedomosti - toto všetko je užitočné v praxi.

Teraz nahradíte prvý reťazec nášho formulára:

Ukázali sme, že sme poslali metódu "Post". V tomto prípade sa údaje zasielajú na server niekoľkými iným spôsobom:

Telnet www.example.com 80 post /cgi-bin/form_handler.cgi http / 1,0 R Hostiteľa: www.example.com \\ r \\ t N obsah-dĺžka: 41263 r n meno \u003d vasya & okbutton \u003d ok

Pri použití metódy post sa tieto formuláre odosielajú po "dvoch vstupoch" - v mieste dotazu. Všetko, čo vyššie je vlastne hlavičky dotazu (a keď sme použili metódu Získať, tieto formuláre boli odoslané v názve). Aby bol server vedieť, ako dokončiť čítanie orgánov žiadosti, názov je prítomný v riadku dĺžky obsahu; Približne to isté, že údaje formulára budú prenášané parametrom1 \u003d hodnota1 a parametrom2 \u003d hodnota2 ..., a hodnoty sa prenášajú ako URLENCODE - to znamená, rovnako ako s metódou Získania, ale v kontakte dotazu Správa hlavičky obsahu -Type: Aplikácia / X-www-form-urlencoded.

Výhodou post metódy je nedostatok limitu na dĺžke reťazca s údajmi formulára.

Pri použití metódy post je nemožné poslať formulár, len "ísť na odkaz", ako to bolo s dostať.

Pri použití príspevku, vo svojom atribúte akcie môžete zadať po otázni a parametroch. Spôsob post zahŕňa tak metódu získanú.

Súbory $ _GET A $ _POST

Formuláre sú hlavným spôsobom, ako si vymieňať údaje medzi webovým serverom a prehliadačom, to znamená, že poskytujú interakciu s užívateľom - v skutočnosti, pre ktoré potrebujete webové programovanie.

Zvážte jednoduchý príklad:



ak ($ _server ["požiadavka_method"] \u003d\u003d "Post")
Echo "

Ahoj, "$ _POST [" NAME "]."

!" ;
}
?>
">
Zadajte svoje meno:




Formulár v riadkoch 8-12 obsahuje dve položky: meno a okbutton. Atribút metódy Určuje metódu post form, akcia Atribút, ktorý označuje adresu URL, na ktorú je formulár odoslaný, je vyplnená s hodnotou snímania servera PHP_OP_OP_OPS - adresa skriptu v súčasnosti.

- skrátená forma nahrávania .

Predpokladajme, že v poli Názov sme zadali hodnotu Vasya a tlačidlom OK bolo stlačené. Súčasne, prehliadač pošle na poštový server. Query Body: Názov \u003d Vasya & Okbutton \u003d OK. PHP automaticky vyplní pole $ _POST:

$ _POST ["NAME"] \u003d "VASYA"
$ _POST [okbutton] \u003d "ok"

V skutočnosti je hodnota "Vasya" odoslaná do prehliadača do formulára URLENCODE; Pre kódovanie Windows-1251 táto hodnota vyzerá% C2% E0% F1% FF. Keďže, keď PHP automaticky vykoná potrebné dekódovanie, môžeme "zabudnúť" o tejto funkcii - kým nebudete musieť pracovať s dotazmi HTTP manuálne.

Vzhľadom k tomu, v kontakte dotazu, sú uvedené iba mená a hodnoty, ale nie typy prvkov formulárov, PHP nemá potuchy, zodpovedá $ _POST ["NÁZOV"] vstupného riadku, tlačidla alebo zoznamu. Ale tieto informácie, všeobecne, nie je potrebné absolútne nie je potrebné. :)

Keďže viete, čo je napísané na tlačidle Odoslať, sme voliteľné, v riadku 11 Môžete odstrániť atribút názvu, skratovanie tlačidla popis . V tomto prípade prehliadač pošle meno \u003d Vasya-Vasya.

A teraz - to isté, ale na získanie tvaru:



ak (Isset ($ _ Získajte ["Name"])) (
Echo "

Ahoj, "$ _GET [" NAME "]."

!" ;
}
?>
">
Zadajte svoje meno:





V riadku 8 by bolo možné písať s rovnakým úspechom

: Získajte - predvolená metóda. Tentokrát, prehliadač pošle požiadavku na získanie, ktorá je ekvivalentná zadaniu adresy adresy adresy: http: //adress-site./mety-script.php? Názov \u003d Vasya.

PHP s get-formou vstupuje rovnakým spôsobom ako s post, s tým rozdielom, že $ _get Array je vyplnený.

Kartónový rozdiel je v riadku 4. Keďže jednoduchý vstup adresy v reťazci prehliadača je dostať žiadosť, skontrolujte, či ($ _server ["request_method"] \u003d\u003d "dostať") je bezvýznamné. Preto sa uchýlime k dizajnu ISSET (), ktorá sa vráti TRUE, ak je definovaná táto premenná (t.j. bola priradená hodnota) a false - ak premenná nie je definovaná. Ak bol formulár vyplnený - ako už ste pochopili, PHP automaticky priradí $ _GET ["NÁZOV"] zodpovedajúcu hodnotu.

Kontrola sa používa pomocou ISSET () - UNIVERSAL, môže sa použiť na post-formu. Okrem toho je výhodné, pretože vám umožní zistiť, ktoré polia formulára sú vyplnené.

Trochu zložitejší príklad.




ECHO "Zadajte názov!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Echo.
"
;
) Inak (

" ;

Echo "vy. $ Vek. "roky
" ;
}
Echo "


" ;
}
?>
">
Zadajte svoje meno:


Zadajte svoj rok narodenia:





Nie sú tu použité žiadne nové techniky. Dodržujte, vykonajte kód, skúste zmeniť ...

Zmeňte posledný príklad tak, aby užívateľ nemusí znovu naplniť polia. Na tento účel vyplňte atribúty hodnôt prvkov formulára práve zadané hodnoty.



$ NAME \u003d ISSET ($ _ Post ["Názov"])? $ _POST ["NAME"]: "";
$ year \u003d esset ($ _ príspevok ["rok"])? $ _POST ["ROK"]: "";

Ak (Isset ($ _ Post ["Názov"], $ _Post ["Rok"])) (
Ak ($ _POST ["NAME"] \u003d\u003d ") (
ECHO "Zadajte názov!
" ;
) Inak, ak ($ \u200b\u200b_Post ["rok"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "Určite rok narodenia! Platný rozsah hodnôt: 1900..2004
"
;
) Inak (
ECHO "Ahoj,". $ _POST ["NAME"]. "!
" ;
$ AGE \u003d 2004 - $ _POST ["ROK"];
Echo "vy. $ Vek. "roky
" ;
}
Echo "


" ;
}
?>
">
Zadajte svoje meno:


Zadajte svoj rok narodenia:





Niekoľko nezrozumiteľných línií 4 a 5. Všetko je veľmi jednoduché: riadok 4 by mohol byť zaznamenaný takto:

ak (Isset ($ _ Post ["Name"])))
$ NAME \u003d $ _POST ["NAME"];
inak.
$ Name \u003d "";

Môže vzniknúť otázku - prečo nie vyhodiť reťazce 4-5 a nie písať:

Zadajte svoje meno: ">

Zadajte svoj rok narodenia: ">

Faktom je, že ak tieto príspevky nie sú definované - a bude to, ak formulár ešte nebol vyplnený, - PHP vydá upozornenia o používaní neinitialovaných premenných (a dobre založených: Takáto správa vám umožní rýchlo Nájdite tvrdo-upevnené preklepy v názvoch variabilných, a tiež varuje na možné "diery" na stránke). Môžete, samozrejme, dať kód s etisátom priamo do formulára, ale ukazuje sa príliš ťažkopádny.

Prišiel nato? A teraz sa pokúste nájsť chybu v nižšie uvedenom kóde. No, nie dosť chyba, ale chyby.

htmlspecialchars ()

Nenašiel som? Poviem vám. Zadajte napríklad v "Názov" poľa Double Quotes a nejaký text, napríklad VA "SIA. Pošlite formulár a pozrite sa na zdrojový kód získanej stránky. Vo štvrtom riadku bude niečo podobné :

Zadajte svoje meno:

To je - nič dobré. A ak sa mazaný používateľ zadal kód JavaScript?

Ak chcete vyriešiť tento problém, je potrebné použiť funkciu HTMLPECIALARCH (), ktorá nahradí servisné znaky na ich reprezentácii HTML (napríklad citácie - On "):



$ NAME \u003d ISSET ($ _ Post ["Názov"])? Htmlpecialchars ($ _POST ["NAME"]): "";
$ year \u003d escet ($ _ príspevok ["rok"])? Htmlspecialchars ($ _POST ["ROK"]): "";

Ak (Isset ($ _ Post ["Názov"], $ _Post ["Rok"])) (
Ak ($ _POST ["NAME"] \u003d\u003d ") (
ECHO "Zadajte názov!
" ;
) Inak, ak ($ \u200b\u200b_Post ["rok"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "Určite rok narodenia! Platný rozsah hodnôt: 1900..2004
"
;
) Inak (
ECHO "Ahoj,". $ Meno. "!
" ;
$ AGE \u003d 2004 - $ _POST ["ROK"];
Echo "vy. $ Vek. "roky
" ;
}
Echo "


" ;
}
?>
">
Zadajte svoje meno:


Zadajte svoj rok narodenia:





Opakujte skúsenosti a uistite sa, že kód HTML je teraz správny.

Zapamätajte si - funkcia HTMLPECIALARCH () sa musí vždy použiť, keď sa zobrazí obsah premennej, v ktorom môže byť prítomný HTML špeciálny.

phpinfo ()

Funkcia phpinfo () je jednou z najdôležitejších v PHP. Zobrazuje informácie o nastaveniach PHP, hodnoty všetkých druhov premenných konfiguračných premenných ...

Prečo ju spomeniem v článku o formulároch? phpinfo () - pohodlnejší racujúci nástroj. phpinfo (), okrem iného zobrazuje hodnoty všetkých $ _get, $ _Post a $ _server premenných. Takže, ak sa variabilné formy "stratili", najjednoduchší spôsob, ako zistiť, čo je prípad - použite funkciu phpinfo (). Aby táto funkcia zobrazovala iba hodnoty premenných (a nemuseli ste prechádzať cez desiatky stránok), malo by sa požadovať nasledovne: phpinfo (info_variables); alebo - to je absolútne rovnaké - phpinfo (32);



">
Zadajte svoje meno:


phpinfo (32);
?>

Alebo napríklad táto situácia: Chcete poznať IP adresu návštevníka. Pamätáte si, že zodpovedajúca premenná je uložená v poli $ _server, ale - to nestačí - zabudli presne tak, ako sa premenná nazýva. Opäť zavolajte phpinfo (32); , Hľadáme vašu IP adresu v tanieri a nájdete ju - v reťazci $ _server ["Remote_addr"].