Korištenje metoda GET i POST u PHP-u je teško precijeniti, jer se ove metode nalaze na gotovo svim stranicama. Prije proučavanja materijala opisanog u nastavku, savjetujem vam da se upoznate s html oznakom
elementi forme
Obrazac ima atribute, navest ću one najčešće:
Kreirajmo formu:
elementi forme
Kao fajl za rukovanje, stavio sam fajl test.php jer u njemu pišem primjere za vas. Ja sam podesio način slanja postova jer se ove metode koriste u 99,9% slučajeva. Našoj formi sam dao i ime – forma
Sada zaronimo u svijet elemenata forme. Prva stvar koju trebate razumjeti je da su skoro svi elementi oznake. jedina razlika je u atributu tip kod ovih oznaka. Dozvolite mi da navedem korištene elemente obrasca:
Siguran sam da ste ovakva polja vidjeli više puta, pa evo, kako kažu: "bez komentara"
Hajde sada da sastavimo kratak upitnik za obuku sa kojim ćemo dalje raditi. Naš zadatak je da sastavimo mali upitnik koji će nam reći ime osobe koja je ispunila, spol, iz koje je zemlje, njegovu omiljenu boju i tekstualno polje u koje korisnik može dodati nešto o sebi. To sam uradio:
Vaše prezime Ime Patronim:
Vaš spol:
M
F
iz koje ste zemlje
Omiljena boja (e):
crna:
crveno:
bijela:
drugo:
O sebi:
Imajte na umu da skoro svaka oznaka ima atribut vrijednost, čemu služi? Zapisuje podatke koje ćete prenijeti na drugu stranicu. Nadam se da je jasno
Sada ako pokrenemo ovaj kod u pretraživaču, vidjet ćemo sljedeće:
Koristio sam atribut za obrazac akcija sa značenjem test.php to znači, kao što sam rekao, podaci iz obrasca će biti proslijeđeni test.php fajlu.
POST zahtjev
Hajde sada da napišemo php kod koji će nam omogućiti da vidimo informacije koje smo uneli. Gdje se pohranjuju podaci? U slučaju zahtjeva za dobivanje, naši podaci su pohranjeni u globalnoj varijabli $ _GET [""]. Kada se napravi zahtjev za objavljivanje, podaci će biti u globalnoj varijabli $ _POST [""]. U uglastim zagradama morate napisati identifikator, kao u slučaju globalne varijable get. Pitanje je gdje mogu dobiti ovaj identifikator? Zato nam je potreban atribut name na elementima forme! Upravo ta imena služe kao ključ za nas u postu globalnog niza. Pa, počnimo s opisom skripte:
if (isset ($ _ POST ["submit"])) (
echo "Ime:". $ _ POST ["fio"]. "
";
echo "Sex:". $ _ POST ["sex"]. "
";
echo "Zemlja prebivališta:". $ _ POST ["grad"]. "
";
Echo "Omiljena boja(e):
";
echo $ _POST ["color_1"]. "
";
echo $ _POST ["color_2"]. "
";
echo $ _POST ["color_3"]. "
";
echo $ _POST ["color_4"]. "
";
echo "O meni:". $ _ POST ["o"]. "
";
}
?>
Uslov if koji smo napisali kaže: Ako postoji globalna varijabla $ _POST ["submit"], tada prikazujemo podatke na ekranu. Ova globalna varijabla se kreira ako kliknemo na dugme za slanje, zbog čega nam je u ovom primeru potreban atribut name u dugmetu. Možda se pitate zašto je atribut name opcionalan za dugme? Prilično je jednostavno. Obično programator ne prati pritisak na dugme, već prati poslate podatke. Za ispravan rad, na primjer, obrazaca za kontakt, potrebno je pratiti ne pritisak na dugme, već ispravnost unesenih podataka i saznati jesu li ti podaci uopće uneseni. U našem primjeru nismo provjeravali poslate podatke, već smo jednostavno pratili klik na dugme, da pojednostavimo primjer... Evo što smo dobili:
Zaključak
Pa, danas smo analizirali dvije metode prijenosa podataka između skripti, kao i galopom se upoznali sa formama. Zaista se nadam da će vam ova informacija barem negdje biti od koristi. Ako imate pitanja ili razmišljanja, napišite komentare. Srećno, imam sve za danas!
PS: Da li želite da kompjuterske igrice postanu još realističnije? Directx 11 za Windows 7 možete besplatno preuzeti na Windows u! Uživajte u sjajnoj grafici!
Ovaj post je odgovor na pitanje postavljeno u komentaru na jedan od mojih članaka.
U ovom članku želim da vam kažem šta su HTTP metode GET / POST / PUT / DELETE i druge, za šta su izmišljene i kako ih koristiti u skladu sa REST.
HTTP
Dakle, šta je tačno jedan od glavnih protokola Interneta? Pedante ću poslati na RFC2616, a ostalo ću reći kao čovjek :)Ovaj protokol opisuje komunikaciju između dva računara (klijent i server), na osnovu poruka koje se zovu Zahtjev i Odgovor. Svaka poruka se sastoji od tri dijela: početne linije, zaglavlja i tijela. U ovom slučaju potrebna je samo startna linija.
Početne linije za zahtjev i odgovor imaju drugačiji format - zanima nas samo početna linija zahtjeva, koja izgleda ovako:
METHOD URI HTTP / VERSION ,
Gdje je METHOD samo metoda HTTP zahtjeva, URI je identifikator resursa, VERSION je verzija protokola (verzija 1.1 je trenutno relevantna).
Zaglavlja su zbirka parova ime-vrijednost, odvojenih dvotočkama. U zaglavljima se prenose različite informacije o servisu: kodiranje poruke, naziv i verzija pretraživača, adresa sa koje je došao klijent (Referrer) i tako dalje.
Tijelo poruke su, u stvari, preneseni podaci. U odgovoru, preneseni podaci, u pravilu, je html stranica koju je tražio pretraživač, a u zahtjevu, na primjer, u tijelu poruke, prenosi se sadržaj datoteka koje su učitane na server. Ali po pravilu, tijelo poruke uopće nije uključeno u zahtjev.
Primjer HTTP komunikacije
Pogledajmo primjer.upit:
GET /index.php HTTP / 1.1 Host: example.com Korisnički agent: Mozilla / 5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Prihvati: tekst / html Veza: zatvori
Prvi red je red zahtjeva, ostali su zaglavlja; tijelo poruke nedostaje
odgovor:
HTTP / 1.0 200 OK Server: nginx / 0.6.31 Content-Language: ru Content-Type: text / html; charset = utf-8 Content-Length: 1234 Veza: zatvori ... SAMA HTML STRANICA ...
Resursi i metode
Vratimo se na početni niz upita i zapamtite da sadrži parametar kao što je URI. Ovo je skraćenica od Uniform Resource Identifier - uniformni identifikator resursa. Resurs je, u pravilu, datoteka na serveru (primjer URI u ovom slučaju je "/styles.css"), ali općenito, resurs može biti apstraktni objekt ("/ blogs / webdev /" - označava blok "Web development", a ne za određenu datoteku).HTTP tip zahtjeva (koji se naziva i HTTP metoda) govori serveru koju radnju želimo poduzeti s resursom. U početku (ranih 90-ih) pretpostavljalo se da klijent može samo jedno željeti od resursa - da ga dobije, ali sada, koristeći HTTP protokol, možete kreirati postove, uređivati profil, brisati poruke i još mnogo toga. A ove radnje je teško kombinovati sa pojmom „primanje“.
Za razlikovanje akcija s resursima na nivou HTTP metoda, izmišljene su sljedeće opcije:
- GET - dobijanje resursa
- POST - kreiranje resursa
- PUT - ažuriranje resursa
- DELETE - brisanje resursa
ODMOR dolazi u igru
REST (REpresentational State Transfer) - ovaj termin je 2000. godine skovao Roy Fielding - jedan od programera HTTP protokola - kao naziv za grupu principa za izgradnju web aplikacija. Generalno, REST pokriva šire područje od HTTP-a - može se koristiti na drugim mrežama s drugim protokolima. REST opisuje principe interakcije klijent-server, zasnovane na konceptima "resurs" i "glagol" (možete ih shvatiti kao subjekt i predikat). U slučaju HTTP-a, resurs je definiran njegovim URI-jem, a glagol je HTTP metoda.REST predlaže da se odustane od upotrebe istog URI-ja za različite resurse (to jest, adrese dva različita članka kao što su /index.php?article_id=10 i /index.php?article_id=20 nisu REST-način) i koriste različite HTTP metode za različite akcije. Odnosno, web aplikacija napisana korištenjem REST pristupa će izbrisati resurs kada mu pristupi metodom HTTP DELETE (naravno, to ne znači da biste trebali moći izbrisati sve i svašta, ali bilo koji zahtjev za brisanje aplikacije mora koristiti metodu HTTP DELETE).
REST daje programerima mogućnost pisanja standardiziranih i malo ljepših web aplikacija nego ikada prije. Koristeći REST, URI za dodavanje novog korisnika neće biti /user.php?action=create (GET / POST metoda), već jednostavno /user.php (strogo POST metoda).
Kao rezultat toga, kombinovanjem postojeće HTTP specifikacije i REST pristupa, različite HTTP metode konačno imaju smisla. GET - vraća resurs, POST - kreira novi, PUT - ažurira postojeći, DELETE - briše.
Problemi?
Da, postoji mali problem sa primjenom REST-a u praksi. Ovaj problem se zove HTML.PUT/DELETE zahtjevi se mogu slati putem XMLHttpRequest-a, tako da se "ručno" kontaktira server (recimo, preko curl-a ili čak preko telneta), ali ne možete napraviti HTML obrazac koji šalje puni PUT/DELETE zahtjev.
Poenta je da vam HTML specifikacija ne dozvoljava kreiranje obrazaca koji šalju podatke osim putem GET-a ili POST-a. Stoga, za normalan rad s drugim metodama, morate ih umjetno oponašati. Na primjer, u Rack-u (mehanizam kojim Ruby komunicira s web serverom; Rails, Merb i drugi Ruby okviri su napravljeni pomoću Rack-a), možete dodati skriveno polje pod nazivom "_method" u obrazac i navesti ime metoda kao vrijednost (na primjer, "PUT") - u ovom slučaju, POST zahtjev će biti poslan, ali Rack će se moći pretvarati da je primio PUT, a ne POST.
Ovaj post je namijenjen da objasni principe prijenosa podataka na Internetu korištenjem dvije glavne metode: GET i POST. Napisao sam ga kao dodatak uputstvu za generator smjenskog rada za one koje malo zanimaju detalji ☺.
Idite na sledeću adresu (ovo je za vizuelno objašnjenje): http://calendarin.net/calendar.php?year=2016 Obratite pažnju na adresnu traku pretraživača: calendarin.net/calendar.php ? godina = 2016 Glavna datoteka je imenovana, praćena znakom pitanja (?) i parametrom "year" sa vrijednošću "2016". Dakle, sve što slijedi iza znaka pitanja je GET zahtjev. To je jednostavno. Da biste proslijedili više od jednog parametra, ali nekoliko, onda ih treba razdvojiti znakom &. Primjer: calendarin.net/calendar.php • godina = 2016 i prikaz = radni dani i slobodni dani
Glavna datoteka je i dalje imenovana, praćena upitnikom (?), zatim - parametar "year" sa vrijednošću "2016", zatim - ampersand (&), zatim - parametar "display" sa vrijednošću "work -dani-i-dani -slobodni".
GET parametri se mogu mijenjati direktno u adresnoj traci pretraživača. Na primjer, promjenom vrijednosti "2016" u "2017" i pritiskom na tipku idete na kalendar za 2017. godinu.
Ovo je prijenos podataka na skriveni način (adresa stranice se ne mijenja); odnosno možete vidjeti šta je prenijeto samo uz pomoć programa (skripte). Na primjer, u sljedećem alatu za brojanje znakova u tekstu, izvorni podaci se prenose POST metodom: http://usefulonlinetools.com/free/character-counter.php
Ako imate bilo kakvih pitanja, komentara i moj e-mail na usluzi.
Pored GET metode, o kojoj smo govorili u prethodnom postu, postoji još jedna metoda za slanje zahtjeva putem HTTP protokola - POST metoda. POST metoda se također vrlo često koristi u praksi.
Ako nam je za pristup serveru metodom GET bilo dovoljno da ukucamo zahtjev u URL, onda u POST metodi sve radi po drugom principu.
Da bismo ispunili ovakvu vrstu zahtjeva potrebno je da kliknemo na dugme sa atributom type = "submit" koje se nalazi na web stranici. Imajte na umu da se ovo dugme nalazi u elementu
Uzmite u obzir ovaj HTML:
![](https://i1.wp.com/steptosleep.ru/wp-content/uploads/2018/06/92221.png)
Ako korisnik unese bilo koji tekst u tekstualno polje i klikne na dugme "Pošalji", tada će se serveru poslati tekstualna varijabla sa vrijednošću sadržaja koju je unio korisnik.
POST i GET zahtjeve na jednostavan način
Ova varijabla će biti poslana metodom POST.
Ako pišete u formi ovako:
Tada će se podaci poslati metodom GET.
Ako je, u slučaju GET zahtjeva, količina podataka koju smo mogli prenijeti bila ograničena dužinom adresne trake pretraživača, tada u slučaju POST zahtjeva nema tog ograničenja i možemo prenijeti značajne količine informacija.
Još jedna razlika između POST metode i GET metode, POST metoda skriva sve varijable koje su joj proslijeđene i njihove vrijednosti u svom tijelu (Entity-Body). U slučaju GET metode, oni su pohranjeni u stringu zahtjeva (Request-URI).
Evo primjera POST zahtjeva:
POST / HTTP / 1.0 \ r \ n
Host: www.site.ru \ r \ n
Referent: http://www.site.ru/index.html\r\n
Kolačić: prihod = 1 \ r \ n
Content-Type: application / x-www-form-urlencoded \ r \ n
Dužina sadržaja: 35 \ r \ n
\ r \ n
login = Dima & lozinka = 12345
Dakle, prenošenjem podataka metodom POST, napadaču će biti mnogo teže da ih presretne, jer oni su skriveni od pogleda, pa se POST metoda smatra sigurnijom.
Osim toga, POST metoda može prenijeti ne samo tekst, već i multimedijalne podatke (slike, audio, video). Postoji poseban parametar Content-Type koji određuje vrstu informacija koje treba prenijeti.
Konačno, varijabla POST se koristi za dohvaćanje podataka prenesenih ovom metodom na server.
Evo primjera obrade u PHP-u:
echo $ _POST ['tekst'];
?>
U prošlom postu smo odlučili da pretraživač (klijent) šalje HTTP zahteve serveru, a server klijentu šalje HTTP odgovore. Ovi zahtjevi i odgovori se obrađuju prema određenim pravilima. Postoji nešto poput sintakse, kako i kojim redosledom treba pisati. Mora postojati dobro definisana struktura.
Pogledajmo pobliže ovu strukturu, koja se koristi za izgradnju zahtjeva i odgovora u HTTP protokolu.
HTTP zahtjev se sastoji od tri glavna dijela, koji dolaze tačno dolje prikazanim redoslijedom. Između zaglavlja i tijela poruke postoji prazan red (kao separator), to je znak za povlačenje reda.
Prazan niz (separator)
Objavi i dobij zahtjeve, koja je razlika između njih i koji je bolji i za koje svrhe?
tijelo poruke (Tijelo entiteta) - opcijski parametar
string upita- specificira način prijenosa, URL za pristup i verziju HTTP protokola.
Naslovi- opisuju tijelo poruka, prenose različite parametre i druge informacije i informacije.
tijelo poruke- ovo su sami podaci, koji se prenose u zahtjevu. Tijelo poruke je opciono i može se izostaviti.
Kada primimo zahtjev za odgovor od servera, tijelo poruke najčešće je sadržaj web stranice. Ali, prilikom upućivanja zahtjeva serveru, to ponekad može biti i prisutno, na primjer, kada podatke koje smo popunili u formularu za povratne informacije prenesemo na server.
Detaljnije, svaki element zahtjeva ćemo razmotriti u sljedećim napomenama.
Uzmimo jedan pravi serverski zahtjev kao primjer. Svaki dio zahtjeva sam označio svojom bojom: linija zahtjeva je zelena, zaglavlja su narandžasta, tijelo poruke je plavo.
Zahtjev iz pretraživača:
Domaćin: webgyry.info
Kolačić: wp-settings
Veza: održavaj-živ
U sljedećem primjeru tijelo poruke je već prisutno.
Odgovor servera:
Content-Type: text / html; skup znakova = UTF-8
Transfer-Encoding: chunked
Veza: održavaj-živ
Keep-Alive: timeout = 5
X-Pingback: //webgyry.info/xmlrpc.php
Ovo su poruke koje se razmenjuju između klijenta i servera preko HTTP protokola.
Usput, želite li znati ima li smisla u nekom elementu na vašoj web stranici koristeći "ciljeve" Yandex Metrics i Google Analytics?
Oduzmite ono što NE radi, dodajte ono što radi i udvostručite svoj rezultat.
Kurs o postavljanju Yandex Metrica ciljeva ..
Kurs o postavljanju ciljeva Google Analytics..
HTTP klijent šalje zahtjev serveru u obliku poruke zahtjeva, koja ima sljedeći format:
- Niz zahtjeva (obavezno)
- Naslov (opcijski element)
- Prazan niz (obavezno)
- Tijelo poruke (opcionalno)
Pogledajmo svaki od ovih elemenata posebno.
string upita
Niz zahtjeva počinje tokenom metode, nakon čega slijedi URI zahtjeva i verzija protokola. Elementi su međusobno odvojeni razmacima:
Razmotrimo ovaj element detaljnije.
Metoda zahtjeva
Ovaj element specificira metodu koja će biti pozvana na strani servera na specificiranom URI-ju.
Postoji osam metoda u HTTP-u:
- HEAD
Koristi se za dobijanje statusne linije i naslova sa servera prema URI-ju. Ne mijenja podatke. - GET
Koristi se za primanje podataka sa servera na navedeni URI. Ne mijenja podatke. - POŠTA
Koristi se za slanje podataka na server (kao što su informacije o programeru, itd.) pomoću HTML obrazaca. - STAVITI
Zamjenjuje sve prethodne podatke na resursu s novoučitanim podacima. - IZBRIŠI
Uklanja sve trenutne podatke na resursu koji je specificirao URI. - CONNECT
Uspostavlja tunelsku vezu sa serverom na navedenom URI-ju. - OPCIJE
Opisuje svojstva veze za navedeni resurs. - TRACE
Pruža poruku koja sadrži povratni trag lokacije navedenog URI-ja resursa.
Zahtjev za URI
URI (Uniform Resource Identifier) je identifikator resursa na koji se šalje zahtjev. Najčešći URI format je prikazan u nastavku:
‘*’ koristi se kada HTTP zahtjev nije specifičan za određeni resurs, već za server. Koristi se samo kada se metoda ne mora primijeniti na resurs. Na primjer,
apsolutni uri koristi se kada se HTTP zahtjev šalje proxyju. Od proxyja se traži da proslijedi zahtjev iz dostupne keš memorije i vraća odgovor. Na primjer:
asbolutny_path | izvor koristi većina chatso.
Učenje rada sa GET i POST zahtjevima
Zahtijeva se određeni resurs određenog servera. Na primjer, klijent želi da dobije resurs od servera preko porta 80. Adresa izvora je “www.proselyte.net” i šalje sljedeći zahtjev:
Traženje polja zaglavlja
Polja zaglavlja omogućavaju klijentu da prosledi dodatne informacije o zahtevu i o sebi serveru. Ova polja djeluju kao modifikatori zahtjeva.
Ispod je lista najvažnijih polja zaglavlja koja se mogu koristiti:
- Prihvati-Charset
- Accept-Encoding
- Accept-Language
- Autorizacija
- Očekujte
- Ako-Match
- Ako-Modificirano-Od
- Ako-Nema-Match
- If-Range
- Ako-Neizmijenjeno-Od
- Domet
- Referer
- Korisnički agent
Ako želimo implementirati vlastiti klijent i vlastiti web server, onda možemo kreirati vlastita polja zaglavlja.
Primjer HTTP zahtjeva
Ovo završava naše istraživanje HTTP zahtjeva.
U sljedećem članku ćemo pogledati HTTP odgovore.
Jedan od načina na koji možete poslati HTTP zahtjev serveru je GET zahtjev. Ova metoda je najčešća i najčešće se njome upućuju zahtjevi prema serveru.
Najlakši način da kreirate GET zahtjev je da unesete URL u adresnu traku vašeg pretraživača.
Pretraživač će prenijeti sljedeće informacije na server:
GET / HTTP / 1.1
Domaćin: webgyry.info
Korisnički agent: Mozilla / 5.0 (Windows NT 6.1; rv: 18.0) Gecko / 20100101 Firefox / 18.0
Prihvati: tekst / html, aplikacija / xhtml + xml, aplikacija / xml; q = 0,9, * / *; q = 0,8
Prihvati-jezik: ru-RU, ru; q = 0,8, en-US; q = 0,5, en; q = 0,3
Accept-Encoding: gzip, deflate
Kolačić: wp-settings
Veza: održavaj-živ
Zahtjev se sastoji iz dva dijela:
1. linija zahtjeva
2.headers (Zaglavlja poruke)
Imajte na umu da GET zahtjev nema tijelo poruke. Ali, to ne znači da uz njegovu pomoć ne možemo prenijeti nikakve informacije na server.
Razlika između GET i POST metoda
Ovo se može učiniti pomoću posebnih GET parametara.
Da dodate GET parametre u zahtjev, trebate staviti znak "?" na kraj URL-a. a nakon toga počnite da ih pitate prema sljedećem pravilu:
parameter_name1 = parameter_value1 & parameter_name2 = parameter_value2 & ...
Razdjelnik između parametara je znak "&".
Na primjer, ako želimo da serveru prenesemo dvije vrijednosti, korisničko ime i njegovu dob, onda se to može učiniti pomoću sljedeće linije:
http://site.ru/page.php?name=dima&age=27
Kada se ovaj upit izvrši, podaci idu u takozvanu varijablu okruženja QUERY_STRING, iz koje se mogu preuzeti na serveru koristeći web programski jezik na strani servera.
Evo primjera kako se to može učiniti u PHP-u.
echo "Vaše ime:". $ _GET ["name"]. "
»;
echo "Vaše godine:". $ _GET ["starost"]. "
»;
?>
$ _GET ["parameter_name"] konstrukcija vam omogućava da prikažete vrijednost proslijeđenog parametra.
Kao rezultat izvršavanja ovog koda u pretraživaču, bit će prikazano sljedeće:
Vaše ime: dima
Vaše godine: 27
takođe šaljemo zahtev serveru koristeći metodu GET.