Utilizarea metodelor GET și POST în PHP poate fi cu greu supraestimată, deoarece aceste metode se găsesc pe aproape fiecare site. Înainte de a studia materialul descris mai jos, vă sfătuiesc să vă familiarizați cu eticheta html
elemente de formă
Formularul are atribute, le voi enumera pe cele mai comune:
Să creăm un formular:
elemente de formă
Ca fișier handler, am pus fișierul test.php pentru că în ea scriu exemple pentru tine. Am setat metoda de trimitere să posteze deoarece aceste metode sunt folosite în 99,9% din cazuri. Am dat și formei noastre un nume - formă
Acum să ne aruncăm în lumea elementelor de formă. Primul lucru pe care trebuie să-l înțelegeți este că aproape toate elementele sunt etichete. diferența este doar în atribut tip aceste etichete. Permiteți-mi să enumerez elementele de formular utilizate:
Sunt sigur că ați întâlnit astfel de domenii de mai multe ori, așa că aici, cum se spune: „fără comentarii”
Acum să facem un mic chestionar de instruire, cu care vom lucra în continuare. Sarcina noastră este să alcătuim un mic chestionar care să ne spună numele persoanei care l-a completat, sexul, din ce țară este, culoarea preferată și un câmp de text în care utilizatorul poate adăuga ceva despre el însuși. asta am facut:
Numele dvs. de familie Nume Patronimic:
Genul tau:
M
F
Din ce tara esti
Culori preferate:
Negru:
Roșu:
Alb:
Un alt:
Despre mine:
Rețineți că aproape fiecare etichetă are un atribut valoare pentru ce este? Conține datele pe care urmează să le transferați pe o altă pagină. Sper sa fie clar
Acum, dacă rulăm acest cod într-un browser, vom vedea următoarele:
Am folosit atributul de pe formular acțiune cu sens test.php asta înseamnă, după cum am spus, că datele din formular vor fi transferate în fișierul test.php.
Solicitare POST
Acum să scriem un cod php care ne va permite să vedem informațiile pe care le-am introdus. Unde sunt stocate datele? În cazul unei solicitări de obținere, datele noastre se aflau în variabila globală $_GET[""]. Cu o solicitare post, datele vor fi stocate în variabila globală $_POST[""]. Între paranteze pătrate, trebuie să scrieți, ca și în cazul variabilei globale get, un identificator. Întrebarea este, de unde pot obține acest identificator? De aceea avem nevoie de atributul nume pe elementele formularului! Aceste nume sunt cele care servesc drept cheie în tabloul post global. Ei bine, să începem să descriem scriptul:
if(isset($_POST["trimite"])) (
echo "Nume: ".$_POST["fio"]."
";
echo „Sex: „.$_POST[„sex”]”.
";
echo "Țara de reședință: ".$_POST["oraș"]."
";
Echo „Culoare preferată(i):
";
echo $_POST["culoarea_1"]."
";
echo $_POST["culoarea_2"]."
";
echo $_POST["culoarea_3"]."
";
echo $_POST["culoarea_4"]."
";
echo "Despre mine: ".$_POST["despre"]."
";
}
?>
Condiția if pe care am scris-o spune: Dacă variabila globală $_POST["submit"] există, atunci afișăm datele pe ecran. Această variabilă globală este creată dacă am dat clic pe butonul de trimitere, motiv pentru care în acest exemplu avem nevoie de atributul name de pe butonul. S-ar putea să vă întrebați de ce atributul nume al butonului este opțional? Totul este destul de simplu. De obicei, programatorul nu monitorizează apăsarea butonului, ci monitorizează datele trimise. Pentru funcționarea corectă, de exemplu, un formular de contact, este necesar să urmăriți nu apăsarea unui buton, ci corectitudinea introducerii informațiilor și să aflați dacă aceste informații au fost introduse deloc. În exemplul nostru, nu am verificat datele trimise, ci pur și simplu am urmărit clicul butonului, pentru a simplifica exemplul... Iată ce am primit:
Concluzie
Ei bine, pentru astăzi am analizat două metode de transfer de date între scripturi și ne-am familiarizat și cu formularele la galop. Sper din tot sufletul să vă fie de folos această informație. Dacă aveți întrebări sau gânduri, scrieți comentarii. Succes, asta-i tot pentru azi!
P.S.: Vrei ca jocurile pe calculator să devină și mai realiste? directx 11 pentru Windows 7 pe care îl puteți descărca gratuit pe Windows în! Bucurați-vă de o grafică minunată!
Această postare este un răspuns la o întrebare pusă într-un comentariu la unul dintre articolele mele.
În acest articol, vreau să vă spun care sunt metodele GET/POST/PUT/DELETE și alte metode HTTP, pentru ce au fost inventate și cum să le folosiți în conformitate cu REST.
http
Deci, care este unul dintre principalele protocoale ale Internetului? Voi trimite pedanți la RFC2616, iar restul îi voi spune într-un mod uman :)Acest protocol descrie interacțiunea dintre două computere (client și server), construită pe baza unor mesaje numite cerere (Solicitare) și răspuns (Răspuns). Fiecare mesaj este format din trei părți: linia de început, antete și corp. În acest caz, este necesară doar linia de pornire.
Liniile de început pentru cerere și răspuns au un format diferit - ne interesează doar linia de început a cererii, care arată astfel:
METODA URI http/ VERSIUNE ,
Acolo unde METHOD este doar metoda de solicitare HTTP, URI este identificatorul resursei, VERSION este versiunea protocolului (versiunea 1.1 este relevantă în prezent).
Anteturile sunt un set de perechi nume-valoare separate prin două puncte. În anteturi sunt transmise diverse informații de serviciu: codificarea mesajului, numele și versiunea browserului, adresa de la care a venit clientul (Referrer) și așa mai departe.
Corpul mesajului este de fapt datele transmise. În răspuns, datele transmise, de regulă, sunt pagina html solicitată de browser, iar în cerere, de exemplu, în corpul mesajului, se transmite conținutul fișierelor încărcate pe server. Dar, de regulă, nu există niciun corp de mesaj în cerere.
Exemplu de interacțiune HTTP
Luați în considerare un exemplu.Anchetă:
GET /index.php HTTP/1.1 Gazdă: example.com Agent utilizator: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/html Conexiune: închide
Prima linie este șirul de interogare, restul sunt anteturi; corpul mesajului lipsește
Răspuns:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Language: ru Content-Type: text/html; charset=utf-8 Lungimea conținutului: 1234 Conexiune: închidere... PAGINA HTML ÎNSĂȘI...
Resurse și Metode
Să revenim la șirul de interogare de început și să ne amintim că acesta conține un astfel de parametru ca URI. Aceasta înseamnă Uniform Resource Identifier - un identificator uniform de resursă. O resursă este, de regulă, un fișier de pe server (un exemplu de URI în acest caz este „/styles.css”), dar, în general, orice obiect abstract poate fi și o resursă („/blogs/webdev/” - indică „Dezvoltarea web” și nu pe un fișier anume).Tipul de cerere HTTP (numit și metoda HTTP) îi spune serverului ce acțiune dorim să facem asupra resursei. Inițial (la începutul anilor 90) se presupunea că clientul își putea dori doar un singur lucru de la o resursă - să o primească, dar acum poți crea postări, edita un profil, șterge mesaje și multe altele folosind protocolul HTTP. Și este dificil să combinați aceste acțiuni cu termenul de „primire”.
Pentru a diferenția acțiunile cu resurse la nivelul metodelor HTTP, au fost inventate următoarele opțiuni:
- GET - obținerea unei resurse
- POST - crearea de resurse
- PUT - actualizare de resurse
- DELETE - ștergerea unei resurse
REST intră în joc
REST (REpresentational State Transfer) - acest termen a fost introdus în 2000 de Roy Fielding - unul dintre dezvoltatorii protocolului HTTP - ca denumirea unui grup de principii pentru construirea de aplicații web. În general, REST acoperă o zonă mai largă decât HTTP - poate fi folosit în alte rețele cu alte protocoale. REST descrie principiile interacțiunii dintre client și server, pe baza conceptelor de „resursă” și „verb” (le poți înțelege ca subiect și predicat). În cazul HTTP, resursa este definită de URI-ul său, iar verbul este metoda HTTP.REST propune să nu mai folosiți același URI pentru resurse diferite (adică adresele a două articole diferite precum /index.php?article_id=10 și /index.php?article_id=20 - aceasta nu este o modalitate REST) și să folosiți diferite Metode HTTP pentru diferite acțiuni. Adică, o aplicație web scrisă folosind abordarea REST va șterge o resursă atunci când este accesată cu metoda DELETE HTTP (desigur, asta nu înseamnă că este necesar să se acorde posibilitatea de a șterge totul și pe toată lumea, dar orice cererea de ștergere a aplicației trebuie să utilizeze metoda DELETE HTTP).
REST oferă programatorilor posibilitatea de a scrie aplicații web standardizate și puțin mai frumoase decât oricând. Folosind REST, URI-ul pentru adăugarea unui nou utilizator nu va fi /user.php?action=create (metoda GET/POST), ci pur și simplu /user.php (strict metoda POST).
Ca rezultat, combinând specificația HTTP existentă și abordarea REST, diferite metode HTTP au în sfârșit sens. GET - returnează o resursă, POST - creează una nouă, PUT - actualizează una existentă, DELETE - o șterge.
Probleme?
Da, există o mică problemă cu aplicarea REST în practică. Această problemă se numește HTML.Solicitările PUT/DELETE pot fi trimise prin XMLHttpRequest, contactând manual serverul (să zicem, prin curl sau chiar prin telnet), dar nu puteți face un formular HTML care trimite o cerere PUT/DELETE cu drepturi depline.
Faptul este că specificația HTML nu vă permite să creați formulare care trimit date altfel decât prin GET sau POST. Prin urmare, pentru funcționarea normală cu alte metode, este necesar să le imitați artificial. De exemplu, în Rack (mecanismul pe baza căruia Ruby interacționează cu un server web; Rails, Merb și alte cadre Ruby sunt realizate folosind Rack), puteți adăuga un câmp ascuns numit „_method” în formular și specificați numele metodei ca valoare (de exemplu, „PUT”) - în acest caz, va fi trimisă o solicitare POST, dar Rack va putea pretinde că a primit un PUT, nu un POST.
Această postare are scopul de a explica modul în care datele sunt transmise prin Internet folosind cele două metode principale: GET și POST. L-am scris ca o completare la instructiunile pentru generatorul de lucru in ture pentru cei care nu sunt interesati de detalii ☺.
Accesați următoarea adresă (aceasta este pentru o explicație vizuală): http://calendarin.net/calendar.php?year=2016 Atenție la bara de adrese a browserului: calendarin.net/calendar.php ?an=2016 Fișierul principal este denumit, urmat de un semn de întrebare (?) și de un parametru „an” cu valoarea „2016”. Deci, tot ce urmează semnul întrebării este cererea GET. Totul este simplu. Pentru a trece mai mult de un parametru, aceștia trebuie despărțiți de un ampersand (&). Exemplu: calendarin.net/calendar.php ?year=2016&display=work-days-and-days-off
Fișierul principal este în continuare denumit, urmat de un semn de întrebare (?), apoi de un parametru „an” cu valoarea „2016”, apoi de un ampersand (&), apoi de un parametru de „afișare” cu o valoare de „work- zile şi zile libere”.
Parametrii GET pot fi modificați direct în bara de adrese a browserului. De exemplu, schimbarea valorii „2016” în „2017” și apăsarea tastei vă va duce la calendarul pentru 2017.
Acesta este un transfer de date într-un mod ascuns (adresa paginii nu se schimbă); adică poți vedea ce a fost transferat doar cu ajutorul unui program (script). De exemplu, în următorul instrument de numărare a caracterelor din text, datele inițiale sunt transmise prin metoda POST: http://usefulonlinetools.com/free/character-counter.php
Dacă aveți întrebări, comentarii și e-mailul meu vă stă la dispoziție.
Pe lângă metoda GET, despre care am discutat în nota anterioară, există o altă metodă de trimitere a unei cereri prin protocolul HTTP - metoda POST. Metoda POST este, de asemenea, foarte des folosită în practică.
Dacă, pentru a accesa serverul folosind metoda GET, a fost suficient să introducem o cerere în URL, atunci în metoda POST totul funcționează după un alt principiu.
Pentru a efectua acest tip de solicitare, trebuie să facem clic pe butonul cu atributul type="submit", care se află pe pagina web. Rețineți că acest buton se află în element
Luați în considerare acest cod HTML:
Dacă utilizatorul introduce ceva text în câmpul de text și face clic pe butonul „Trimite”, atunci variabila text va fi trimisă la server cu valoarea conținutului introdus de utilizator.
Cereri POST și GET în termeni simpli
Această variabilă va fi trimisă prin metoda POST.
Daca scrii in forma asa:
Datele vor fi trimise folosind metoda GET.
Dacă, în cazul unei solicitări GET, cantitatea de date pe care le-am putea transfera a fost limitată de lungimea barei de adrese a browserului, atunci în cazul unei solicitări POST, nu există o astfel de limită și putem transfera sume semnificative De informații.
O altă diferență între metoda POST și metoda GET este că metoda POST ascunde toate variabilele și valorile lor transmise în corpul său (Entity-Body). În cazul metodei GET, acestea au fost stocate în șirul de solicitare (Request-URI).
Iată un exemplu de solicitare făcută folosind metoda POST:
POST / HTTP/1.0\r\n
Gazdă: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: venit=1\r\n
Tip de conținut: application/x-www-form-urlencoded\r\n
Lungimea conținutului: 35\r\n
\r\n
login=Dima&parola=12345
Astfel, atunci când transmiteți date folosind metoda POST, va fi mult mai dificil pentru un atacator să le intercepteze, deoarece sunt ascunse din vedere directă, astfel încât metoda POST de transfer de date este considerată o metodă mai sigură.
În plus, folosind metoda POST, puteți transfera nu numai text, ci și date multimedia (imagini, audio, video). Există un parametru special Content-Type care specifică tipul de informații care trebuie trimise.
Și în final, pentru a obține datele care au fost transmise prin această metodă pe server, se folosește variabila POST.
Iată un exemplu de procesare în PHP:
echo $_POST['text'];
?>
În ultima notă, am decis că browserul (clientul) trimite cereri HTTP către server, iar serverul trimite răspunsuri HTTP către client. Aceste cereri și răspunsuri sunt făcute după anumite reguli. Există ceva de genul sintaxă, cum și în ce ordine ar trebui scrisă. Trebuie să existe o structură strict definită.
Să aruncăm o privire mai atentă asupra acestei structuri, care construiește cereri și răspunsuri în protocolul HTTP.
O solicitare HTTP constă din trei părți principale, care apar în ordinea enumerată mai jos. Între anteturi și corpul mesajului există o linie goală (ca separator), aceasta reprezintă caracterul newline.
Șir gol (separator)
Postați și primiți cereri, care este diferența dintre ele și care este mai bună și în ce scopuri?
Corpul mesajului (Entity Body) – parametru opțional
Șir de interogare- Specifică metoda de transfer, URL-ul de accesat și versiunea protocolului HTTP.
Titluri– descrie corpul mesajului, transmite diferiți parametri și alte informații și informații.
Conținutul mesajului- acestea sunt datele în sine care sunt transmise în cerere. Corpul mesajului este opțional și poate fi omis.
Când primim o solicitare de răspuns de la server, corpul mesajului este cel mai adesea conținutul paginii web. Dar, atunci când facem cereri către server, poate fi uneori prezent și, de exemplu, atunci când transferăm datele pe care le-am completat în formularul de feedback către server.
Mai detaliat, fiecare element al cererii, îl vom lua în considerare în notele următoare.
Să luăm, de exemplu, o cerere reală către server. Am evidențiat fiecare parte a cererii cu o culoare diferită: șirul de interogare este verde, anteturile sunt portocalii, iar corpul mesajului este albastru.
Solicitare browser:
Gazdă: webgyry.info
Cookie: wp-settings
Conexiune: păstrați-vă în viață
În exemplul următor, corpul mesajului este deja prezent.
Răspunsul serverului:
Tip de conținut: text/html; set de caractere=UTF-8
Transfer-Codificare: fragmentat
Conexiune: păstrați-vă în viață
Păstrați în viață: timeout=5
X-Pingback: //webgyry.info/xmlrpc.php
Acestea sunt mesajele schimbate între client și server prin protocolul HTTP.
Apropo, doriți să știți dacă are vreun sens un element de pe site-ul dvs. folosind „obiectivele” Yandex Metrics și Google Analytics?
Eliminați ceea ce nu funcționează, adăugați ceea ce funcționează și dublați-vă veniturile.
Curs de stabilire a obiectivelor Yandex Metrics.
Curs de stabilire a obiectivelor Google Analytics.
Clientul HTTP trimite o cerere către server sub forma unui mesaj de solicitare, care are următorul format:
- Șir de interogare (element obligatoriu)
- Titlu (element opțional)
- Șir gol (element obligatoriu)
- Corpul mesajului (element opțional)
Să luăm în considerare fiecare dintre aceste elemente separat.
Șir de interogare
Șirul de solicitare începe cu un token de metodă urmat de URI-ul cererii și versiunea protocolului. Elementele sunt separate unele de altele prin spații:
Să ne uităm la acest element mai detaliat.
Metoda de solicitare
Acest element specifică metoda care trebuie invocată pe partea serverului la URI-ul specificat.
Există opt metode în HTTP:
- CAP
Folosit pentru a obține șirul de stare și titlul de la server prin URI. Nu modifică datele. - OBȚINE
Folosit pentru a primi date de la server la URI-ul specificat. Nu modifică datele. - POST
Folosit pentru a trimite date către server (cum ar fi informații despre dezvoltator etc.) folosind formulare HTML. - A PUNE
Înlocuiește toate datele anterioare de pe resursă cu datele nou încărcate. - ȘTERGE
Îndepărtează toate datele curente de pe resursa specificată de URI. - CONECTAȚI
Stabilește o conexiune tunel la server la URI-ul specificat. - OPȚIUNI
Descrie proprietățile conexiunii pentru resursa specificată. - URMĂ
Furnizează un mesaj care conține o urmărire inversă a locației resursei specificate în URI.
Solicitare URI
URI (Uniform Resource Identifier) este identificatorul resursei către care este trimisă cererea. Următorul este cel mai comun format URI:
‘*’ utilizat atunci când cererea HTTP nu este pentru o anumită resursă, ci pentru un server. Folosit numai atunci când metoda nu trebuie aplicată la resursă. De exemplu,
absoluteURI utilizat atunci când se face o solicitare HTTP către un proxy. Proxy-ului i se cere să transmită cererea din memoria cache disponibilă și returnează un răspuns. De exemplu:
cale_absolută | o sursă folosit cel mai frecvent.
Învățați să lucrați cu solicitări GET și POST
Este solicitată o resursă specifică a unui anumit server. De exemplu, un client dorește să obțină o resursă de la un server de pe portul 80. Adresa resursei este „www.proselyte.net” și trimite următoarea solicitare:
Câmpuri de antet de solicitare
Câmpurile de antet permit clientului să transmită serverului informații suplimentare despre cerere și despre sine. Aceste câmpuri acționează ca modificatori de interogare.
Mai jos este o listă cu cele mai importante câmpuri de antet care pot fi utilizate:
- Acceptați setul de caractere
- Acceptați codificarea
- Accept-Limba
- Autorizare
- Aştepta
- Dacă Match
- Dacă-Modificat-De vreme ce
- Dacă-Niciunul-Se potrivește
- Dacă Range
- Dacă-Nemodificat-De vreme ce
- Gamă
- Referitor
- Agent utilizator
Dacă dorim să implementăm propriul nostru client și propriul nostru server web, atunci ne putem crea propriile câmpuri de antet.
Exemplu de solicitare HTTP
Aceasta încheie studiul nostru despre solicitările HTTP.
În articolul următor, ne vom uita la răspunsurile HTTP.
O modalitate de a trimite o cerere HTTP către un server este utilizarea metodei GET. Această metodă este cea mai comună și solicitările către server apar cel mai adesea folosind ea.
Cel mai simplu mod de a crea o solicitare GET este să tastați adresa URL în bara de adrese a browserului.
Browserul va trimite următoarele informații către server:
GET/HTTP/1.1
Gazdă: webgyry.info
Agent utilizator: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Limba de acceptare: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Acceptare-Codificare: gzip, deflate
Cookie: wp-settings
Conexiune: păstrați-vă în viață
Cererea are două părți:
1. Linie de solicitare
2. Anteturi (anteturi de mesaje)
Rețineți că o solicitare GET nu are un corp de mesaj. Dar, asta nu înseamnă că cu ajutorul lui nu putem transfera nicio informație pe server.
Diferența dintre metodele GET și POST
Acest lucru se poate face folosind parametri speciali GET.
Pentru a adăuga parametri GET la o solicitare, trebuie să puneți un „?” la sfârșitul adresei URL. și după aceasta începeți să le întrebați după următoarea regulă:
parameter_name1=parameter_value1& parameter_name2=parameter_value2&...
Separatorul dintre parametri este semnul „&”.
De exemplu, dacă dorim să trimitem două valori către server, numele de utilizator și vârsta, atunci acest lucru se poate face cu următoarea linie:
http://site.ru/page.php?name=dima&age=27
Când această interogare este executată, datele intră în așa-numita variabilă de mediu QUERY_STRING, de la care pot fi obținute pe server folosind un limbaj de programare web pe partea de server.
Iată un exemplu despre cum se poate face acest lucru în PHP.
echo „Numele tău: ” . $_GET[„nume”] . "
»;
echo "Vârsta ta este: " . $_GET[„varsta”] . "
»;
?>
Construcția $_GET["nume_parametru"] vă permite să afișați valoarea parametrului transmis.
Ca urmare a executării acestui cod în browser, veți vedea:
Numele tău: dima
Varsta ta: 27
de asemenea, facem o cerere către server folosind metoda GET.