Korištenje GET i POST metoda u PHP-u teško je precijeniti, budući da se ove metode nalaze na gotovo svakoj web stranici. Prije proučavanja dolje opisanog materijala, savjetujem vam da se upoznate s html oznakom
elementi forme
Obrazac ima atribute, navest ću najčešće:
Kreirajmo obrazac:
elementi forme
Postavio sam datoteku kao datoteku rukovatelja test.php budući da u njemu pišem primjere za vas. Postavio sam način slanja na objavu jer su to načini koji se koriste u 99,9% slučajeva. Našoj formi sam dao i ime - forma
Uronimo sada u svijet elemenata oblika. Prvo što morate shvatiti je da su gotovo svi elementi oznake razlika je samo u atributu tip na ovim oznakama. Dopustite mi da nabrojim korištene elemente obrasca:
Siguran sam da ste više puta vidjeli takva polja, pa evo kako kažu: "bez komentara"
Kreirajmo sada mali upitnik za obuku s kojim ćemo dalje raditi. Naš zadatak je izraditi mali upitnik koji će nam reći ime osobe koja ga ispunjava, spol, iz koje zemlje je, omiljenu boju i tekstualno polje u koje korisnik može dodati nešto o sebi. Evo što sam dobio:
Vaše prezime Ime i patronim:
Koji je tvoj spol:
M
I
Iz koje si zemlje
Omiljena boja(e):
Crno:
Crvena:
Bijelo:
Još:
O meni:
Imajte na umu da gotovo svaka oznaka ima atribut vrijednost, čemu služi? Bilježi podatke koje ćete prenijeti na drugu stranicu. Nadam se da je jasno
Ako sada pokrenemo ovaj kod u pregledniku, vidjet ćemo sljedeće:
Za obrazac sam koristio atribut akcijski sa značenjem test.php to znači, kao što sam već rekao, da će podaci iz obrasca biti prebačeni u datoteku test.php.
POST zahtjev
Sada napišimo PHP kod koji će nam omogućiti da vidimo podatke koje smo unijeli. Gdje su podaci pohranjeni? U slučaju get zahtjeva, naši su podaci bili u globalnoj varijabli $_GET[""]. Prilikom postavljanja zahtjeva za objavu, podaci će biti pohranjeni u globalnoj varijabli $_POST[""]. U uglatim zagradama morate napisati, kao u slučaju globalne varijable get, identifikator. Pitanje je gdje mogu nabaviti taj identifikator? Zato nam je potreban atribut name na elementima forme! Upravo ta imena služe kao naš ključ u globalnom nizu poruka. Pa, počnimo s opisom skripte:
if(isset($_POST["submit"])) (
echo "Puno ime: ".$_POST["fio"]."
";
echo "Spol: ".$_POST["spol"]."
";
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 sebi: ".$_POST["o"]."
";
}
?>
If uvjet koji smo napisali kaže: Ako postoji globalna varijabla $_POST["submit"] tada prikazujemo podatke na ekranu. Ova globalna varijabla se stvara ako kliknemo na gumb za slanje, zbog čega je atribut imena u gumbu potreban u ovom primjeru. Možda se pitate zašto je atribut naziva gumba neobavezan? Sasvim je jednostavno. Tipično, programator ne nadzire pritisak gumba, već nadzire poslane podatke. Za ispravan rad, primjerice, kontakt forme, potrebno je pratiti ne klik na gumb, već ispravnost unesenih podataka, te saznati jesu li ti podaci uopće uneseni. U našem primjeru nismo provjeravali poslane podatke, već jednostavno pratili pritisak na gumb, da pojednostavimo primjer... Evo što smo dobili:
Zaključak
Pa, danas smo pogledali dvije metode prijenosa podataka između skripti, a upoznali smo se i s formama. Stvarno se nadam da će vam ove informacije biti korisne barem negdje. Ako imate pitanja ili razmišljanja, napišite komentare. Sretno vam bilo, to je sve za danas!
P.S.: Želite li da računalne igre postanu još realističnije? directx 11 za Windows 7 može se besplatno preuzeti na Windows in! Uživajte u prekrasnoj grafici!
Ovaj post je odgovor na pitanje postavljeno u komentaru na jedan od mojih članaka.
U ovom članku želim vam reći što su HTTP metode GET/POST/PUT/DELETE i druge, zašto su izmišljene i kako ih koristiti u skladu s REST-om.
HTTP
Dakle, koji je jedan od glavnih internetskih protokola? Pedante ću poslati na RFC2616, a ostalo ću reći ljudski :)Ovaj protokol opisuje interakciju između dva računala (klijenta i poslužitelja), izgrađenu na temelju poruka koje se nazivaju zahtjev (Request) i odgovor (Response). Svaka poruka sastoji se od tri dijela: početne linije, zaglavlja i tijela. U ovom slučaju potrebna je samo startna linija.
Početni redovi za zahtjev i odgovor imaju različite formate - zanima nas samo početni redak zahtjeva koji izgleda ovako:
URI METODE HTTP/ VERZIJA ,
Gdje je METHOD metoda HTTP zahtjeva, URI je identifikator resursa, VERSION je verzija protokola (trenutno je aktualna verzija 1.1).
Zaglavlja su skup parova ime-vrijednost odvojenih dvotočkom. Zaglavlja prenose različite servisne informacije: kodiranje poruke, naziv preglednika i verziju, adresu s koje je klijent došao (Referrer) i tako dalje.
Tijelo poruke su stvarni podaci koji se prenose. U odgovoru se prenosi podatak obično o HTML stranici koju je preglednik tražio, au zahtjevu se, primjerice, u tijelu poruke prenosi sadržaj datoteka uploadanih na poslužitelj. Ali u pravilu u zahtjevu uopće nema tijela poruke.
Primjer HTTP interakcije
Pogledajmo primjer.Zahtjev:
GET /index.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Prihvati: tekst/html Veza: zatvori
Prvi redak je redak upita, ostalo 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 Dužina sadržaja: 1234 Veza: zatvori ... SAMA HTML STRANICA...
Resursi i metode
Vratimo se na početni redak zahtjeva i zapamtimo da on sadrži takav parametar kao što je URI. Ovo je kratica za Uniform Resource Identifier - jedinstveni identifikator izvora. Resurs je u pravilu datoteka na poslužitelju (primjer URI-ja u ovom slučaju je “/styles.css”), ali općenito resurs može biti i neki apstraktni objekt (“/blogs/webdev/” - točke na "Web" razvoj bloka" umjesto na određenu datoteku).Vrsta HTTP zahtjeva (također nazvana HTTP metoda) govori poslužitelju koju radnju želimo izvesti na resursu. U početku (ranih 90-ih) pretpostavljalo se da klijent od resursa može željeti samo jednu stvar - da ga primi, ali sada pomoću HTTP protokola možete kreirati postove, uređivati profil, brisati poruke i još mnogo toga. A ove radnje teško je spojiti s pojmom "primanje".
Za razlikovanje radnji od resursa na razini HTTP metoda izmišljene su sljedeće opcije:
- DOBITI - dobivanje resursa
- POST - stvaranje resursa
- PUT - ažuriranje resursa
- DELETE - brisanje resursa
OSTALO dolazi u obzir
REST (REpresentational State Transfer) je pojam koji je 2000. godine uveo Roy Fielding, jedan od developera HTTP protokola, kao naziv grupe principa za izgradnju web aplikacija. Općenito, REST pokriva šire područje od HTTP-a - također se može koristiti u drugim mrežama s drugim protokolima. REST opisuje principe interakcije između klijenta i poslužitelja, temeljene na konceptima “resursa” i “glagola” (može se shvatiti kao subjekt i predikat). U slučaju HTTP-a, resurs je identificiran svojim URI-jem, a glagol je HTTP metoda.REST predlaže napuštanje upotrebe istog URI-ja za različite resurse (to jest, adrese dvaju različitih članaka poput /index.php?article_id=10 i /index.php?article_id=20 - ovo nije REST način) i koristeći različite HTTP metode za različite akcije. Odnosno, web aplikacija napisana korištenjem REST pristupa će obrisati resurs kada mu se pristupi metodom HTTP DELETE (naravno, to ne znači da je potrebno dati mogućnost brisanja svega i svakoga, 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 prije. Korištenjem REST-a, URI za dodavanje novog korisnika neće biti /user.php?action=create (metoda GET/POST), već jednostavno /user.php (metoda striktno POST).
Kao rezultat toga, kombiniranjem postojeće HTTP specifikacije i REST pristupa, različite HTTP metode konačno imaju smisla. GET - vraća resurs, POST - stvara novi, PUT - ažurira postojeći, DELETE - briše ga.
Problemi?
Da, postoji mali problem s korištenjem REST-a u praksi. Ovaj problem se zove HTML.Zahtjevi PUT/DELETE mogu se slati korištenjem XMLHttpRequesta, ručnim kontaktiranjem poslužitelja (recimo, putem curla ili čak putem telneta), ali ne možete napraviti HTML obrazac koji šalje potpuni zahtjev PUT/DELETE.
Stvar je u tome što vam HTML specifikacija ne dopušta stvaranje obrazaca koji šalju podatke osim putem GET ili POST. Stoga, da biste normalno radili s drugim metodama, morate ih umjetno oponašati. Na primjer, u Racku (mehanizam na temelju kojeg Ruby komunicira s web poslužiteljem; Rails, Merb i drugi Ruby frameworki napravljeni su pomoću Racka) možete dodati skriveno polje u formu s nazivom "_method" i navedite naziv metode kao vrijednost (npr. "PUT") - u ovom slučaju će biti poslan POST zahtjev, ali će se Rack moći pretvarati da je primio PUT, a ne POST.
Ovaj post ima za cilj objasniti principe prijenosa podataka na Internetu koristeći dvije glavne metode: GET i POST. Napisao sam ga kao dodatak uputama za generator rasporeda smjena za one koje detalji vjerojatno neće zanimati ☺.
Idite na sljedeću adresu (ovo je za vizualno objašnjenje): http://calendarin.net/calendar.php?year=2016 Obratite pozornost na adresnu traku preglednika: calendarin.net/calendar.php ?godina=2016 Glavna datoteka ima naziv nakon kojeg slijedi upitnik (?) i parametar "godina" s vrijednošću "2016". Dakle, sve što slijedi iza upitnika je GET zahtjev. Jednostavno je. Za prosljeđivanje više od jednog parametra, oni moraju biti odvojeni znakom & (&). Primjer: calendarin.net/calendar.php ?year=2016&display=radni-i-slobodni dani
Glavna datoteka i dalje ima naziv, nakon čega slijedi upitnik (?), zatim parametar "godina" s vrijednošću "2016", zatim znak & (&), zatim parametar "prikaz" s vrijednošću "radni dani- i-dani” -off".
GET parametri mogu se mijenjati izravno u adresnoj traci preglednika. Na primjer, promjena vrijednosti "2016" u "2017" i pritisak na tipku odvest će vas na kalendar za 2017. godinu.
Ovo je skriveni prijenos podataka (adresa stranice se ne mijenja); odnosno možete vidjeti samo ono što je preneseno pomoću programa (skripte). Na primjer, u sljedećem alatu za brojanje znakova u tekstu, izvorni podaci se prenose metodom POST: http://usefulonlinetools.com/free/character-counter.php
Ako imate bilo kakvih pitanja, komentara i moja e-pošta stoji vam na usluzi.
Osim 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 smo, da bismo kontaktirali poslužitelj koristeći GET metodu, morali samo upisati zahtjev u URL, onda u POST metodi sve radi na drugom principu.
Za izvršenje ovog tipa zahtjeva potrebno je kliknuti na gumb s atributom type="submit" koji se nalazi na web stranici. Imajte na umu da se ovaj gumb nalazi u elementu
Razmotrite ovaj HTML kod:
![](https://i1.wp.com/steptosleep.ru/wp-content/uploads/2018/06/92221.png)
Ako korisnik u tekstualno polje unese tekst i klikne na gumb “Pošalji”, tekstualna varijabla će biti poslana na poslužitelj s vrijednošću sadržaja koji je korisnik unio.
POST i GET zahtjevi jednostavnim riječima
Ova varijabla bit će poslana metodom POST.
Ako ovo napišete u obliku:
Tada će podaci biti poslani metodom GET.
Ako je u slučaju GET zahtjeva količina podataka koju smo mogli prenijeti bila ograničena duljinom adresne trake preglednika, 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 je ta što POST metoda skriva sve varijable koje prosljeđuje i njihove vrijednosti u svom tijelu (Entity-Body). U slučaju GET metode, oni su pohranjeni u nizu zahtjeva (Request-URI).
Evo primjera zahtjeva napravljenog metodom POST:
POST / HTTP/1.0\r\n
Domaćin: www.site.ru\r\n
Preporuka: 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
prijava=Dima&lozinka=12345
Dakle, prijenosom podataka POST metodom, napadaču će biti puno teže presresti ih jer skriveni su od izravnog pogleda pa se POST način prijenosa podataka smatra sigurnijim načinom.
Osim toga, koristeći POST metodu možete prenijeti ne samo tekst, već i multimedijske podatke (slike, audio, video). Postoji poseban parametar Content-Type koji određuje vrstu informacija koje je potrebno prenijeti.
I na kraju, da bi se podaci koji su poslani ovom metodom primili na poslužitelj, koristi se POST varijabla.
Evo primjera obrade u PHP-u:
echo $_POST['tekst'];
?>
U prošlom postu odlučili smo da preglednik (klijent) šalje HTTP zahtjeve poslužitelju, a poslužitelj šalje HTTP odgovore klijentu. Ovi zahtjevi i odgovori oblikovani su prema određenim pravilima. Postoji nešto poput sintakse, kako i kojim redoslijedom treba pisati. Mora postojati strogo definirana struktura.
Pogledajmo pobliže ovu strukturu po kojoj su zahtjevi i odgovori izgrađeni u HTTP protokolu.
HTTP zahtjev sastoji se od tri glavna dijela, koji se pojavljuju dolje navedenim redoslijedom. Između zaglavlja i tijela poruke nalazi se prazan redak (kao separator), koji predstavlja znak za novi redak.
Prazan niz (razdjelnik)
Post and Get requests, koja je razlika između njih i koji je bolji i za koje namjene?
tijelo poruke (Entity Body) – izborni parametar
Niz upita– navodi način prijenosa, URL kojem se pristupa i verziju HTTP protokola.
Naslovi– opisuju tijelo poruka, prenose različite parametre i druge podatke i informacije.
tijelo poruke- to su sami podaci koji se prenose u zahtjevu. Tijelo poruke je izborni parametar i može nedostajati.
Kada primimo zahtjev za odgovor od poslužitelja, tijelo poruke je najčešće sadržaj web stranice. No, prilikom postavljanja zahtjeva prema poslužitelju, također ponekad može biti prisutan, na primjer, kada podatke koje smo ispunili u obrascu za povratne informacije prenosimo na poslužitelj.
Detaljnije ćemo razmotriti svaki element zahtjeva u sljedećim bilješkama.
Uzmimo, na primjer, jedan pravi zahtjev poslužitelju. Svaki dio zahtjeva sam označio različitom bojom: linija zahtjeva je zelena, zaglavlja su narančasta, a tijelo poruke plavo.
Zahtjev preglednika:
Domaćin: webgyry.info
Kolačić: wp-postavke
Veza: Keep-alive
U sljedećem primjeru tijelo poruke već postoji.
Odgovor poslužitelja:
Vrsta sadržaja: tekst/html; skup znakova=UTF-8
Transfer-Encoding: chunked
Veza: Keep-alive
Keep-Alive: timeout=5
X-Pingback: //webgyry.info/xmlrpc.php
To su poruke koje se razmjenjuju između klijenta i poslužitelja putem HTTP-a.
Usput, želite li saznati ima li smisla neki element na vašoj web stranici koristeći "ciljeve" Yandex Metrics i Google Analytics?
Uklonite ono što ne radi, dodajte ono što radi i udvostručite prihod.
Tečaj o postavljanju ciljeva Yandex Metrice..
Tečaj o postavljanju Google Analytics ciljeva..
HTTP klijent šalje zahtjev poslužitelju u obliku poruke zahtjeva, koja ima sljedeći format:
- Niz upita (obavezno)
- Naslov (neobavezni element)
- Prazan niz (obavezno)
- Tijelo poruke (neobavezni element)
Pogledajmo svaki od ovih elemenata zasebno.
Niz upita
Redak zahtjeva počinje tokenom metode, nakon čega slijedi URI zahtjeva i verzija protokola. Elementi su međusobno odvojeni razmacima:
Pogledajmo ovaj element detaljnije.
Metoda zahtjeva
Ovaj element specificira metodu koja bi se trebala pozvati na strani poslužitelja na navedenom URI-ju.
Postoji osam metoda u HTTP-u:
- GLAVA
Koristi se za dobivanje statusa i niza zaglavlja s poslužitelja prema URI-ju. Ne mijenja podatke. - DOBITI
Koristi se za primanje podataka s poslužitelja na navedenom URI-ju. Ne mijenja podatke. - POST
Koristi se za slanje podataka na poslužitelj (kao što su informacije o razvojnom programeru itd.) pomoću HTML obrazaca. - STAVITI
Zamjenjuje sve prethodne podatke na resursu novim učitanim podacima. - IZBRISATI
Briše sve trenutne podatke o resursu određenom URI-jem. - SPOJITI
Uspostavlja tunelsku vezu s poslužiteljem na navedenom URI-ju. - OPCIJE
Opisuje svojstva veze za navedeni resurs. - TRAG
Pruža poruku koja sadrži povratni trag lokacije resursa navedenog u URI-ju.
URI zahtjeva
URI (Uniform Resource Identifier) je identifikator resursa na koji se šalje zahtjev. Sljedeći je najčešće korišteni URI format:
‘*’ koristi se kada se HTTP zahtjev ne odnosi na određeni resurs, već na poslužitelj. Koristi se samo kada se metoda ne mora primijeniti na resurs. Na primjer,
apsolutniURI koristi se kada se HTTP zahtjev postavi na proxy. Od proxyja se traži da proslijedi zahtjev iz dostupne predmemorije i vraća odgovor. Na primjer:
apsolutni_put | izvor najčešće korišteni.
Učenje rada s GET i POST zahtjevima
Zahtijeva se određeni resurs na određenom poslužitelju. Na primjer, klijent želi primiti resurs od poslužitelja preko porta 80. Adresa resursa je “www.proselyte.net” i šalje sljedeći zahtjev:
Polja zaglavlja upita
Polja zaglavlja omogućuju klijentu da poslužitelju proslijedi dodatne informacije o zahtjevu i sebi. Ova polja djeluju kao modifikatori upita.
Ispod je popis najvažnijih polja zaglavlja koja se mogu koristiti:
- Prihvati skup znakova
- Prihvati-Kodiranje
- Prihvati-Jezik
- Autorizacija
- Očekivati
- Ako-podudaranje
- Ako-Modificirano-Od
- Ako-nema-podudaranja
- Ako-raspon
- Ako-Nemodificirano-Od
- Raspon
- Preporuka
- Korisnički agent
Ako želimo implementirati vlastiti klijent i vlastiti web poslužitelj, tada možemo kreirati vlastita polja zaglavlja.
Primjer HTTP zahtjeva
Ovo zaključuje našu studiju HTTP zahtjeva.
U sljedećem članku ćemo pogledati HTTP odgovore.
Jedan od načina na koji možete poslati HTTP zahtjev poslužitelju je metoda GET. Ova metoda je najčešća i zahtjevi prema poslužitelju najčešće se javljaju pomoću nje.
Najlakši način za izradu GET zahtjeva je da upišete URL u adresnu traku svog preglednika.
Preglednik će poslužitelju poslati otprilike sljedeće informacije:
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: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Jezik prihvaćanja: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Kolačić: wp-postavke
Veza: Keep-alive
Zahtjev se sastoji iz dva dijela:
1. Linija zahtjeva
2. Zaglavlja poruka
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 poslužitelj.
Razlika između GET i POST metoda
To se može učiniti pomoću posebnih GET parametara.
Da biste zahtjevu dodali GET parametre, trebate dodati “?” na kraju URL-a. a nakon toga ih počnite pitati prema sljedećem pravilu:
naziv_parametra1=vrijednost_parametra1& naziv_parametra2=vrijednost_parametra2&…
Razdjelnik između parametara je znak “&”.
Na primjer, ako želimo prenijeti dvije vrijednosti na poslužitelj, korisničko ime i njegovu dob, to se može učiniti pomoću sljedećeg retka:
http://site.ru/page.php?name=dima&age=27
Kada se ovaj zahtjev izvrši, podaci završavaju u takozvanoj varijabli okoline QUERY_STRING, iz koje se mogu dohvatiti na poslužitelju pomoću web programskog jezika na strani poslužitelja.
Evo primjera kako se to može učiniti u PHP-u.
echo "Vaše ime: " . $_GET["ime"] . "
»;
echo "Vaše godine: " . $_GET["dob"] . "
»;
?>
Konstrukcija $_GET[“parameter_name”] omogućuje prikaz vrijednosti proslijeđenog parametra.
Kao rezultat izvršavanja ovog koda u pregledniku, prikazat će se sljedeće:
Vaše ime: dima
Vaše godine: 27
Također postavljamo zahtjev poslužitelju koristeći GET metodu.