Contacte

Obțineți și postați exemple. Atribute acțiuni și metodă. Obțineți și post metode. Alegerea dintre obținerea și postarea

Resursele web moderne nu oferă doar informații vizitatorului, ci și interacționează cu el. Pentru a interacționa cu utilizatorul, trebuie să primiți câteva informații de la acesta. Există mai multe metode de obținere a datelor, metode foarte comune. Obține. și POST.. Și respectiv B. PHP. Există suport pentru aceste metode de transfer de date Obține. și POST.. Să vedem cum funcționează aceste metode.
Obțineți metodaDate oBȚINE. Transmise prin adăugarea acestora la adresa URL a scenariului numit destinat procesării informațiilor primite. Pentru explicații aceasta metoda Formați adresa URL de resurse din bara de adrese din bara de adrese și adăugați mai întâi semnul de întrebare (?), Apoi numărul Num \u003d 10. de exemplu

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


Daca ai server local., atunci, de obicei, domeniul va fi localhost, iar apoi intrarea anterioară va arăta

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


În acest caz, transmitem parametrul num la 10. Pentru a adăuga următorii parametri, scenariul trebuie utilizat - ampersant (&), de exemplu

http: //ddomure.ru/script.php? Num \u003d 10 & Type \u003d New & V \u003d Text


În acest caz, am transferat trei parametri la script: Num cu o valoare de 10, tastați cu valoarea "nouă" și V cu valoarea "Text".
Pentru a obține acești parametri în script, trebuie să utilizați o matrice încorporată. $ _Get. $ _Get ["Num"], $ _get ["tip"], $ _ obține ["v"]. Aceste elemente de matrice vor conține valorile parametrilor transmis. Pentru a demonstra acest exemplu, creați un fișier script.php după cum urmează.



Verificarea metodei de obținere în PHP


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




Și acum apelați acest fișier în browser

http: //at/script.php? Num \u003d 10 & Type \u003d New & V \u003d Text


Și veți vedea parametrii transmis în fereastra browserului. Dar dacă numiți acest fișier fără parametri suplimentari http: ////script.php, veți vedea erori care vor da un interpret PHP.Că nu există astfel de elemente ale matricei $ _Get. Verificarea acestor date de la utilizator nu poate fi evidențiată nici un articol, deci în acest articol nu voi atinge acest moment.
După cum ați înțeles probabil, pentru a forța utilizatorul să formeze datele din bara de adrese nu este foarte bun și complet incomod. Prin urmare, pentru a primi date de la utilizator, trebuie să utilizați formularul HTML. Scrieți o formă HTML simplă.


Introduceți numărul

Ai un calculator?

Comentariul tau:





Am comentat formularul creat. Formularele sunt create de eticheta formularului. Câmpurile de formular sunt create prin intrare, selectați, tag-uri textarea (puteți citi mai mult). În eticheta formularului, adresa URL a scriptului este specificată în atributul de acțiune, care va primi aceste formulare. În cazul nostru, am specificat deja fișierul Script.php deja existent. Atributul de metodă Setează metoda trimiterea datelor. Am indicat metoda Obține.. Acum știm ce fișier vor fi transmise aceste fișiere și în ce mod, rămâne să dau seama unde să le caute?!
Aceste date de formular vor fi transferate în browserul de resurse web prin adăugarea acestora la adresa URL: va fi mai întâi o marcă de întrebare (?), Apoi parametrii sunt separați de ampersant (&). Numele parametrului va fi luat din atributul de nume, care trebuie să fie scris din orice câmp de câmp. Valoarea parametrului va depinde de tipul de câmp. Dacă câmpul este textual, textul introdus de utilizator va fi utilizatorul. Dacă câmpul va fi o listă, un grup de comutatoare sau steaguri, atunci valoarea valorii valorii elementului selectat va fi valoarea parametrului. Voi explica despre exemplul formei noastre. Dacă utilizatorul intră în numărul 10 din câmpul de introducere, atunci numele parametrului va fi num (valoarea atributului de nume al etichetei de intrare), iar valoarea va fi valoarea (numărul introdus de utilizator). În consecință, browserul va forma o pereche de "Num \u003d 10". Dacă utilizatorul din listă selectează opțiunea "Da", atunci numele parametrului va fi tip (atributul valoric al etichetei de nume Selectați), iar valoarea va fi valoarea (valoarea valorii opțiunii de tag de valoare ). În consecință, browserul va forma o pereche de "tip \u003d da".
Acum, acest formular va fi plasat pe pagina Forma.php.



Formularul de transfer de date utilizând GET și PHP



Introduceți numărul

Ai un calculator?

Comentariul tau:









Introduceți orice valori în câmpurile formular și faceți clic pe butonul "Trimiteți". După apăsarea butonului browserului, deschideți o altă pagină (Script.php) și vor fi afișate datele pe care le-ați introdus în fereastra browserului. Cred că este clar de ce: browserul va transfera date la script-ul script.php și în script, aceste date vor fi procesate și afișate.
Metoda postală.Acum, să ne uităm la modul în care funcționează metoda POST..
Pentru a trimite aceste metode POST. Trebuie să utilizați formularul HTML. Cum ne amintim că metoda formei este responsabilă pentru metoda de trimitere a formei de date a formularului. Prin urmare, trebuie să specificați valoarea după atributul metodă. În caz contrar, forma poate fi aceeași ca și pentru metoda de obținere. Vom schimba forma noastră pe care am folosit-o deja pentru a transfera date la metoda GET pentru transmiterea prin metoda post.


Introduceți numărul

Ai un calculator?

Comentariul tau:





După cum puteți vedea, forma rămâne aceeași cu excepția atributelor metodei și a acțiunii. Acum, datele vor fi transmise scriptului Script_Post.php. Poziționați formularul pe pagina Forma_post.php.



Formularul de transfer de date Post și PHP



Introduceți numărul

Ai un calculator?

Comentariul tau:









Acum trebuie să scrieți un script care să proceseze datele de formă.
Pentru a obține o metodă transmisă în scriptul de date POST. trebuie să utilizați o matrice încorporată $ _Post.. Cheile acestei matrice vor fi numele parametrilor. În cazul nostru, trebuie să utilizați $ _Post ["Num"], $ _post ["tip"], $ _ Post ["v"]. Aceste elemente de matrice vor conține valorile datelor transmise. Pe măsură ce vedeți diferența de la utilizarea metodei de obținere, este exprimată numai numai în utilizarea unui matrice $ _post. Prin urmare, nu vom fi dificil să scriem un fișier script_post.php:



Verificarea metodei post în PHP


eCHO ($ _post ["Num"]. "
");
echo ($ _post ["tip"]. "
");
ecou ($ _post ["v"]);
?>




Acum deschideți fișierul forma_post.php din browser. Introduceți câteva date în câmpul Form și apăsați butonul "Trimiteți". Acum, probabil, ați observat diferența dintre metoda postală de la primire - aceste formulare nu au apărut în bara de adrese a browserului. Metoda de date POST. Nu puteți trece prin bara de adrese a browserului. Această diferență esențială trebuie amintită.
ÎN PHP. În independență, ce date de metodă au fost trimise - prin metoda postală sau metoda GET - pentru a obține date utilizând o matrice $ _request. Compararea metodelor de obținere și postCând utilizați metoda de obținere, datele sunt transmise prin adăugarea la adresa URL. Astfel, acestea vor fi vizibile pentru utilizator că în ceea ce privește siguranța nu este întotdeauna bun. De asemenea, cantitatea maximă de date transmise va depinde de browser - de la numărul maxim admisibil al caracterelor barei de adrese a browserului.
Când utilizați metoda postală, datele nu vor fi vizibile utilizatorului (nu sunt afișate în bara de adrese a browserului). Și, prin urmare, ele sunt mai protejate și, prin urmare, prelucrarea programului aceste date este mai protejată în ceea ce privește siguranța. De asemenea, cantitatea de date transmise este practic limitată.
Când alegeți o modalitate de transfer de date, trebuie să luați în considerare caracteristicile date și opriți la cea mai acceptabilă metodă.

În comun între ele, faptul că lucrează în mod egal. Diferența dintre ele este din punct de vedere tehnic nr. Dar există diferențe ideologice.

Voi spune despre ele în contextul PHP. Rețineți că protocolul HTTP la PHP are o atitudine indirectă, deoarece a fost creată pentru a schimba paginile HTML și PHP extinde pur și simplu posibilitățile și cealaltă.

Obțineți o interogare este utilizată pentru a obține date un post pentru a trimite. (Vă reamintesc că lucrați din punct de vedere tehnic în mod egal).

Prin urmare, în contextul PHP, bazându-se pe această ideologie a fost realizată după cum urmează:
1. De fiecare dată când PHP este lansat, arrays SuperGlobal ($ _Get, $ _post) sunt create implicit.
2. Dacă există un semn de întrebare în șirul de interogare (?). Atunci totul este considerat după ea parametri Obțineți cereri Acestea sunt prezentate în formatul "cheie" \u003d "valoarea" și un semn ampersand (&) este folosit ca separator
Exemplu:
Get /index.php?name\u003dandrey&surname\u003dhalkin.
Acesta este un șir de interogare, aici 2 parametri. Acești parametri vor cădea în matricea $ _GET.
3. $ _post este umplut cu un alt mod. Conținutul acestei matrice este umplut de la "antetele de solicitare". Asta este, din loc ascuns de ochi în mod explicit. Întreaga rutină pentru a crea astfel de titluri are un browser. Deși uneori ceva este editat în titluri în Manual.

Cel mai adesea, cererea poștală este utilizată în forme (pentru a trimite date).

De exemplu, avem un formular pentru a vă conecta la 2 câmpuri de conectare și parolă.

Imaginați-vă că folosim metoda de obținere. Apoi, atunci când trimiteți o formă, ne întoarcem la următoarea adresă /login.php?login\u003dandrey&password\u003d123 sunt de acord că acest lucru nu este sigur să transmită aceste informații. Oricine vă poate deschide browserul și începe să introducă adresa site-ului. Vă poate vedea parolele și autentificarea.

Dar dacă am specificat prin metoda post, atunci vom primi următoarea solicitare:
Post /login.php (Login \u003d Andrey & Parola \u003d 123) Ce este în paranteze ar fi ascunse și nu sunt salvate în browser.

În general, rezumând:
Obțineți o anumită pagină într-un anumit formular (sortarea, pagina curentă din blog, șirul de căutare etc.).
Post - pentru datele Mandrel care nu afectează afișarea paginii, în modul în care aceste date afectează doar rezultatul executării scriptului (login-uri, parole, numere de carduri de credit, mesaje etc.).

Si inca una vești bune ele pot fi combinate, de exemplu
Post /index.php?page\u003dlogin (Login \u003d Andrey & Parola \u003d 123) Cred că am explicat deja suficient că se pare și ce parametri la care se va cădea.

Metodele de obținere și poștă în HTTP și HTTPS sunt cele două metode cele mai populare utilizate pentru a transfera date de la client la server utilizând protocolul HTTP (Protocolul de transmisie HyperText). Iar obținerea și postul pot fi folosite pentru a trimite o cerere și a primi un răspuns, dar există o diferență semnificativă între ele.

Diferența dintre cererile de obținere și post în HTTP sau HTTPS este o întrebare populară cu privire la fiecare interviu de programare web. Deoarece HTML nu depinde de tehnologia serverului web, cum ar fi Java, ASP sau PHP și HTTP este principalul protocol din spațiul de Internet, este imposibil să ignorăm în mod clar importanța înțelegerii metodelor de obținere și post. În acest articol, vom analiza ce este metoda GET HTTP, care este metoda Post HTTP, când să utilizați una sau o altă solicitare și care este diferența dintre ele. Vom analiza separat fiecare concept.

Ce este HTML?

HTML este o limbă folosită pentru a crea pagini web. Hypertext se referă la hyperlink-uri care pot conține o pagină HTML. Limba de marcare înseamnă modul de utilizare a etichetelor pentru a determina aspectul paginii și a elementelor de pe pagină.
Mai jos sunt date un exemplu de HTMLAcest lucru este utilizat pentru a determina pagina web de bază cu titlul și un paragraf din text:



<Голова>
<Название> Techterms.com.

<Тело>

Acesta este un exemplu de paragraf din HTML.

Primul șir determină tipul de conținut conținut în document., și care sunt incluse ca un exemplu de mai sus. Antetul paginii, metadatele și legăturile către fișierele de legare sunt plasate între conținutul actual al paginii sunt între etichete. .

În ultimele decenii, rețeaua a supraviețuit numeroase schimbări, dar HTML a fost întotdeauna limba principală folosită pentru a dezvolta pagini web. Interesant, deși site-urile au devenit mai avansate și mai interactive, HTML a devenit mai ușor. Dacă comparați sursa de pagină HTML5 cu o pagină similară scrisă în HTML 4.01 sau XHTML 1.0, pe pagina HTML5 va fi mai puțin cod. Acest lucru se datorează faptului că HTML modern se bazează pe foi de stil cascadă sau JavaScript pentru a forma aproape toate elementele din interiorul paginii.

Multe site-uri web dinamice generează pagini web "în zbor" folosind limba serverului script, cum ar fi PHP sau ASP. Cu toate acestea, chiar și paginile dinamice trebuie să fie formatate folosind HTML.. Prin urmare, limbile scenariilor generează adesea un cod HTML care este trimis la browserul web.

Protocolul HTTP HyperText Transmission este conceput pentru a interacționa între clienți și servere și funcționează ca protocol de interogare-răspuns.

Browserul web poate fi un client, iar aplicația de pe computerul pe care este postat site-ul web, serverul.

Clientul (browser) trimite o solicitare HTTP către server, serverul returnează un răspuns care conține informații despre starea interogării și poate conține și conținutul solicitat.

Două metode de interogare GET și POST

Două metode frecvent utilizate pentru solicitarea-răspuns între client și server:

    Obțineți - solicită date din resursa specificată;

    Post - trimite date care urmează să fie procesate la resursa specificată.

Transferul de a obține și post literalmente înseamnă obținerea și post-procesarea.

Citiți mai multe despre HTTP

HTTP este un protocol utilizat pentru a transfera date prin Internet. Face parte din pachetul de protocol Internet și definește comenzi și servicii utilizate pentru a transmite date de pagină web.

HTTP utilizează modelul server-client. Clientul poate fi un computer de acasă, un laptop sau dispozitiv mobil. Serverul HTTP este de obicei o gazdă web cu software. Servere web, cum ar fi Apache sau IIS. Când utilizatorul primește acces la site-ul web, browserul trimite o solicitare către serverul web corespunzător și îndeplinește codul de stare HTTP. Dacă adresa URL este validă și conexiunea este furnizată, serverul va trimite pagina web în browser și fișierele conexe.

Codurile generale de stare HTTP includ:

    200 - o cerere de succes (există o pagină web);

    301 - se deplasează constant (adesea redirecționate către o nouă adresă);

    401 - Cerere neautorizată (obligatorie necesară);

    500 - eroare de server intern (frecvent cauzată de configurația incorectă a serverului).

Postați și intrați în http http

HTTP definește comenzile GET și POST care sunt utilizate pentru a procesa vizualizări de formular pe site-uri web. Comanda Conectare este utilizată pentru a facilita o conexiune securizată care este criptată utilizând SSL. Conexiunile http criptate apar prin intermediul extensiei HTTPS - HTTP destinate transferurilor de date securizate.

Adresele URL începând cu "http: //" sunt disponibile în conformitate cu protocoalele standard de transmisie HyperText și de către portul de utilizare implicit 80. URL-urile începând cu "https: //" sunt disponibile prin intermediul "https: //" conectare sigură HTTPS și adesea folosiți portul 443.

POST.

Postul este o serie inspecții de sistemefectuate de computere și alte dispozitive electronice atunci când sunt pornite. Rezultatele testului pot fi afișate pe ecran, ieșire prin LED-uri intermitente sau pur și simplu înregistrate în interior. ÎN sisteme informatice Operația post este efectuată la începutul secvenței de boot. Dacă sunt transmise toate testele, restul procesului de start va fi continuat automat.

Sisteme de operare MAC și Windows Start Postare De fiecare dată când computerul este încărcat sau repornit. Scanați verificările hardware Și asigură că procesorul, dispozitivele de memorie RAM și stocare vor funcționa corect. Dacă a apărut o eroare în timpul postării, procesul de pornire poate întrerupe sau opri complet, iar monitorul poate apărea pe PC PC Error PC-urile sunt adesea afișate pe ecranul de informații BIOS. Ele pot fi afișate ca coduri criptice, cum ar fi "08", sau ca mesaj de sistem, de exemplu, "Eroare memorie de sistem Când este compensată. " Pe Erorile Mac. Postul este adesea indicat de o grafică simplă, de exemplu, o pictogramă de folder rupt, care indică faptul că unitatea de boot nu este găsită.

Manifestări fizice

În unele cazuri, ecranul computerului nu poate chiar să pornească înainte de erorile postale. Dacă se întâmplă acest lucru, codurile de eroare pot fi transmise prin intermediul unor indicatoare LED intermitente sau semnale sonore. De exemplu, Apple Imac va juca trei tone consecutive, pentru a rezista unei pauze de cinci secunde, apoi repeta tonurile atunci cand este detectat un RAM proasta in timpul pornirii. Majoritatea PC-urilor publică, de asemenea, semnale sonore atunci când sunt detectate erorile postale, deși fiecare producător utilizează propriile coduri.

Postul este un termen destul de tehnic care este folosit numai tehnicieni de calculator in mod regulat. Cu toate acestea, aceasta este o abreviere bună, deoarece ajută la înțelegerea mai bună a mesajelor de eroare care pot apărea pe computere sau pe altele dispozitive electronice. Dacă computerul nu pornește din cauza erorii postale, puteți utiliza un alt dispozitiv pentru găsirea valorii și pentru a determina erori de pe site-ul producătorului. Apoi, puteți lua acțiunile corespunzătoare - eliminând modulul de memorie sau reinstalarea plăcii video cu echipamentul de repornire ulterior.

Obține.

Postul este, de asemenea, o metodă de transmitere a variabilelor formulare HTML. De la o pagină web la alta, fără a le afișa în bara de adrese. Metoda alternativă - obțineți, care adaugă valori către adresa URL. Cererile Post Post oferă date suplimentare de la client (browser) la server din corpul mesajului. Dimpotrivă, cererile includ toate datele necesare în adresa URL. Formularele în HTML pot folosi orice metodă, specificând metoda \u003d Post sau Metoda \u003d obțineți (implicit) în element

. Metoda specificată determină modul în care aceste forme sunt transmise serverului. Când se utilizează metoda de obținere, toate datele din formular sunt codificate în adresa URL ca parametri de coarde de interogare. Cu Post, aceste formulare apar în mesajul interogării HTTP.

Diferențe în reprezentarea formei

Metoda de interogare Post solicită un server web să primească și să stocheze date închise în corpul mesajului de interogare. Acesta este adesea folosit la descărcarea unui fișier sau la trimiterea unui formular Web completat.

Metoda de interogare HTTP: Repeste informații de pe server. Ca parte a interogării Obțineți, unele date pot fi transmise în linia de interogare URL, specificând condițiile de căutare, intervalele de date sau alte informații care definește interogarea.

În cadrul interogării postale, o cantitate arbitrară de date de orice tip poate fi trimisă la server din corpul mesajului de interogare. Câmpul antet din cererea poștală indică în mod obișnuit tipul de mesaj media Internet.

Principala diferență dintre cererile de primire și post este că acestea corespund diferitelor solicitări HTTP definite în specificațiile HTTP. Procesul de hrănire a ambelor metode începe în același mod: setul de date formular este creat de browser și este apoi codificat prin metoda specificată de atributul enctype. Pentru Metoda \u003d "Post, atributul Encype poate fi multipart / format-date sau aplicație / x-www-format-urlencodat, în timp ce pentru metoda \u003d" obține "începe numai prin aplicația / x-www-form-urlencoded. Aceste forme Setul de date este transmis apoi pe server.

Pentru a trimite un formular folosind metoda \u003d "Obțineți" un browser creează o adresă URL, luând valoarea unui atribut de acțiune și adăugarea unui set de date formular codificat utilizând tipul de conținut aplicație / x-www-format-urlencodat. Browserul procesează apoi această adresă URL, ca și cum ar fi referit la link-ul (sau, ca și cum utilizatorul a marcat adresa URL manual). Browserul împarte adresa URL din partea și recunoaște gazda, apoi trimite cererea de primire a acestei gazde cu restul adresei URL ca argument. Este important de observat că acest proces înseamnă că aceste formulare sunt limitate la codurile ASCII. O atenție deosebită trebuie acordată codificării și decodificării altor tipuri de caractere atunci când le transmiteți adresa URL în format ASCII.

Prezentarea formularului cu metoda \u003d "Post" cauzează trimiterea unei cereri poștale utilizând o valoare a atributului de acțiune și un mesaj creat în conformitate cu tipul de conținut specificat de atributul Encype.

PHP.

PHP este un HTML încorporat. Aceasta înseamnă că codul PHP poate fi introdus în pagina HTML. Codul PHP este citit sau analizat de serverul pe care se află pagina. Ieșirea funcțiilor de obținere și post în PHP pe pagină este de obicei returnată ca un cod HTML care poate fi citit de browser. Deoarece codul PHP este convertit în HTML înainte de a descărca pagina, utilizatorii nu pot vizualiza codul PHP pe pagină. Se întâmplă pHP Pagini. Suficiente pentru a accesa bazele de date și alte informații protejate.

Cea mai mare parte a sintaxei PHP este împrumutată din alte limbi, cum ar fi C, Java și Perl. Cu toate acestea, PHP are o serie de caracteristici unice și funcții speciale. Scopul acestei limbi este de a permite dezvoltatorilor web să scrie rapid și ușor pagini generate dinamic.

WordPress.

WordPress este sistem gratuit Gestionarea conținutului folosit pentru a crea și menține site-urile web. Simplitatea de utilizare și a funcțiilor unice de blogging l-au ajutat să devină cea mai populară instrument de gestionare a blogului de pe Internet.

Interfața WordPress permite oricui nu are experiență de dezvoltare web, a crea și a publica un site web. Instrumentele de blogging încorporate oferă o modalitate ușoară de a urmări mesajele individuale, vizitatorii și comentariile utilizatorilor.

În ciuda faptului că sunt disponibile mii Șabloane WordPress. Ambele pluginuri, postul de obținere a sistemului în WordPress are încă limitările sale. Deoarece acesta este un serviciu bazat pe șabloane, utilizatorul trebuie să înceapă cu un site web predeterminat și să nu creeze pagini de la zero. În plus, nu este posibilă introducerea scripturilor sau menținerea unei baze de date cu același nivel de control pe care îl oferă site-ul Web al utilizatorului.

Instrumentul POST_GET_ID () vă permite să utilizați script-uri pentru a controla elementul, deoarece are un identificator unic și când îl trimiteți sub forma unui formular prin aceste metode, lista derulantă va fi expediată cu un identificator unic care permite Scriptul pentru a observa care funcționează publicația. Ca o alternativă, poate fi trimisă o variabilă ascunsă, ceea ce va permite scenariului să vadă care publicație se referă la prezentare.

Acest post este răspunsul la întrebarea stabilită în comentariile la unul dintre articolele mele.

În articol, vreau să spun ce metode HTTP sunt luate / post / punere / ștergere și altele, pentru care au fost inventate și cum să le folosească în conformitate cu restul.

Http.

Deci, care este unul dintre protocoalele principale de Internet? Pedanții trimit la RFC2616, iar restul va spune despre omenesc :)

Acest protocol descrie interacțiunea dintre cele două computere (client și server), construită pe baza de date a mesajelor, numită solicitare) și răspuns (răspuns). Fiecare mesaj este alcătuit din trei părți: linia de pornire, titluri și corp. În acest caz, numai linia de start este obligatorie.

