L'uso dei metodi GET e POST in PHP è difficile da sopravvalutare, poiché questi metodi si trovano su quasi tutti i siti. Prima di studiare il materiale descritto di seguito, ti consiglio di familiarizzare con il tag html
elementi del modulo
Il modulo ha attributi, elencherò i più comuni:
Creiamo un modulo:
elementi del modulo
Come file gestore, ho messo il file test.php poiché è in esso che scrivo esempi per te. Ho impostato il metodo di invio della posta in quanto questi metodi vengono utilizzati nel 99,9% dei casi. Ho anche dato un nome al nostro modulo - modulo
Ora tuffiamoci nel mondo degli elementi del modulo. La prima cosa che devi capire è che quasi tutti gli elementi sono tag. l'unica differenza è nell'attributo genere a questi tag. Permettetemi di elencare gli elementi del modulo utilizzati:
Sono sicuro che hai visto questi campi più di una volta, quindi qui, come si suol dire: "nessun commento"
Ora mettiamo insieme un breve questionario di formazione con cui lavoreremo in seguito. Il nostro compito è comporre un piccolo questionario che ci dirà il nome della persona che ha compilato, il sesso, il paese di provenienza, il suo colore preferito e un campo di testo dove l'utente può aggiungere qualcosa su di sé. Questo è quello che ho fatto:
Il tuo cognome Nome patronimico:
Il tuo genere:
m
F
Da che paese vieni
Colore/i preferito/i:
Nero:
Rosso:
Bianco:
Altro:
Su di me:
Nota che quasi ogni tag ha un attributo valore, cosa serve? Registra i dati che stai per trasferire su un'altra pagina. spero sia chiaro
Ora, se eseguiamo questo codice in un browser, vedremo quanto segue:
Ho usato l'attributo per il modulo azione con il significato test.php questo significa, come ho detto, i dati del form verranno passati al file test.php.
POST richiesta
Ora scriviamo il codice php che ci permetterà di vedere le informazioni che abbiamo inserito. Dove sono archiviati i dati? Nel caso della richiesta get, i nostri dati sono stati memorizzati nella variabile globale $ _GET [""]. Quando viene effettuata una richiesta di post, i dati saranno nella variabile globale $ _POST [""]. Tra parentesi quadre, devi scrivere l'identificatore, come nel caso della variabile globale get. La domanda è: dove posso ottenere questo identificatore? Ecco perché abbiamo bisogno dell'attributo name sugli elementi del modulo! Sono questi nomi che servono come chiave per noi nel post dell'array globale. Bene, iniziamo a descrivere lo script:
if (isset ($ _ POST ["invia"])) (
echo "Nome:". $ _ POST ["fio"]. "
";
echo "Sesso:". $ _ POST ["sesso"]. "
";
echo "Paese di residenza:". $ _ POST ["città"]. "
";
Echo "Colore/i preferito/i:
";
echo $ _POST ["colore_1"]. "
";
echo $ _POST ["colore_2"]. "
";
echo $ _POST ["colore_3"]. "
";
echo $ _POST ["colore_4"]. "
";
echo "Su di me:". $ _ POST ["su di me"]. "
";
}
?>
La condizione if che abbiamo scritto dice: Se c'è una variabile globale $ _POST ["submit"], allora visualizziamo i dati sullo schermo. Questa variabile globale viene creata se abbiamo fatto clic sul pulsante di invio, motivo per cui in questo esempio abbiamo bisogno dell'attributo name nel pulsante. Ti starai chiedendo perché l'attributo name è facoltativo per il pulsante? È piuttosto semplice. Di solito il programmatore non tiene traccia della pressione del pulsante, ma tiene traccia dei dati inviati. Per il corretto funzionamento, ad esempio, dei moduli di contatto, è necessario tenere traccia non della pressione di un pulsante, ma della correttezza delle informazioni inserite e scoprire se queste informazioni sono state inserite. Nel nostro esempio, non abbiamo controllato i dati inviati, ma abbiamo semplicemente tracciato il clic del pulsante, per semplificare l'esempio... Ecco cosa abbiamo ottenuto:
Conclusione
Bene, oggi abbiamo analizzato due metodi per trasferire i dati tra gli script, così come il galoppo fatto conoscenza con i moduli. Spero davvero che queste informazioni ti siano utili almeno da qualche parte. Se hai domande o pensieri, scrivi commenti. Buona fortuna, ho tutto per oggi!
PS: vuoi che i giochi per computer diventino ancora più realistici? Directx 11 per Windows 7 può essere scaricato gratuitamente su Windows in! Goditi una grafica fantastica!
Questo post è una risposta a una domanda posta in un commento su uno dei miei articoli.
In questo articolo voglio raccontarvi quali sono i metodi HTTP GET/POST/PUT/DELETE e altri, per cosa sono stati inventati e come utilizzarli in accordo con REST.
HTTP
Quindi qual è esattamente uno dei principali protocolli di Internet? Manderò i pedanti a RFC2616 e dirò il resto come un umano :)Questo protocollo descrive la comunicazione tra due computer (client e server), basata su messaggi chiamati Request e Response. Ogni messaggio è composto da tre parti: una riga di inizio, intestazioni e un corpo. In questo caso è necessaria solo la linea di partenza.
Le righe di partenza per la richiesta e la risposta hanno un formato diverso - siamo interessati solo alla riga di partenza della richiesta, che assomiglia a questa:
METODO URI HTTP/ VERSIONE ,
Dove METHOD è solo il metodo di richiesta HTTP, URI è l'identificatore della risorsa, VERSION è la versione del protocollo (attualmente è rilevante la versione 1.1).
Le intestazioni sono una raccolta di coppie nome-valore, separate da due punti. Nelle intestazioni vengono trasmesse diverse informazioni di servizio: codifica del messaggio, nome e versione del browser, indirizzo da cui proviene il client (Referrer) e così via.
Il corpo del messaggio è, infatti, i dati trasmessi. Nella risposta, il dato trasmesso, di regola, è la pagina html richiesta dal browser, e nella richiesta, ad esempio, nel corpo del messaggio, viene trasmesso il contenuto dei file caricati sul server. Ma di norma, il corpo del messaggio non è affatto incluso nella richiesta.
Esempio di comunicazione HTTP
Diamo un'occhiata a un esempio.Inchiesta:
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 Accetta: text / html Connessione: chiudi
La prima riga è la riga di richiesta, il resto sono intestazioni; il corpo del messaggio è mancante
Risposta:
HTTP / 1.0 200 OK Server: nginx / 0.6.31 Content-Language: ru Content-Type: text / html; charset = utf-8 Content-Length: 1234 Connessione: chiudi ... LA PAGINA HTML STESSA ...
Risorse e metodi
Torniamo alla stringa di query iniziale e ricordiamo che contiene un parametro come URI. Questo sta per Uniform Resource Identifier - un identificatore di risorsa uniforme. Una risorsa è, di regola, un file sul server (un esempio URI in questo caso è "/styles.css"), ma in generale una risorsa può essere un oggetto astratto ("/blogs/webdev/" - indica il blocco "Sviluppo Web ", e non per un file specifico).Il tipo di richiesta HTTP (chiamato anche metodo HTTP) dice al server quale azione vogliamo intraprendere con la risorsa. Inizialmente (nei primi anni '90) si presumeva che il cliente potesse desiderare solo una cosa dalla risorsa: ottenerla, ma ora, utilizzando il protocollo HTTP, è possibile creare post, modificare il profilo, eliminare i messaggi e molto altro. E queste azioni sono difficili da combinare con il termine "ricezione".
Per differenziare le azioni con risorse a livello di metodi HTTP, sono state inventate le seguenti opzioni:
- GET - ottenere una risorsa
- POST - creazione di una risorsa
- PUT - aggiornamento delle risorse
- DELETE - eliminazione di una risorsa
REST entra in gioco
REST (REpresentational State Transfer) - questo termine è stato coniato nel 2000 da Roy Fielding - uno degli sviluppatori del protocollo HTTP - come nome per un gruppo di principi per la creazione di applicazioni web. In generale, REST copre un'area più ampia di HTTP: può essere utilizzato su altre reti con altri protocolli. REST descrive i principi dell'interazione client-server, basati sui concetti di "risorsa" e "verbo" (puoi capirli come soggetto e predicato). Nel caso di HTTP, la risorsa è definita dal suo URI e il verbo è il metodo HTTP.REST propone di abbandonare l'uso dello stesso URI per risorse diverse (ovvero, gli indirizzi di due articoli diversi come /index.php?article_id=10 e /index.php?article_id=20 non sono un modo REST) e utilizzare diversi metodi HTTP per diverse azioni. Cioè, un'applicazione web scritta utilizzando l'approccio REST eliminerà una risorsa quando vi si accede con il metodo HTTP DELETE (ovviamente, questo non significa che dovresti essere in grado di eliminare tutto e tutto, ma qualunque la richiesta di cancellazione dell'applicazione deve utilizzare il metodo HTTP DELETE).
REST offre ai programmatori la possibilità di scrivere applicazioni web standardizzate e leggermente più belle che mai. Usando REST, l'URI per aggiungere un nuovo utente non sarà /user.php?action=create (metodo GET/POST), ma semplicemente /user.php (metodo rigorosamente POST).
Di conseguenza, combinando la specifica HTTP esistente e l'approccio REST, i vari metodi HTTP hanno finalmente senso. GET - restituisce una risorsa, POST - ne crea una nuova, PUT - ne aggiorna una esistente, DELETE - ne elimina.
I problemi?
Sì, c'è un piccolo problema con l'applicazione pratica di REST. Questo problema si chiama HTML.Le richieste PUT / DELETE possono essere inviate tramite XMLHttpRequest, contattando il server "manualmente" (ad esempio, tramite curl o anche tramite telnet), ma non è possibile creare un modulo HTML inviando una richiesta PUT / DELETE completa.
Il punto è che la specifica HTML non ti consente di creare moduli che inviano dati se non tramite GET o POST. Pertanto, per il normale funzionamento con altri metodi, devi imitarli artificialmente. Ad esempio, in Rack (il meccanismo con cui Ruby interagisce con il server web; Rails, Merb e altri framework Ruby sono realizzati usando Rack), puoi aggiungere un campo nascosto chiamato "_method" a un modulo e specificare il nome del metodo come valore (ad esempio, "PUT") - in questo caso, verrà inviata una richiesta POST, ma Rack sarà in grado di fingere di aver ricevuto un PUT, non un POST.
Questo post ha lo scopo di spiegare i principi del trasferimento di dati su Internet utilizzando due metodi principali: GET e POST. L'ho scritto come supplemento alle istruzioni per il generatore di turni per chi è poco interessato ai dettagli ☺.
Vai al seguente indirizzo (questo è per una spiegazione visiva): http://calendarin.net/calendar.php?year=2016 Fai attenzione alla barra degli indirizzi del browser: calendarin.net/calendar.php ? anno = 2016 Viene nominato il file principale, seguito da un punto interrogativo (?) e da un parametro "anno" con un valore di "2016". Quindi, tutto ciò che segue il punto interrogativo è una richiesta GET. È semplice. Per passare più di un parametro, ma diversi, devono essere separati da una e commerciale (&). Esempio: calendarin.net/calendar.php ? anno = 2016 & display = giorni-lavorativi-e-giorni-non-lavorativi
Il file principale è ancora denominato, seguito da un punto interrogativo (?), Quindi - il parametro "year" con il valore "2016", quindi - la e commerciale (&), quindi - il parametro "display" con il valore "work -giorni-e-giorni -off ".
I parametri GET possono essere modificati direttamente nella barra degli indirizzi del browser. Ad esempio, modificando il valore "2016" in "2017" e premendo il tasto , si passerà al calendario per il 2017.
Si tratta della trasmissione dei dati in modo nascosto (l'indirizzo della pagina non cambia); cioè puoi vedere cosa è stato trasmesso solo con l'aiuto di un programma (script). Ad esempio, nel seguente strumento per il conteggio dei caratteri in un testo, i dati di origine vengono trasmessi utilizzando il metodo POST: http://usefulonlinetools.com/free/character-counter.php
Se avete domande, commenti e la mia e-mail al vostro servizio.
Oltre al metodo GET, di cui abbiamo discusso nel post precedente, esiste un altro metodo per inviare una richiesta tramite il protocollo HTTP: il metodo POST. Anche il metodo POST è molto utilizzato nella pratica.
Se per accedere al server con il metodo GET ci è bastato digitare la richiesta nell'URL, allora nel metodo POST tutto funziona secondo un principio diverso.
Per soddisfare questo tipo di richiesta, dobbiamo fare clic sul pulsante con l'attributo type = "submit", che si trova nella pagina web. Nota che questo pulsante si trova nell'elemento
Considera questo HTML:
![](https://i1.wp.com/steptosleep.ru/wp-content/uploads/2018/06/92221.png)
Se l'utente inserisce del testo nel campo di testo e fa clic sul pulsante "Invia", la variabile di testo con il valore del contenuto inserito dall'utente verrà inviata al server.
Richieste POST e GET in termini semplici
Questa variabile verrà inviata dal metodo POST.
Se scrivi nel modulo in questo modo:
Quindi i dati verranno inviati utilizzando il metodo GET.
Se, nel caso di una richiesta GET, la quantità di dati che potremmo trasferire fosse limitata dalla lunghezza della barra degli indirizzi del browser, allora nel caso di una richiesta POST tale limitazione non esiste e possiamo trasferire quantità significative di informazione.
Un'altra differenza tra il metodo POST e GET, il metodo POST nasconde tutte le variabili e i loro valori passati ad esso nel suo corpo (Entity-Body). Nel caso del metodo GET, sono stati memorizzati nella stringa di richiesta (Request-URI).
Ecco un esempio di richiesta POST:
POST / HTTP / 1.0 \ r \ n
Ospite: www.site.ru \ r \ n
Referente: http://www.site.ru/index.html\r\n
Cookie: reddito = 1 \ r \ n
Tipo di contenuto: application / x-www-form-urlencoded \ r \ n
Contenuto-Lunghezza: 35 \ r \ n
\ r \ n
login = Dima & password = 12345
Pertanto, trasmettendo i dati utilizzando il metodo POST, sarà molto più difficile per un utente malintenzionato intercettarli, perché sono nascosti alla vista, quindi il metodo POST è considerato più sicuro.
Inoltre, il metodo POST può trasferire non solo testo, ma anche dati multimediali (immagini, audio, video). Esiste uno speciale parametro Content-Type che determina il tipo di informazioni che devono essere trasferite.
Infine, la variabile POST viene utilizzata per recuperare i dati trasmessi da questo metodo sul server.
Ecco un esempio di elaborazione in PHP:
echo $ _POST ['testo'];
?>
Nell'ultimo post, abbiamo deciso che il browser (client) invia richieste HTTP al server e il server invia risposte HTTP al client. Tali richieste e risposte vengono elaborate secondo determinate regole. C'è, qualcosa come la sintassi, come e in quale sequenza dovrebbe essere scritta. Ci deve essere una struttura ben definita.
Diamo un'occhiata più da vicino a questa struttura, che viene utilizzata per creare richieste e risposte nel protocollo HTTP.
Una richiesta HTTP è composta da tre parti principali, che arrivano esattamente nell'ordine mostrato di seguito. C'è una riga vuota tra le intestazioni e il corpo del messaggio (come separatore), è un carattere di avanzamento riga.
Stringa vuota (separatore)
Pubblica e ricevi richieste, qual è la differenza tra loro e quale è migliore e per quali scopi?
corpo del messaggio (corpo entità) - parametro opzionale
Stringa della domanda- specifica il metodo di trasmissione, l'URL a cui accedere e la versione del protocollo HTTP.
intestazioni- descrivere il corpo dei messaggi, trasmettere vari parametri e altre informazioni e informazioni.
corpo del messaggio- questi sono i dati stessi, che vengono trasmessi nella richiesta. Il corpo del messaggio è un parametro facoltativo e può essere omesso.
Quando riceviamo una richiesta di risposta dal server, il corpo del messaggio è molto spesso il contenuto della pagina web. Ma, quando si effettuano richieste al server, a volte può anche essere presente, ad esempio, quando trasferiamo al server i dati che abbiamo compilato nel modulo di feedback.
Più in dettaglio, ogni elemento della richiesta, verrà preso in considerazione nelle note seguenti.
Prendiamo come esempio una richiesta del server reale. Ho evidenziato ogni parte della richiesta con il proprio colore: la riga della richiesta è verde, le intestazioni sono arancioni, il corpo del messaggio è blu.
Richiesta dal browser:
Host: webgyry.info
Cookie: wp-settings
Connessione: keep-alive
Nell'esempio seguente, il corpo del messaggio è già presente.
Risposta del server:
Tipo di contenuto: testo / html; set di caratteri = UTF-8
Codifica di trasferimento: chunked
Connessione: keep-alive
Keep-Alive: timeout = 5
X-Pingback: //webgyry.info/xmlrpc.php
Questi sono i messaggi che vengono scambiati tra il client e il server tramite il protocollo HTTP.
A proposito, vuoi sapere se ha senso in qualche elemento del tuo sito utilizzando gli "obiettivi" di Yandex Metrics e Google Analytics?
Togli ciò che NON funziona, aggiungi ciò che funziona e raddoppia i tuoi profitti.
Un corso sull'impostazione degli obiettivi Yandex Metrica ..
Un corso sull'impostazione degli obiettivi di Google Analytics ..
Il client HTTP invia una richiesta al server sotto forma di messaggio di richiesta, che ha il seguente formato:
- Stringa richiesta (richiesto)
- Titolo (elemento facoltativo)
- Stringa vuota (richiesto)
- Corpo del messaggio (facoltativo)
Diamo un'occhiata a ciascuno di questi elementi separatamente.
Stringa della domanda
La stringa di richiesta inizia con un token del metodo, seguito dall'URI della richiesta e dalla versione del protocollo. Gli elementi sono separati l'uno dall'altro da spazi:
Consideriamo questo elemento in modo più dettagliato.
Metodo di richiesta
Questo elemento specifica il metodo da chiamare sul lato server sull'URI specificato.
Esistono otto metodi in HTTP:
- TESTA
Utilizzato per ottenere la riga di stato e il titolo dal server tramite URI. Non modifica i dati. - OTTENERE
Utilizzato per ricevere dati dal server all'URI specificato. Non modifica i dati. - INVIARE
Utilizzato per inviare dati al server (come informazioni sugli sviluppatori, ecc.) utilizzando moduli HTML. - METTERE
Sostituisce tutti i dati precedenti sulla risorsa con i dati appena caricati. - ELIMINARE
Rimuove tutti i dati correnti sulla risorsa specificata dall'URI. - COLLEGARE
Stabilisce una connessione tunnel al server all'URI specificato. - OPZIONI
Descrive le proprietà di connessione per la risorsa specificata. - TRACCIA
Fornisce un messaggio contenente una traccia a ritroso della posizione dell'URI della risorsa specificato.
URI di richiesta
URI (Uniform Resource Identifier) è l'identificatore della risorsa a cui viene inviata la richiesta. Il formato URI più comune è mostrato di seguito:
‘*’ utilizzato quando la richiesta HTTP non è specifica per una risorsa specifica, ma per un server. Utilizzato solo quando non è necessario applicare il metodo alla risorsa. Ad esempio,
uri assoluto utilizzato quando viene effettuata una richiesta HTTP a un proxy. Al proxy viene richiesto di passare la richiesta dalla cache disponibile e restituisce una risposta. Ad esempio:
asbolutny_path | una fonte usato dalla maggior parte di chatso.
Imparare a lavorare con le richieste GET e POST
È richiesta una risorsa specifica di un server specifico. Ad esempio, un client desidera ottenere una risorsa dal server tramite la porta 80. L'indirizzo della risorsa è "www.proselyte.net" e invia la seguente richiesta:
Richiesta di campi di intestazione
I campi di intestazione consentono al client di passare informazioni aggiuntive sulla richiesta e su se stesso al server. Questi campi agiscono come modificatori di richiesta.
Di seguito è riportato un elenco dei campi di intestazione più importanti che possono essere utilizzati:
- Accetta-Charset
- Accetta-codifica
- Accetta-Lingua
- Autorizzazione
- Aspettarsi
- If-match
- Se-Modificato-da
- Se-nessuno-match
- Se-Range
- Se-Non modificato-Da
- Gamma
- Referente
- Agente utente
Se vogliamo implementare il nostro client e il nostro server web, possiamo creare i nostri campi di intestazione.
Esempio di richiesta HTTP
Questo conclude il nostro studio sulle richieste HTTP.
Nel prossimo articolo, esamineremo le risposte HTTP.
Uno dei modi per inviare una richiesta HTTP al server è una richiesta GET. Questo metodo è il più comune e più spesso le richieste al server vengono effettuate utilizzandolo.
Il modo più semplice per creare una richiesta GET è digitare l'URL nella barra degli indirizzi del browser.
Il browser trasmetterà al server le seguenti informazioni:
OTTIENI / HTTP / 1.1
Host: webgyry.info
Agente utente: Mozilla / 5.0 (Windows NT 6.1; rv: 18.0) Gecko / 20100101 Firefox / 18.0
Accetta: text/html, application/xhtml + xml, application/xml; q = 0.9, * / *; q = 0.8
Accetta-Lingua: ru-RU, ru; q = 0,8, en-US; q = 0,5, en; q = 0,3
Accetta-codifica: gzip, deflate
Cookie: wp-settings
Connessione: keep-alive
La richiesta si compone di due parti:
1. linea di richiesta
2.headers (intestazioni dei messaggi)
Tieni presente che la richiesta GET non ha un corpo del messaggio. Ma questo non significa che con il suo aiuto non possiamo trasferire alcuna informazione al server.
Differenza tra i metodi GET e POST
Questo può essere fatto usando parametri GET speciali.
Per aggiungere parametri GET alla richiesta, è necessario inserire un segno "?" alla fine dell'URL. e dopo di esso, inizia a chiedere loro secondo la seguente regola:
nome_parametro1 = valore_parametro1 & nome_parametro2 = valore_parametro2 & ...
Il separatore tra i parametri è il segno "&".
Ad esempio, se vogliamo passare due valori al server, il nome utente e la sua età, allora questo può essere fatto con la seguente riga:
http://site.ru/page.php?name=dima&age=27
Quando questa query viene eseguita, i dati entrano nella cosiddetta variabile d'ambiente QUERY_STRING, dalla quale possono essere recuperati sul server utilizzando il linguaggio di programmazione web lato server.
Ecco un esempio di come questo può essere fatto in PHP.
echo "Il tuo nome:". $ _GET ["nome"]. "
»;
echo "La tua età:". $ _GET ["età"]. "
»;
?>
Il costrutto $ _GET ["nome_parametro"] consente di visualizzare il valore del parametro passato.
Come risultato dell'esecuzione di questo codice nel browser, verrà visualizzato quanto segue:
Il tuo nome: dima
La tua età: 27
facciamo anche una richiesta al server utilizzando il metodo GET.