Zahtevi post i dobijte šta drugo dolazi. Učenje sarađivati \u200b\u200bsa dobitak i postavim zahtevima

Postoje dva koncepta koja su zajednička za gotovo sve programe - ovo je obrada ulaznih podataka i izlaza izlaza. Na ovoj stranici fokusiramo se na obradu ulaska u CGI. Prvo, gde ulazne podatke dolaze, a drugo, jer se ulazne podatke prenose na server. Da biste napisali efikasne CGI programe, morate imati jasnu predstavu o tim stvarima.

Malo o http-u

Poslužitelj prima tri vrste zahtjeva: nabavite, post i head. Programski zahtjev za web poslužitelj je sljedeći:

Get /index.html http / 1.0

Prvi dio u ovaj slučaj Dobivanje je metoda upita, drugi, index.html, je traženi URL, treći, http / 1.0, protokol koji koristi klijent.

Dvije glavne metode upita su dobivanje i posta. Ovo su najviše metode koje su vam dostupne prilikom stvaranja obrasca. Metoda glave retko koristi pretraživač, jer traži samo naslov odgovora, a tijelo odgovora ne prenosi u tom slučaju. Na primjer, za provjeru je li se stranica nije promijenila, pretraživač može zatražiti naslov, ali ne stvara punu razmjenu podataka.

Dobiti metodu

Prema zadanim postavkama, dobivanje metode se koristi prilikom traženja. Metoda posta se koristi samo kada je jasno naznačena u zahtjevu obrasca. Za CGI programer vrlo je važno razumjeti da se prilikom zahtjeva dobiti metode, ovi obrasci prenose na server zajedno s URL-om. Web serveri za podršku CGI kopiraju ove podatke u varijablu okoliša nazvana Query_string. Nakon toga, zabrinutost za dobivanje podataka iz varijable okoliša i njihova prerada dodijeljena je programu CGI-ja.

URL iz niza upita izgleda ovako:

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

Znak? razdvaja nizu upita od samog urla resursa; Nick i PSW - varijable koje se prenose na server, maks i parol - njihove vrijednosti, respektivno.

Metoda post

Metoda posta se koristi kada je izričito naznačena u atributu metode obrasca. Za razliku od get metode, pošta mjesta ne postavlja podatke u URL, već u tijelu upita. Post upit je u velikoj mjeri sličan HTTP odgovoru. Prvi redak je standard upit http.u kojem je određena metoda post. Možda će imati potrebne dodatne naslove odvojene od tijela zahtjeva praznim niz.

Tijelo upita kada se koristi metoda post prenosi se na program kao standardni ulazni tok.

Izbor između get i post

Jasno je da prilikom razvoja oblika ispred CGI programera, pitanje će biti sljedeće: Koja od ovih metoda se primjenjuje. U većini slučajeva, obje metode su primjenjive, a oba će dobro funkcionirati. Međutim, postoje situacije u kojima upotreba jedne ili druge metode daje određene prednosti.

Razmislite o nekoliko situacija u kojima ima smisla preferirati dobivanje ili postavljanje metode.

  • Ako želite da se vaš program naziva referencom, preferiranje treba dati metodu dobiti.
  • Ako ne želite da se argumenti prenose vašem programu zabilježeni u datoteci izvještaja poslužitelja, koristite metodu post. Na primjer, ako obrazac zahtijeva određivanje korisničkog imena i lozinke, vjerovatno nećete htjeti da se imena i lozinke spremaju u datoteku izvještaja. Pored toga, nije razumno proslijediti lozinku kao dio URL-a.
  • Ako vaš obrazac ima značajne veličine, to nije tekstualni okvir s beleškama i komentarima, treba koristiti post metodu. Generalno gledano, moguće je i u ovom slučaju koristiti metodu dobiti, ali tada možete naići na ograničenja veličine URL-a, različite za različite operativni sistemi i preglednici (ograničenje zbog veličine varijabli okoliša). Lakše je koristiti metodu nakon.
  • Ako vaš obrazac sadrži polje datoteke, koristite post metodu. Pored toga, u ovom slučaju morate postaviti vrijednost atributa Encype u višestrukim / oblicima.

Klijenti pregledača mogu slati informacije na web poslužitelju.