Liniile de pornire pentru solicitare și răspuns au un format diferit - suntem interesați doar de linia de start a interogării, care arată astfel:

Metoda URI. Http / Versiune. ,

Unde metoda este doar o metodă de solicitare HTTP, URI - Identificator de resurse, versiune - Versiunea protocolului (ON acest moment Versiunea 1.1 este relevantă).

Anteturile sunt un set de nume de perechi, separate de colon. În titlurile sunt transmise diferite informații despre serviciu.: Codificarea mesajului, numele și versiunea browserului, adresa de la care a venit clientul (Referitor) și așa mai departe.

Corpul mesajului este, de fapt, datele transmise. În cazul răspunsurilor transmise, de regulă, pagina HTML pe care o solicită browserul și în interogare, de exemplu, în corpul mesajului, conținutul fișierelor descărcate pe server sunt transmise. Dar, de regulă, corpul mesajului din interogare este, în general, absent.

Un exemplu de interacțiune HTTP

Luați în considerare un exemplu.

Anchetă:
Get /index.php http / 1.1 gazdă: example.com Agent de utilizator: Mozilla / 5.0 (x11; U; Linux i686; RU; RV: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Accept: Text / HTML Connection: Închidere
Prima linie este șirul de interogare, restul sunt titluri; Nu există niciun mesaj corporal

Răspuns:
HTTP / 1.0 200 OK Server: Nginx / 0.6.31 Limba de conținut: RU Conținut Tip: Text / HTML; Charset \u003d UTF-8 Content Lungime: 1234 Conectare: Închidere ... Pagina HTML ...

Resurse și metode

Să ne întoarcem la linia de start a cererii și să reamintim că prezintă un astfel de parametru ca URI. Acest lucru este decriptat ca un identificator de resurse uniform - un identificator de resurse uniform. Resursa este, de regulă, fișierul de pe server (exemplu de URI în acest caz "/styles.css"), dar deloc poate exista orice obiect abstract ("/ bloguri / webdev /" - indică Blocați "dezvoltarea web", nu pe un anumit fișier).

Tipul de interogare HTTP (denumit și metoda HTTP) indică serverul la faptul că dorim să producem cu o resursă. Inițial (la începutul anilor '90) sa presupus că clientul ar putea dori doar să o obțină din resursă - pentru a obține, dar acum, prin protocolul HTTP, puteți crea postări, editați profilul, ștergerea mesajelor și multe altele. Și aceste acțiuni sunt dificil de combinat termenul "primire".

Pentru a delimita acțiunea cu resursele la nivelul metodei HTTP și au fost inventate următoarele opțiuni:

  • Obțineți - obținerea unei resurse
  • Crearea post-resurse
  • Pune - actualizarea resurselor
  • Ștergeți - Ștergeți resursele
Acordați atenție faptului că specificația HTTP nu obligă serverul să înțeleagă toate metodele (care este de fapt mult mai mare de 4) - numai este necesar, și, de asemenea, nu indică serverul pe care ar trebui să-l facă atunci când primește o cerere cu una sau altă metodă. Și aceasta înseamnă că serverul ca răspuns la cererea de ștergere /index.php http / 1.1 nu este obligat Ștergeți pagina index.php pe server, precum și pentru a obține /index.php http / 1.1 cerere nu este obligat Returnați pagina index.php pentru dvs., îl poate șterge, de exemplu :)

Odihna intră în joc

Restul (transferul de stat reprezentativ) este termenul a fost introdus în anul 2000 prin Roem Fielding (Roy Fielding) - unul dintre dezvoltatorii protocolului HTTP - ca nume al grupului de principii de aplicații web. În general, restul acoperă o zonă mai largă decât HTTP - poate fi aplicată în alte rețele cu alte protocoale. Restul descrie principiile interacțiunii și serverului clientului, pe baza conceptelor de "resurse" și "verb" (le puteți înțelege ca fiind supuse ambelor). În cazul HTTP, resursa este determinată de URI, iar verbul este o metodă HTTP.

Restul propune refuzarea de a folosi același URI pentru diferite resurse (adică adresele a două articole diferite precum /index.php?article_id\u003d10 și/index.php?article_id\u003d20 nu este restul) și utilizarea diferită Metodele HTTP pentru diferite acțiuni. Adică o aplicație web scrisă utilizând abordarea REST va șterge o resursă atunci când accesează-o cu metoda HTTP de ștergere (desigur, acest lucru nu înseamnă că este necesar să oferim posibilitatea de a elimina totul și totul, dar orice O solicitare de ștergere în aplicație trebuie să utilizeze metoda HTTP-DELETE).

Restul oferă programatorilor capacitatea de a scrie aplicații web standardizate și ușor mai frumoase decât înainte. Folosind restul, URI pentru a adăuga un utilizator nou nu va fi nici un /User.php?action\u003dcreate (Metoda de obținere / poștă) și pur și simplu /user.php (metoda postală strictă).

Ca rezultat, împreună cu specificația existentă HTTP și abordarea restului dobândesc în cele din urmă semnificația diferitelor metode HTTP. Obțineți - returnează resursele, Post - Creează un nou, Pune - actualizează existența, ștergerea - șterge.

Probleme?

da este mica problema Cu utilizarea de odihnă în practică. Această problemă se numește HTML.

Punerea / ștergerea solicitărilor pot fi trimise prin intermediul XMLHTTRequest, referindu-se la serverul manual (de exemplu, prin curl sau chiar prin Telnet), dar nu puteți face o formă HTML care trimite o cerere de punere / ștergere cu drepturi complete.

Faptul este că specificația HTML nu vă permite să creați formulare care să trimită date diferit decât prin obținerea sau postarea. Prin urmare, pentru funcționarea normală cu alte metode, ele trebuie să le imite artificial. De exemplu, în raft (un mecanism pe baza căruia Ruby interacționează cu serverul web; cu rack, șine, merb și alte cadre de rubin sunt făcute) în forma pe care o puteți adăuga un câmp ascuns numit "_method", și ca a Valoare Specificați numele metodei (de exemplu, "pus") - În acest caz, va fi trimisă o cerere post-cerere, dar Rack va fi capabil să pretindă că am pus și nu post.

Forma HTML. Aranjează $ _post și $ _get

Forma HTML. Metode de trimitere a datelor către server

Cu formulare HTML, probabil că ați întâlnit deja:

Introdu numele tau:

Economisire acest cod. În fișierul HTML și vizualizarea acestuia cu browserul dvs. preferat, veți vedea formularul HTML obișnuit:

Etichetă

Având o etichetă finală de perechi
, De fapt, întreabă forma. Atributele sale sunt ambele opționale:

  • acțiune - indică adresa URL (plină sau relativă) la care va fi trimis formularul. Dacă acest atribut nu specifică, majoritatea browserelor (mai precis vorbind, toate browserele cunoscute) trimit un formular la documentul curent, adică "pe ei înșiși". Aceasta este o reducere convenabilă, dar conform standardului Atribut HTML. Este necesară o acțiune.
  • metoda este o modalitate de a trimite formularul. Sunt două dintre ele.
    • GET - Trimiterea datelor din bara de adrese.
      Puteți observa prezența la sfârșitul adresei URL a simbolului "?" Și următoarele date în parametrul formatului \u003d valoarea. Aici "parametrul" corespunde valorii atributului de nume al elementelor de formular (vezi mai jos despre Teg ), iar "valoarea" - conținutul atributului de valoare (în el, de exemplu, conține introducerea utilizatorului în câmpul de text al aceleiași etichete ).
      De exemplu, încercați să căutați ceva în Yandex și să acordați atenție barei de adrese a browserului. Aceasta este o metodă de obținere.
    • Post-mucegai Acestea sunt trimise în corpul de interogare. Dacă nu este complet clar (sau este complet neclar), ceea ce este - nu vă faceți griji, în curând vom reveni la această problemă.
    Dacă atributul metodă nu este specificat - se înțelege problema.

Etichetă - Specifică elementul de formă definit de atributul de tip:

  • Valoarea "Text" stabilește un câmp de intrare cu o singură linie
  • Valoarea "Trimiteți" setează butonul, când formularul este apăsat pe server

Sunt posibile alte valori (și - Nu singura etichetă care specifică elementul de formă).

Deci, ce se întâmplă când apăsăm butonul "OK"?

  1. Browserul navighează elementele incluse în formă și generează din numele și valoarea lor atribute aceste forme. Să presupunem că numele Vasya a fost introdus. În acest caz, aceste forme - Nume \u003d Vasya & Okbutton \u003d OK
  2. Browserul stabilește o conexiune la server, trimite o solicitare către serverul specificat în atributul de etichete de acțiune
    Folosind metoda de trimitere specificată în atributul metodă (în acest caz - obțineți), transmiterea datelor în interogare.
  3. Serverul analizează interogarea recepționată, formează un răspuns, îl trimite în browser și închide conexiunea
  4. Browserul afișează documentul primit de la server.

Trimiterea manuală a aceleiași interogări (cu ajutorul lui Telnet) arată astfel (presupun că numele domeniului Site - www.example.com):

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

Pe măsură ce, cel mai probabil, ați ghicit deja, apăsând butonul Trimiteți în formularul cu metoda de trimitere "Get" este similară cu intrarea adresei URL corespunzătoare (cu o marcă de întrebări și formează date la sfârșit) în adresa browserului bar:

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

De fapt, metoda GET este utilizată întotdeauna când solicitați un document de la server, pur și simplu introducând adresa URL sau făcând clic pe link. Folosind. Adresa URL adăugați pur și simplu o întrebare și formează date.

Poate că toate aceste detalii tehnice și exerciții cu Telnet-Ohm par incredibil de plictisitoare și chiar inutile ("și ceea ce au PHP?"). Și în zadar. :) Acestea sunt elementele de bază ale lucrărilor pe protocolul HTTP, pe care trebuie să-l cunoașteți fiecărui programator web, iar aceasta nu este o cunoaștere teoretică - toate acestea sunt utile în practică.

