>
MENU
libreria1.jpg

Librerie statiche e dinamiche in ambiente Linux (1/8)

374913040_961fe551f5.jpg

Usare il Wii Remote in ambiente Linux

11 febbraio 2008 Visualizzazioni: 980 Focus

Corso su PHP: Lo scambio dei dati

Finita la parte del corso riguardante la sintassi ed i meccanismi basilari di funzionamento del linguaggio PHP, da questa lezione inizieremo a lavorare sugli argomenti che interessano maggiormente chi è intenzionato a sviluppare siti web con questo linguaggio. Oggi partiremo dalle basi e parleremo di come avviene lo scambio dati tra le pagine web.


Introduzione
Lo scambio dati tra due pagine web è una procedura abbastanza semplice, che non ha a che fare direttamente con PHP, infatti vengono utilizzate le metodologie fornite dal protocollo HTTP, chiamate GET e POST. Ora vediamo le differenze tra questi due metodi e quando è più conveniente usarne uno piuttosto che un altro.

GET
Per vedere come funziona il metodo GET vi basta osservare l’url (indirizzo) di questa pagina: http://www.tuxjournal.net/?p=2474

Questo indirizzo è possibile scomporlo in diverse parti:

  • http:// Questo è il protocollo
  • ww.tuxjournal.net/ questo è il dominio
  • ?p=2474 i valori passati tramite GET

Quando non si specifica esplicitamente il nome della pagina come in questo caso, si dice al webserver che deve utilizzare il nome di pagina di default, nella maggior parte dei casi index.php o index.html. Di conseguenza, questo indirizzo può essere riscritto come

/index.php?p=2474

ed il risultato sarà lo stesso.

Quindi possiamo notare che in un indirizzo web, il simbolo ? viene usato come separatore tra la pagina richiesta e i parametri (o valori) che possono essere passati alla pagina stessa. Ho usato il plurale perché possiamo passare più di un parametro tramite GET, ed è sufficiente utilizzare il simbolo & come separatore tra i parametri stessi, ma facciamo un esempio:

http://localhost/pagina1.php?par1=12&par2=1&par3=pippo

Questo indirizzo richiede la pagina chiamata pagina1 e gli passa i seguenti parametri:

  • par1, il cui valore è: 12
  • par2, il cui valore è: 1
  • par3, il cui valore è: ciao

POST
Utilizzando il metodo POST è possibile inviare dati senza che essi compaiano nell’indirizzo della pagina web. Per esempio, pensiamo ad una classica form dove si inseriscono utente e password, se questi dati venissero inviati via GET, allora la password sarebbe visibile in chiaro nell’url e questo non è consigliabile.

Per questo ci viene in aiuto il metodo post. Osserviamo un esempio di codice HTML:

Corso PHP - Form - post.html

Vi sarà sicuramente capitato di vedere del codice fatto in questo modo, non sono altro che due caselle di testo in cui inserire nome utente e password, e un pulsante per inviare i dati a una pagina chiamata pagina1.php, sfruttando il metodo post, come potete vedere dall’attributo method del tag form.

Testiamo i metodi (Scarica il codice)
Questo è il codice di pagina1.php e lo useremo per testare entrambi i metodi

Corso PHP - Form - pagina1.php

Non fa altro che stampare a video i valori di due variabili user e pwd ricevuti via GET o via POST.

Per testare il GET è sufficiente richiamare la pagina in questo modo:

http://localhost/percorso_della_pagina/pagina1.php?user=nome&pwd=secret

Per testare il POST aprite:

http://localhost/percorso_della_pagina/post.html

riempite le caselle di testo e cliccate sul pulsante.

In questo esempio sono emerse due cose che nelle precedenti lezioni non erano mai state nominate:

  • la funzione isset($variabile), che serve a controllare se una variabile esiste e ritorna un valore booleano true/false
  • l’operatore ternario “?”, derivato dal C, consente di scrivere un semplice if in maniera molto veloce.

La sintassi dell’operatore ternario è questa:

condizione?esegui_se_vero:esegui_se_falso

quindi nel nostro caso il controllo che vedete significa: se la variabile esiste stampane il valore, altrimenti stampa “nessuno”. Questo è ripetuto per le due variabili user e pwd, sia che arrivino da GET che da POST.

Chiarimenti
Le due variabili speciali $_GET e $_POST sono due array associativi che vengono riempiti in automatico dall’interprete PHP con i valori che arrivano rispettivamente via GET e via POST dalla pagina che ha chiamato quella che stiamo processando. I valori si identificano nell’array associativo utilizzando come chiave il nome della variabile definita nella pagina chiamante.

Nella prossima lezione vedremo come vengono gestite le sessioni, continuate a seguirci!

LEZIONI PRECEDENTI:

11 Dicembre 2007: Introduzione
17 Dicembre 2007:
Installazione di una piattaforma LAMP su Ubuntu Linux
18 Dicembre 2007:
Dentro l’HTML
20 Dicembre 2007:
E tu di che tipo sei?
7 Gennaio 2008:
Operiamo?
10 Gennaio 2008:
Ed ecco gli Array
17 Gennaio 2008: Controllare l’esecuzione (1)
25 Gennaio 2008: Controllare l’esecuzione (2)
4 Febbraio 2008
: Le Funzioni (1)
6 Febbraio 2008: Le Funzioni (2)

di Rocco Zanni - TuxJournal.net
Rocco Zanni Blog

twittergoogle_pluslinkedinmail
  • augusto

    anche se si tratta di un corso base, io ci metterei comunque un riferimento anche a $_REQUEST[].

  • http://www.tuxjournal.net rocco.zanni

    Non ho citato volutamente $_REQUEST per il semplice motivo che, almeno a mio parere è abbastanza deprecabile.

    $_REQUEST ingloba le variabili presenti nei due array $_GET e $_POST e, se da un lato può risultare comodo perchè il programmatore non si deve preoccupare come gli arriva il dato (e questo facilita di molto anche il debugging degli applicativi e i test automatizzati), dall'altro può essere rischioso perchè si perde il controllo della fonte da cui provengono i dati, in contesti "sensibili", quali lo scambio di informazioni quali nomi utenti e password.

    Un'altro problema può anche essere che se si permette di inviare i dati indifferentemente nei due modi, è possibile far eseguire ripetutamente la stessa operazione semplicemente passando gli opportuni parametri dall'url. Un esempio che mi viene in mente su due piedi può essere la cancellazione di dati da un database.

    In ogni caso possiamo discuterne senza problemi sul forum.

    Ciao

  • augusto

    Giusto per completezza, secondo me, era giusto citare anche $_REQUEST. Dal punto di vista tecnico sul perchè non usarlo mi trovi pienamente daccordo.

  • Raffaele

    Sono d’accordo anche io con Augusto… infatti, per motivi didattici, stavo cercando proprio la funzione $_REQUEST, la metterei per un discorso di completezza.