Prije nego što pretraživač pošalje informacije, kodira ga pomoću sheme pod nazivom URL kodiranje. U ovom se shemu parova, ime / vrijednost kombinira se s jednakim znakovima, a različiti parovi dijele ampersand.

Name1 \u003d vrijednost1 & women2 \u003d vrijednost2 & women3 \u003d vrijednost3

Prostori se uklanjaju i zamijenjeni su simbolom A +, a bilo koji drugi numerički znakovi koji nisu alfa zamjenjuju heksadecimalnim vrijednostima. Nakon što se informacije kodiraju, ide na server.

Dobiti metodu

Dobitnik metode šalje kodirane informacije o korisniku dodane u zahtjev stranice. Stranice i kodirane informacije odvojene su jedna od druge? potpisati pitanje.

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

  • Dobitnik metode stvara dugačak niz koji se prikazuje u polju "Location" prikazuje se u polju pretraživača "Location".
  • Dobitnik metode je ograničeno za slanje na samo 1024 znaka.
  • Nikada ne koristite Get metodu ako imate lozinku ili druge povjerljive podatke za slanje na poslužitelju.
  • Dobivanje se ne može koristiti za prenos binarnih podataka, kao što su slike ili tekstualni dokumenti na poslužitelju.
  • Pristup podacima koje je poslao metodom Get može se dobiti pomoću varijable u Query_String okruženju.
  • PHP nudi asoiterativnu $ _get nizu da pristupi svim poslanim informacijama pomoću metode get dobiti.