Acum înlocuiți primul șir al formularului nostru la următoarele:

Am subliniat metoda de trimitere a "postului". În acest caz, datele sunt trimise la server în mai multe feluri:

Telnet www.example.com 80 Post /cgi-bin/form_handler.cgi http / 1.0 \\ r \\ n gazdă: www.example.com \\ r \\ n tip de conținut: aplicație / x-www-form-urlencoded \\ r \\ N conținut-lungime: 41263 \\ r \\ n \\ r \\ n Nume \u003d Vasya & Okbutton \u003d OK

Când utilizați metoda postală, aceste formulare sunt trimise după "două intră" - în corpul de interogare. Tot ceea ce este de mai sus este de fapt un antet de interogare (și când am folosit metoda de obținere, aceste forme au fost trimise în titlu). Pentru ca serverul să știe cum să termine citirea corpurilor cererii, titlul este prezent în linia de lungime a conținutului; Aproximativ faptul că datele formularului vor fi transmise prin parametrul1 \u003d valoarea1 și parametrul2 \u003d valoarea2 ... și valorile sunt transmise ca uncode - adică, la fel ca în cazul metodei de obținere, dar în corpul de interogare, serverul raportează antetul de conținut -type: aplicație / x-www-formă-urlencodated.

Avantajul metodei post este lipsa de limită a lungimii șirului cu datele formularului.

