40. Inviare dati coi metodi GET e POST
Come ogni linguaggio server-side che si rispetti, anche PHP ci consente lo scambio di dati fra pagine con i metodi classici che HTML ci mette a disposizione : GET e POST.
Con entrambi i metodi l'invio dei dati avviene tramite un normale form HTML, e PHP ci consente di prelevarli attraverso i due array globali $_GET[] e $_POST[].
Al form HTML sono necessari due paramentri principali : action e method.
A seconda del DOCTYPE che utilizzate nella vostra pagina e dagli scopi del vostro script potrebbero servire anche i parametri id e name (enctype, target ...) che io ormai specifico sempre perchè abituato ad usare il DOCTYPE XHTML 1.0 che richiede fra l'altro che i valori dei parametri siano racchiusi fra doppi apici, ma non è scopo di questa guida che illustrerà solo il funzionamento della parte PHP, vi consiglio pertanto lo studio delle ultime versioni di HTML e XHTML prima di cominciare a sviluppare delle applicazioni a livello commerciale.
Tornando al nostro form HTML vediamo a cosa corrispondono i parametri action e method :
- action - Indica la pagina a cui inviare i dati. Se lasciato vuoto punterà di default alla pagina stessa.
- method - Indica il metodo in cui avviene lo scambio di dati : "get" o "post".
L'attributo "name" degli elementi "input" usati all'interno del form HTML è molto importante, poichè rappresenta la chiave che useremo per accedere all'array globale $_GET[] e che ci consentirà di leggere il valore del dato inviato.
Esempio invio di dati
Iniziamo con un esempio semplice composto da due pagine : una in HTML che invia i dati e una in PHP che li riceve.
inviodati.html
<html> <head> <title>Pagina HTML per l'invio dei dati</title> </head> <body> <form action="ricezionedati.php" method="get"> <input type="text" name="miotesto" /> <input type="submit" value="Invia dati" /> </form> </body> </html>
|
Osserviamo i due attributi del form, action assegnato a "ricezionedati.php", che sarà la pagina incaricata di ricevere i dati inviati, e method assegnato a get, per specificare che stiamo usando appunto il metodo di invio dati GET. Infine notiamo i due elementi "input" del form, uno di tipo text (campo di testo) e uno di tipo submit (bottone
per inviare i dati). |
ricezionedati.php
<html> <head> <title>Pagina PHP per la ricezione dei dati</title> </head> <body> <?php if (strlen($_GET["miotesto"])) echo "Mi hai inviato la stringa \"" . $_GET["miotesto"] . "\""; else echo "Non mi hai inviato nulla!!"; ?> </body> </html>
Niente di più semplice, usiamo il nome dell'attributo name per accedere all'array globale $_GET[] e il gioco è fatto.
Con la funzione strlen() effettuo un semplice controllo per vedere se è stato inviato almeno un carattere.
Una volta inviati i dati e caricata la pagina ricezionedati.php, potrete notare nella barra degli indirizzi del vostro browser che i dati inviati sono in chiaro e perfettamente leggibili dall'utente finale :
http://localhost/test/ricezionedati.php?miotesto=testo+da+inviare
Il metodo GET infatti, consiste semplicemente nell'accodare all'URL della pagina un punto interrogativo a cui seguiranno tutte le variabili inviate con la sintassi variabile=valore, separate da una E commerciale & :
pagina.php?variabile1=valore&variabile2=valore&variabile3=altro+valore
Il metodo POST è equivalente al GET con la differenza che POST quando invia i dati non li mette in chiaro nell'URL.
Un metodo è migliore di un altro a seconda del caso ma mai a prescindere.
Come forse avrete notato, in questo stesso sito vengono usati
entrambi i metodi.
Ho usato POST per inviare dati sensibili preservando un minimo di sicurezza, mentre ho usato GET per far sapere a guide.php quale pagina deve caricare, mettendo in chiaro il titolo della pagina nell'URL, favorendo il posizionamento sui motori di ricerca per quelle determinate parole chiave (Web Marketing).
Scrivendo applicazioni e creando siti vi ritroverete senzaltro in situazioni in cui preferirete POST e altre in cui è preferibile GET.
Esempio invio dati su pagina singola
Vedremo ora un ultimo esempio in cui inviamo e riceviamo i dati nella stessa pagina, stavolta col metodo POST.
invio_ricezione.php
<html>
<head>
<title>Invio e ricezione in unica pagina</title>
</head>
<body>
<?php
if (strlen($_POST["miotesto"]))
{
echo "Dato inviato = " . $_POST["miotesto"];
}
else
{
?>
<form action="" method="post">
<input type="text" name="miotesto" />
<input type="submit" value="Invia dato" />
</form>
<?php
}
?>
</body>
</html>|
Per inviare e ricevere i dati nella stessa pagina, avrei potuto specificare quest'ultima nell'attributo action, ottenendo il medesimo risultato ma garantendo una maggiore compatibilità coi vecchi browser (vi consiglio se possibile di specificarlo sempre). Tornando ai metodi GET e POST, abbiate cura di usare sempre l'array globale corretto a seconda del metodo che avete scelto. E' possibile inoltre accedere ai dati inviati come se fossero delle variabili, indipendentemente dal metodo di invio dati utilizzato, ma è
necessario avere la direttiva register_globals impostata a ON nei settaggi di PHP. |
Nota : solitamente l'estensione delle pagine contenenti PHP dovrà essere ".php" o lo script verrà interpretato come semplice testo (dipende dalla configurazione del server).