ako ($ _ name ["naziv"] || $ _get ["Dobrodošli". $ _get ["naziv"]; echo "ti si." $ _get ["Starost"]. "; izlaz () ;)

Ime: Dob:

Metoda post

Metoda POŠTA. Šalje informacije putem HTTP naslova. Informacije su kodirane kao što je opisano u slučaju metode Dođite.i postavljen u naslov Query_string..

  • Metoda post nema ograničenja veličine podataka koje želite poslati.
  • Metoda post može se koristiti za slanje ASCII-ja kao i binarnih podataka.
  • Podaci poslani post metodom prolaze putem HTTP zaglavlja, pa sigurnost ovisi o HTTP protokolu. Upotreba sigurnog HTTP-a možete osigurati zaštićene vaše podatke.
  • PHP pruža asocijativnom $ _POST poruku da pristupi svim poslanim informacijama pomoću post metode.

Isprobajte sljedeći primjer postavljanjem izvornog koda u test.php skriptu.

ako ($ _ post ["naziv"] || $ _post ["Starost"]) (ako (preg_match ("[^ a-za-z" -] ", $ _ post [" naziv "])) ( ("Nevažeće ime i ime treba biti alfa");) Echo "Dobrodošli". $ _POST ["naziv"]; echo "Vi ste. $ _POST [" godina "].

Ime: Dob:

Promjenjiva $ _Request

PHP varijabla $ _Request Sadrži sadržaj kao $ _Get., $ _Post., pa ja. $ _Kookie.. Mi ćemo razgovarati o varijabli $ _Kookie.Kad kažemo o kolačićima.

PHP $ _REQUEST varijabla može se koristiti za postizanje rezultata iz podataka obrasca poslanih pomoću metoda Get i Post.

Zajedničko između njih, činjenica da rade jednako. Razlika između njih tehnički ne. Ali postoje ideološke razlike.

O njima ću reći u kontekstu PHP-a. Imajte na umu da HTTP protokol za PHP ima indirektni stav jer je kreiran za razmjenu hTML stranice I PHP jednostavno proširuje mogućnosti, a drugu.

Nabavite upit koristi se za dobivanje podataka post za slanje. (Podsjećam vas da tehnički funkcionira ravnopravno).

Stoga je u kontekstu PHP-a oslanjajući na ovu ideologiju izvršena na sljedeći način:
1. Svaki put pokreće PHP, superglobalni nizovi ($ _get, $ _post) kreiraju se prema zadanim postavkama.
2. Ako postoji pitanje pitanje u nizu upita (?). Tada se sve smatra nakon toga parametri Dobijte zahtjeve koje su predstavljeni u "ključu" formatu \u003d "vrijednost" i znak ampersand-a (&) koristi se kao separator
Primjer:
Get /index.php?name\u003dandrey&surname\u003dhalkin
Ovo je niz upita, ovdje 2 parametra. Ovi će parametri pasti u $ _get nizu.
3. $ _POST je ispunjen drugim putem. Sadržaj ovog niza ispunjen je iz "zaglavlja zahtjeva". To je, od mjesta sakriveno od očiju izričito. Cijela rutina za stvaranje takvih naslova preuzima pretraživač. Iako se ponekad nešto uređuje u naslovima u priručniku.

Najčešće se postavi zahtjev koristi u obrascima (za slanje podataka).

Na primjer, imamo obrazac za prijavu u 2 polja Prijava i lozinku.

Zamislite da koristimo metodu get. Zatim, prilikom slanja obrasca okrećemo se sljedećoj adresi /login.php?login\u003dandrey&password\u003d123 Slažem se da ovo nije sigurno za prenošenje takvih podataka. Svatko može otvoriti vaš preglednik i početi ući u adresu web mjesta. Može vidjeti vaše lozinke i prijaviti se.

Ali ako smo naveli post metodi, tada bismo dobili sljedeći zahtjev:
Post /login.php (Prijava \u003d Andrey & Lozinka \u003d 123) Šta je u zagradama bilo sakriveno i nije sačuvano u pretraživaču.

Općenito, sažet:
Get je da biste dobili određenu stranicu u određenom obliku (sortiranje, trenutna stranica u blogu, string za pretraživanje itd.).
Post - za podatke za mandrel koji ne utječu na prikaz stranice, na način na koji ovi podaci utiču samo na rezultat izvršenja skripte (prijave, lozinke, brojevi kreditnih kartica, poruka itd.).

I još jedna dobra vijest može se kombinirati, na primjer
Post /index.php?page\u003dlogin (Prijava \u003d Andrey & Lozinka \u003d 123) Mislim da sam već objasnio dovoljno objasnio da se ispostavi i koji parametri na koji će pad pasti.

Moderni web resursi ne pružaju samo podatke posjetitelju, već i komuniciraju s tim. Da biste komunicirali s korisnikom, morate dobiti neke informacije iz nje. Postoji nekoliko metoda za dobivanje podataka, vrlo uobičajenih metoda. Dođite. i POŠTA.. I respektivno B. PHP. Postoji podrška za ove metode prenosa podataka Dođite. i POŠTA.. Da vidimo kako ove metode rade.
Dobiti metoduPodaci dođite. Prenosi se dodavanjem u URL adresu pod nazivom scenarij namijenjenim za obradu primljenih informacija. Za objašnjenje ova metoda Pozovite URL resursa u adresnoj traci u adresnoj traci i prvo dodajte oznaku pitanja (?), A zatim broj broj \u003d 10. na primjer

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


Ako imate lokalni poslužitelj, tada će obično domena biti lokalna, a zatim će prethodni unos izgledati

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


U ovom slučaju prenosimo num parametar do 10. Da biste dodali sljedeće parametre, skripta se mora koristiti - Ampersan (&), na primjer

http: //domure.ru/script.php? broj \u003d 10 & tip \u003d novi & v \u003d tekst


U ovom smo slučaju prebacili tri parametra na skriptu: broj sa vrijednošću od 10, upišite s "novom" i v vrijednosti pomoću vrijednosti "Tekst".
Da biste dobili ove parametre u skriptu, morate koristiti ugrađeni niz. $ _Get. $ _Get ["num"], $ _get [tip "], $ _ get [" v \u200b\u200b"]. Ovi elementi niza sadrže vrijednosti prenesenih parametara. Da biste demonstrirali ovaj primjer, kreirajte skriptu.php datoteku na sljedeći način.



Provjera metode dobiti u PHP-u


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


A sada nazovite ovu datoteku u pretraživaču

http: //at/script.php? broj \u003d 10 i tip \u003d novi & v \u003d tekst


a vidjet ćete prenesene parametre u prozoru preglednika. Ali ako nazovete ovu datoteku bez dodatni parametri http: ///script.php, vidjet ćete pogreške koje će dati prevodiocu PHP.Da nema takvih elemenata niza $ _get. Provjera ovih podataka iz korisnika mogu se istaknuti ne jedan članak, pa u ovom članku neću dodirnuti ovaj trenutak.
Kao što vjerovatno razumijete, prisiljavati korisnik za pozivanje podataka u adresnoj traci nije baš dobar i potpuno nezgodan. Stoga, za primanje podataka od korisnika morate koristiti HTML-obrazac. Napišite jednostavan HTML-formi.


Unesite broj

Imate li računar?

Vaš komentar:





Komentiram stvoreni obrazac. Obrasci se stvaraju oznakom oblika. Polja obrasca kreiraju se unosom, odaberite, Textreagea oznake (možete pročitati više). U oznaci Form, URL skripte naveden je u atributu akcije, koji će dobiti ove obrasce. U našem slučaju već smo naveli već postojeću skriptu.php datoteku. Atribut metode postavlja metodu slanja podataka. Pokazali smo metodu Dođite.. Sada znamo koja će datoteka biti prenesena, a na koji način ostaje da shvatimo gdje ih potražiti?!
Ovaj podaci obrasca bit će preneseni na web resursni pretraživač dodavanjem u URL: prvo će biti oznaka pitanja (?), A zatim su parametri odvojeni ampersansom (&). Naziv parametra uzimat će se iz atributa imena, koji se mora napisati iz bilo kojeg polja polja. Vrijednost parametra ovisit će o vrsti polja. Ako je polje tekstualno, tekst koji je unio korisnik bit će korisnik. Ako će polje biti popis, grupa prekidača ili zastava, tada će vrijednost vrijednosti vrijednosti odabrane stavke biti vrijednost parametra. Objasnit ću na primjeru našeg oblika. Ako korisnik unese broj 10 u polje za unos, tada će naziv parametra biti broj (vrijednost atributa imena ulaznog oznake), a vrijednost će biti vrijednost (uneseni broj). U skladu s tim, pretraživač će formirati par "num \u003d 10". Ako korisnik sa liste bira opciju "Da", tada će ime parametra biti tip (atribut vrijednosti oznake imena odaberite), a vrijednost će biti vrijednost (vrijednost vrijednosti opcije oznake vrijednosti) ). U skladu s tim, preglednik će formirati par "tip \u003d da".
Sada će ovaj obrazac biti postavljen na stranicu Forma.php.



Obrazac za prenos podataka pomoću Get i PHP



Unesite broj

Imate li računar?

Vaš komentar:







Unesite sve vrijednosti u polja obrasca i kliknite gumb "Pošalji". Nakon pritiska na tipku Pretraživač otvorit će se još jednu stranicu (script.php), a prikazat će se podaci koje ste unijeli u prozor preglednika. Mislim da je jasno zašto: Browser će prenijeti podatke na skriptu skripta.php, a u skriptu će se ovi podaci obrađivati \u200b\u200bi prikazivati.
Metoda postSada pogledajmo kako metoda funkcionira POŠTA..
Da biste poslali ove metode POŠTA. Morate koristiti HTML-obrazac. Kako se sjećamo da je metoda obrasca odgovorna za način slanja obrasca obrasca. Stoga morate odrediti post vrijednost u atributu metode. U suprotnom, obrazac može biti isti kao i za metodu dobiti. Promijenit ćemo svoj oblik koji smo već koristili za prenošenje podataka na dobivanje metode za prijenos po post metodi.


Unesite broj

Imate li računar?

Vaš komentar:





Kao što vidite, obrazac ostaje isti s izuzetkom atributa metode i djelovanja. Sada će se podaci biti doneseni na skriptu_post.php skriptu. Postavite naš obrazac na stranicu Forma_post.php.



Obrazac za prenos podataka i PHP



Unesite broj

Imate li računar?

Vaš komentar:







Sada morate napisati skriptu koja će obraditi naše podatke obrasca.
Da biste dobili prenesenu metodu u skriptu podataka POŠTA. trebate koristiti ugrađeni niz $ _Post.. Ključevi ovog niza bit će imena parametara. U našem slučaju morate koristiti $ _Post ["num"], $ _POST [tip "], $ _ Post [" V "]. Ovi elementi niza sadrže vrijednosti prenesenih podataka. Kao što vidite razliku od korištenja metode get, izražena je samo samo u korištenju matrice $ _POST. Stoga nećemo biti teško napisati skriptu_post.php datoteku:



Provjera metode post u PHP-u


echo ($ _post ["broj"]. "
");
echo ($ _post ["tip"]. "
");
echo ($ _post ["v"]);
?>


Sada otvorite datoteku Forma_post.php u pretraživaču. Unesite neke podatke u polje obrasca i pritisnite tipku "Pošalji". Sada, vjerovatno ste primijetili razliku između metode post iz Get - ti se obrasci nisu pojavili u adresnoj traci pretraživača. Metoda podataka POŠTA. Ne možete proći kroz adresnu traku pretraživača. Ova bitna razlika treba zapamtiti.
U PHP. U neovisnosti, koji su podaci o metodi poslani - po post metodi ili get metoda - za dobivanje podataka pomoću $ _REQUEST ARRAY. Poređenje metoda dobiti i postKada koristite metodu Get, podaci se prenose dodavanjem URL-a. Dakle, oni će biti vidljivi korisniku koji u pogledu sigurnosti nije uvijek dobar. Također, maksimalni iznos prenesenih podataka ovisit će o pretraživaču - od maksimalnog dopuštenog broja znakova adresa za pretraživač.
Kada koristite post metodu, podaci neće biti vidljivi korisniku (nije prikazan u adresnoj traci pretraživača). I zato su zaštićeni, a samim tim, program obrada tih podataka zaštićeni su u pogledu sigurnosti. Takođe, iznos prenesenih podataka praktično nije ograničen.
Prilikom odabira načina prijenosa podataka, morate razmotriti dane funkcije i zaustaviti se na najprihvatljivijoj metodi.

HTML obrazac. Niz $ _post i $ _get

HTML obrazac. Metode za slanje podataka na server

Sa HTML-formima koje ste vjerovatno već ispunili:

Unesite svoje ime:

Spremanje ovog koda u HTML datoteku i gledanje ga sa omiljenim pretraživačem, vidjet ćete uobičajeni HTML obrazac:

Označiti

Imati konačnu oznaku u paru
Zapravo, pita obrazac. Njegovi atributi su i neobavezni:

  • akcija - ukazuje na URL (pun ili rođak) na koji će se obrazac biti poslan. Ako ovaj atribut ne odredi, većina preglednika (preciznije gledano, svi preglednici mi se poznati) Pošaljite obrazac trenutnom dokumentu, odnosno "na sebi". Ovo je prikladno smanjenje, ali prema HTML standardu potrebno je atribut akcije.
  • metoda je način slanja oblika. Postoje ih dvoje.
    • Nabavite - slanje podataka oblika u adresnoj traci.
      Možete li primijetiti prisustvo na kraju URL-a simbola "?" I sledeći podaci u parametru formata \u003d vrijednost. Ovdje "parametar" odgovara vrijednosti atributa imena elemenata oblika (vidi dolje o TEG-u ), a "vrijednost" - sadržaj atributa vrijednosti (na primjer, na primjer, sadrži korisnički ulaz u tekstualni polje iste oznake ).
      Na primjer, pokušajte potražiti nešto u Yandexu i obratite pažnju na adresnu traku pretraživača. Ovo je metoda get.
    • Post - kalup koji se šalju u telo upita. Ako nije u potpunosti jasno (ili je potpuno nejasno), što jeste - ne brinite, uskoro ćemo se vratiti na ovaj problem.
    Ako atribut metode nije naveden - namijenjen je get.

Označiti - Određuje element forme definirani prema atributu tipa:

  • Vrijednost "Text" postavlja jedno redak polje za unos
  • Vrijednost "Pošaljite" postavlja gumb, kada se obrazac pritisne na server

Ostale vrijednosti moguća su (i - ne jedina oznaka koja određuje oblik obrasca).

Pa šta se događa kada pritisnemo tipku "OK"?

  1. Preglednik pregledava elemente uključene u oblik i generira iz njihovog imena i vrijednosti atributima ovih obrazaca. Pretpostavimo da je uvedeno ime Vasya. U ovom slučaju, ovi formi - naziv \u003d Vasya & Okbutton \u003d ok
  2. Preglednik uspostavlja vezu sa serverom, šalje zahtjev poslužitelju naveden u atributu akcije Action Tag
    Korištenje metode slanja navedenog u atributu metode (u ovom slučaju - dohvati), prenose podatke u upitu.
  3. Poslužitelj analizira primljeni upit, formira odgovor, šalje ga pregledniku i zatvara vezu
  4. Preglednik prikazuje dokument primljen sa servera.

Slanje istih upita ručno (uz Telnet-ovu pomoć) izgleda ovako (pretpostavimo da ime domena Stranica - www.example.com):

Telnet www.example.com 80 get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1.0 \\ r \\ n host: www.example.com \\ r \\ n \\ r \\ n

Kao što ste, najvjerovatnije, već pretpostavili, pritiskom na gumb za slanje u obliku s načinom slanja "Get" sličan je ulazu odgovarajućeg URL-a (s upitnim oznakama i oblikovanjem podataka na kraju) na adresi pregledača) Bar:

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

U stvari, dobivanje metode se uvijek koristi kada zatražite dokument sa servera, jednostavno unosom ur u URL ili klikom na vezu. Upotreba URL jednostavno dodajte oznaku pitanja i oblikovanje podataka.

Možda su svi ti tehnički detalji i vježbe sa Telnet-ohm izgledaju nevjerojatno dosadno, pa čak i nepotrebno ("i šta PHP?"). I uzalud. :) Ovo su osnove rada na HTTP protokolu koji morate znati za svaki web programer, a to nije teorijsko znanje - sve je to korisno u praksi.

Sada zamijenite prvi niz našeg obrasca na sljedeće:

Istaknuli smo metodu slanja "Post". U ovom slučaju, podaci se šalju na server na nekoliko drugih načina:

Telnet www.example.com 80 post /cgi-bin/form_handler.cgi http / 1.0 \\ r \\ n host: www.example.com \\ r \\ n Tip sadržaja: aplikacija / x-www-forl-urlencoded \\ r \\ N Sadržaj-Dužina: 41263 \\ R \\ N \\ R \\ n Ime \u003d Vasya & Okbutton \u003d OK

Kada se koristi post metodu, ovi se obrasci šalju nakon "dva ulaganja" - u telo upita. Sve to gore je zapravo zaglavlje upita (a kada smo koristili dobit metodu, ovi obrasci su poslani u naslovu). Da bi se poslužitelj znao kako završiti čitanje tijela zahtjeva, naslov je prisutan u liniji dužine sadržaja; Otprilike isto što će se podaci obrasca prenositi parametrom1 \u003d value1 & parameter2 \u003d vrijednost2 ..., a vrijednosti se prenose kao URLENCODE - tj. Kao i uz dobivanje metode, ali u tijelu upita, poslužitelju Izvještava očaravanje sadržaja - tip: aplikacija / x-www-forl-urlencoded.

Prednost post metode je nedostatak ograničenja u dužini niza sa podacima obrasca.

Kada koristite post metodu, nemoguće je poslati obrazac, samo "odlazak na vezu", kao što je to bilo.

Kada koristite post-obrazac, u svom atributu akcije možete odrediti nakon obračuna pitanja i parametara. Dakle, metoda Post uključuje i metodu get.

Nizovi $ _get i $ _post

Dakle, oblici su glavni način razmjene podataka između web poslužitelja i pregledača, odnosno pružanje interakcije s korisnikom - u stvari za koji vam je potreban web programiranje.

Razmotrite jednostavan primjer:



ako ($ _Server ["upitnik_method"] \u003d\u003d "post") (
Eho "

Zdravo, "$ _POST [" Ime "]."

!" ;
}
?>
">
Unesite svoje ime:




Obrazac u linijama 8-12 sadrži dvije stavke: ime i okbutton. Atribut metode određuje metodu post obrasca, atribut akcije koji ukazuje na URL na koji se obrazac šalje ispunjen je PHP_self Sover Server varijabilnom vrijednošću - adresu skripte trenutno.

- skraćeni oblik snimanja za .

Pretpostavimo, u polju imena unijeli smo vrijednost Vasya, a pritisnuto je dugme OK. Istovremeno, preglednik šalje poštu poslužitelj. Tijelo upita: Ime \u003d Vasya & Okbutton \u003d U redu. PHP automatski ispunjava $ _POST niz:

$ _Post ["naziv"] \u003d "Vasya"
$ _Post [okbutton] \u003d "OK"

U stvari, vrijednost "Vasya" šalje se u pretraživač u obliku urlencode; Za Windows-1251 kodiranje ova vrijednost izgleda kao% C2% E0% F1% FF. Ali, budući da PHP automatski vrši potrebnu dekodiranje, možemo "zaboraviti" o ovoj funkciji - dok ručno ne morate raditi sa HTTP upitima.

Budući da su u upitaju upita, naznačene su samo imena i vrijednosti, ali ne vrste elemenata obrasca, PHP nema pojma, odgovara $ _POST ["name"] ulaznim redom, tipkom ili popis. Ali ove informacije, općenito, apsolutno nisu potrebne. :)

Otkad znate šta se napiše na gumb za slanje, mi smo opcionalni, u liniji 11 možete izbrisati atribut imena, kraćim opis gumba na . U ovom slučaju, preglednik će poslati ime \u003d Vasya-Vasya.

A sada - isto, ali za u obliku u obliku:



ako (Isset ($ _ get ["naziv"])) (
Eho "

Zdravo, "$ _Get [" ime "]."

!" ;
}
?>
">
Unesite svoje ime:





U liniji 8 bilo bi moguće pisati s istim uspjehom

: Get - zadana metoda. Ovog puta pregledač šalje Get-zahtjev, što je ekvivalent u unosu adresne trake adrese: http: //adress-site./mety-script.php? Ime \u003d vasya.

PHP sa get-obrascima ulazi na isti način kao i kod pošte, s razlikom da je $ _get nitl napunjen.

Kardinalna razlika je u retku 4. Budući da je jednostavan unos adrese u nizu preglednika dobitnik, provjerite je li ($ _Server ["upitnik_method"] \u003d\u003d "get") je besmisleno. Stoga se pribjegavamo dizajnu ISSET-a, koji se istinita ako je ova varijabla definirana (I.E. dodijeljena je vrijednost) i lažna - ako varijabla nije definirana. Ako je obrazac popunjen - kao što ste već shvatili, PHP automatski dodjeljuje $ _get ["naziv"] odgovarajuću vrijednost.

Inspekcija se koristi pomoću Isset () - univerzalni, mogao bi se koristiti za post-obrazac. Štaviše, poželjno je, jer vam omogućava da saznate koja su polja obrasca popunjena.

Malo složeniji primjer.




Echo "Navedite ime!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Eho.
"
;
) Drugo (

" ;

Odjek "ti. $ Starost. Godine
" ;
}
Eho "


" ;
}
?>
">
Unesite svoje ime:


Unesite svoju godinu rođenja:





Ovdje se ne koriste nove tehnike. Promatrajte, izvršite kod, pokušajte modificirati ...

Promijenite posljednji primjer tako da korisnik ne treba ponovno ispuniti polja. Da biste to učinili, ispunite svojstva vrijednosti elemenata obrasca upravo unesene vrijednosti.



$ Name \u003d Isset ($ _ Post ["naziv"])? $ _Post ["naziv"]: "";
$ Godina \u003d Isset ($ _ Post ["Godina"])? $ _Post ["godina"]: "";

Ako (Isset ($ _ post ["naziv"], $ _POST ["Godina"])) (
ako ($ _post ["naziv"] \u003d\u003d "") (
Echo "Navedite ime!
" ;
) Drugo ako ($ _Post ["godina"]< 1900 || $_POST [ "year" ] > 2004 ) {
Eho. "Navedite godinu rođenja! Važeći raspon vrijednosti: 1900..2004
"
;
) Drugo (
Echo "Pozdrav". $ _Post ["naziv"]. "!
" ;
$ Stahe \u003d 2004 - $ _POST ["Godina"];
Odjek "ti. $ Starost. Godine
" ;
}
Eho "


" ;
}
?>
">
Unesite svoje ime:


Unesite svoju godinu rođenja:





Nekoliko neshvatljivih linija 4 i 5. Sve je vrlo jednostavno: Linija 4 može se zabilježiti ovako:

ako (Isset ($ _ post ["naziv"]))))
$ Name \u003d $ _post ["naziv"];
drugo.
$ Name \u003d "";