Când utilizați metoda postală, este imposibil să trimiteți un formular, doar "mergeți pe link", așa cum a fost cu obținerea.

Când utilizați post-formular, în atributul său de acțiune puteți specifica după semnarea întrebărilor și parametrii. Astfel, metoda postală include atât metoda de obținere.

Aranjează $ _get și $ _post

Deci, formularele sunt principala modalitate de a face schimb de date între serverul web și browser, adică oferind interacțiune cu utilizatorul - de fapt, pentru care aveți nevoie de programare web.

Luați în considerare un exemplu simplu:



dacă ($ _Server ["solicitare_method"] \u003d\u003d "Post") (
Echo "

Buna ziua, "$ _Post [" nume "]."

!" ;
}
?>
">
Introdu numele tau:






Formularul din liniile 8-12 conține două elemente: Nume și Okbutton. Atributul metodă Specifică metoda de formular post, atributul de acțiune care indică adresa URL la care este trimis formularul este umplut cu valoarea variabilă a serverului PHP_SEFLS - adresa scriptului în acest moment.

- Forma abreviată de înregistrare pentru .

Să presupunem că, în câmpul Nume, am intrat în valoarea lui Vasya, iar butonul OK a fost apăsat. În același timp, browserul trimite la serverul poștal. Corp de interogare: Nume \u003d Vasya & Okbutton \u003d OK. PHP umple automat matricea $ _post:

$ _Post ["nume"] \u003d "vasya"
$ _Post [okbutton] \u003d "ok"

De fapt, valoarea "Vasya" este trimisă în browser-ul din formularul de codificare; Pentru codificarea Windows-1251, această valoare arată ca% C2% E0% F1% FF. Dar, deoarece PHP efectuează automat decodarea necesară, putem să "uităm" despre această caracteristică - până când trebuie să lucrați cu interogări HTTP manual.

Deoarece în corpul de interogare, sunt indicate numai nume și valori, dar nu și tipurile de elemente de formă, PHP nu are nicio idee, corespunde cu $ _post ["nume"] rândul de intrare, buton sau listă. Dar aceste informații, în general, nu sunt absolut necesare. :)

De vreme ce știți ce este scris pe butonul Trimiteți, suntem opționali, în linie 11 Puteți șterge atributul de nume, de a scurta descrierea butonului . În acest caz, browserul va trimite numele \u003d Vasya-Vasya.

Și acum - la fel, dar pentru a obține în formă de:



dacă (Isset ($ _ obține ["nume"])) (
Echo "

Buna ziua, "$ _Get [" nume "]."

!" ;
}
?>
">
Introdu numele tau:







În linia 8 ar fi posibil să scrieți cu același succes

: Obțineți - metoda implicită. De data aceasta, browserul trimite BET-Solicitare, care este echivalent cu intrarea în bara de adrese a adresei: http: //adress-site./mety-script.php? Name \u003d Vasya.

PHP cu formularele GET intră în același mod ca și cu Postul, cu diferența că se umplea matricea $ _GET.

Diferența cardinală este în linia 4. Deoarece intrarea simplă a adresei în șirul browserului este o imagine de bază, verificați dacă ($ _Server ["solicitare_method"] \u003d\u003d "Get") este lipsit de sens. Prin urmare, recurgem la designul Isset (), care returnează adevărat dacă această variabilă este definită (adică a fost atribuită o valoare) și falsă - dacă variabila nu este definită. Dacă formularul a fost completat - după cum ați înțeles deja, PHP atribuie automat $ _get ["Nume"] valoarea corespunzătoare.

Inspecția este utilizată utilizând Isset () - Universal, ar putea fi utilizată pentru post-formă. Mai mult, este de preferat, deoarece vă permite să aflați ce câmpuri ale formularului sunt completate.

Un exemplu mai complex exemplu.




Echo "Specificați numele!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Ecou.
"
;
) Altfel (

" ;

Echo "Tu. Vârsta de vârstă. " ani
" ;
}
Echo "


" ;
}
?>
">
Introdu numele tau:


Introduceți anul dvs. de naștere:







Nu sunt folosite noi tehnici. Observați, executați codul, încercați să modificați ...

Modificați ultimul exemplu astfel încât utilizatorul să nu fie necesar să re-completeze câmpurile. Pentru aceasta, completați atributele de valoare ale elementelor formularului tocmai au introdus valori.