Može se pojaviti pitanje - zašto ne baci žice 4-5 i ne pisati:

Unesite svoje ime: ">

Unesite svoju godinu rođenja: ">

Činjenica je da ako se ovi postovi nisu definirani - i bit će, ako obrazac još nije popunjen, - PHP će izdati upozorenja o korištenju neintinaliziranih varijabli (i, dobro utemeljenih: takva poruka vam omogućava brzo Pronađite teško pričvršćene pogreške u promjenjivim imenima, a također upozorava na moguće "rupe" na web mjestu). Možete, naravno, staviti kôd s Izredom direktno u obrazac, ali ispada previše glomazan.

Shvatio? A sada pokušajte pronaći grešku u donjem kodu. Pa, ne baš greška, ali nedostaci.

htmlspecialchars ()

Nisam našao? Ja ću vam reći. Unesite, na primjer, u polju "Ime" dvostruki citati i neki tekst, na primjer, VA "sia. Pošaljite obrazac i pogledajte izvorni kod stranice primljeni. U četvrtoj liniji će biti nešto slično :

Unesite svoje ime:

To jeste - ništa dobro. I ako je lukav korisnik ušao u JavaScript kod?

Da biste riješili ovaj problem, potrebno je koristiti funkciju HTMLSPECIALCHARS (), što će zamijeniti likove usluge na njihovom HTML reprezentaciji (na primjer, citati - na "):



$ Name \u003d Isset ($ _ Post ["naziv"])? Htmlspecialchars ($ _post ["naziv"]): "";
$ Godina \u003d Isset ($ _ Post ["Godina"])? Htmlspecialchars ($ _Post ["Godina"]): "";

Ako (Isset ($ _ post ["naziv"], $ _POST ["Godina"])) (
ako ($ _post ["naziv"] \u003d\u003d "") (
Echo "Navedite ime!
" ;
) Drugo ako ($ _Post ["godina"]< 1900 || $_POST [ "year" ] > 2004 ) {
Eho. "Navedite godinu rođenja! Važeći raspon vrijednosti: 1900..2004
"
;
) Drugo (
Echo "Pozdrav". $ Name. "!
" ;
$ Stahe \u003d 2004 - $ _POST ["Godina"];
Odjek "ti. $ Starost. Godine
" ;
}
Eho "


" ;
}
?>
">
Unesite svoje ime:


Unesite svoju godinu rođenja:





Ponovite iskustvo i provjerite je li HTML kod sada ispravan.

Zapamtite - funkcija HTMLSPECIALCHARS () mora se uvijek koristiti kada se prikazuje sadržaj varijable u kojem se prikazuje HTML specijalni.

phpinfo ()

Funkcija phpinfo () jedna je od najvažnijih u PHP-u. Prikazuje informacije o PHP postavkama, vrijednostima svih vrsta varijabli konfiguracije ...

Zašto je spominjem u članku o obrascima? phpinfo () - ugodniji alat za uklanjanje pogrešaka. Phpinfo (), između ostalog prikazuje vrijednosti svih varijabli $ _get, $ _post i $ _Server. Dakle, ako su varijabilni oblici "izgubljeni", najlakši način za otkrivanje, koji je slučaj - koristite funkciju phpinfo (). Da biste funkciju za prikaz prikazali samo vrijednosti varijabli (i niste se morali kretati kroz desetine stranica), treba ga nazvati na sljedeći način: phpinfo (info_variables); , ili - to je apsolutno isto - phpinfo (32);.



">
Unesite svoje ime:


phpinfo (32);
?>

Ili, na primjer, ova situacija: želite znati IP adresu posjetitelja. Sjećate se da je odgovarajuća varijabla pohranjena u nizu $ _Server, ali - to nije dovoljno - zaboravili su tačno kako se varijabla naziva. Opet, nazovite phpinfo (32); , Tražimo vašu IP adresu u tanjuru i pronađemo ga - u $ _Server string ["Remote_addr"].