$ Name \u003d izset ($ _ Post ["nume"])? $ _Post ["nume"]: "";
$ An \u003d Isset ($ _ Postare ["an"])? $ _Post ["an"]: "";

Dacă (Isset ($ _ Post ["Nume"], $ _post ["an"])) (
dacă ($ _post ["nume"] \u003d\u003d "") (
Echo "Specificați numele!
" ;
) Altfel dacă ($ _post ["an"]< 1900 || $_POST [ "year" ] > 2004 ) {
Ecou. "Specificați anul nașterii! Gama valabilă de valori: 1900..2004
"
;
) Altfel (
Echo "Bună ziua". $ _Post ["nume"]. "!
" ;
$ varsta \u003d 2004 - $ _post ["an"];
Echo "Tu. Vârsta de vârstă. " ani
" ;
}
Echo "


" ;
}
?>
">
Introdu numele tau:


Introduceți anul dvs. de naștere:







Câteva linii de neînțeles 4 și 5. Totul este foarte simplu: linia 4 ar putea fi înregistrată astfel:

dacă (Isset ($ _ Postare ["Nume"]))
$ nume \u003d $ _post ["nume"];
altfel.
$ Nume \u003d "";

O întrebare poate apărea - de ce să nu aruncați șirurile 4-5 și să nu scrieți:

Introdu numele tau: ">

Introduceți anul dvs. de naștere: ">

Faptul este că, dacă aceste posturi nu sunt definite - și va fi, dacă formularul nu a fost încă ocupat, - PHP va emite avertismente cu privire la utilizarea variabilelor neinitializate (și, bine fondată: un astfel de mesaj vă permite să trimiteți rapid Găsiți greșeli fixate în nume variabile și avertizează, de asemenea, de posibile "găuri" de pe site). Puteți, desigur, puneți codul cu Isset direct în formă, dar se pare prea greoaie.

A dat seama? Și acum încercați să găsiți o eroare în codul de mai jos. Ei bine, nu o greșeală, dar defecte.

htmlspecialchars ()

Nu ați găsit? Iti voi spune. Introduceți, de exemplu, în câmpul "Nume" dublu citate și un text, de exemplu, VA "Sia. Trimiteți un formular și aruncați o privire la codul sursă al paginii primite. În a patra linie va fi ceva de genul :

Introdu numele tau:

Asta nu este nimic bun. Și dacă utilizatorul viclean a introdus codul JavaScript?

Pentru a rezolva această problemă, este necesar să se utilizeze funcția HtmlSpecialChars (), care va înlocui caracterele de serviciu pe reprezentarea HTML (de exemplu, citate - ON "):



$ Name \u003d izset ($ _ Post ["nume"])? Htmlspecialchars ($ _post ["nume"]): "";
$ An \u003d Isset ($ _ Postare ["an"])? Htmlspecialchars ($ _post ["an"]): "";

Dacă (Isset ($ _ Post ["Nume"], $ _post ["an"])) (
dacă ($ _post ["nume"] \u003d\u003d "") (
Echo "Specificați numele!
" ;
) Altfel dacă ($ _post ["an"]< 1900 || $_POST [ "year" ] > 2004 ) {
Ecou. "Specificați anul nașterii! Gama valabilă de valori: 1900..2004
"
;
) Altfel (
Echo "Bună ziua". $ Nume. "!
" ;
$ varsta \u003d 2004 - $ _post ["an"];
Echo "Tu. Vârsta de vârstă. " ani
" ;
}
Echo "


" ;
}
?>
">
Introdu numele tau:


Introduceți anul dvs. de naștere:







Repetați experiența și asigurați-vă că codul HTML este acum corect.

Amintiți-vă - funcția HtmlspecialChars () trebuie să fie utilizată întotdeauna atunci când conținutul variabilei în care este prezentat HTML Special este afișat.

phpinfo ()

Funcția Phpinfo () este una dintre cele mai importante din PHP. Afișează informații despre setările PHP, valorile tuturor tipurilor de variabile de configurare ...

De ce o menționez în articol despre formulare? Phpinfo () - un instrument de depanare mai confortabil. Phpinfo (), printre altele, afișează valorile tuturor variabilelor $ _GET, $ _POST și $ _SERVER. Deci, dacă formularele variabile "pierdute", cea mai ușoară modalitate de a detecta, care este cazul - utilizați funcția Phpinfo (). Pentru ca funcția să afișeze numai valorile variabilelor (și nu ați fost necesar să parcurgeți o zeci de pagini), acesta trebuie să fie solicitat după cum urmează: Phpinfo (info_variables); , sau - acesta este absolut același - phpinfo (32);



">
Introdu numele tau:


phpinfo (32);
?>



Sau, de exemplu, această situație: doriți să cunoașteți adresa IP a vizitatorului. Vă amintiți că variabila corespunzătoare este stocată într-o matrice de $ _Server, dar - nu este suficientă - au uitat exact cum se numește variabila. Din nou, apelați la phpinfo (32); , Căutăm adresa dvs. IP în plăcuță și găsiți-o - în șirul $ _Server ["Remote_Addr"].



Ți-a plăcut articolul? Împărtășește-l