Passare i dati via GET e via POST
Passare i dati mediante GET
Per passare dei dati tramite GET è opportuno ricordarsi che l'url che li contiene, ovvero l'indirizzo presente nella barra di navigazione del browser, deve essere così formattato:
nomescript.php?variabile_1=valore&variabile_2=valore&variabile_n=valore
Ogni dato passato ha (opzionalmente) il proprio valore ma il primo nome di dato, nel nostro esempio variabile_1, deve essere anteceduto dal punto interrogativo. Tutti gli altri nomi debbono essere preceduti dal simbolo &.
Prendiamo ad esempio un ipotetico negozio virtuale dove uno script chiamato carrello.php si occupa di ricevere i dati di un ipotetico ordine che consistono nel catalogo dal quale è stato fatto l'ordine, dall'ID dell'articolo e dalla quantità:
Vediamo un po' cosa succede se chiamiamo lo script con questo URL:
Prendiamo ad esempio un ipotetico negozio virtuale dove uno script chiamato carrello.php si occupa di ricevere i dati di un ipotetico ordine che consistono nel catalogo dal quale è stato fatto l'ordine, dall'ID dell'articolo e dalla quantità:
<?php $catalogo = htmlentities($_GET['catalogo']); $ID = htmlentities($_GET['ID']); $quantita = htmlentities($_GET['quantita']); echo 'Hai aggiunto l\'oggetto di ID <b>'.$ID.'</b> dal catalogo <b>'.$catalogo.'</b>. La quantità è pari ad <b>'.$quantita.'</b> pezzo/i.'; ?>
Vediamo un po' cosa succede se chiamiamo lo script con questo URL:
carrello.php?catalogo=offerte&ID=14&quantita=2

Come è possibile vedere il dato ID è presente nella superglobal $_GET['ID'], il dato catalogo è presente nella superglobal $_GET['catologo'] e la quantità nella superglobal $_GET['quantita'].
Passare i dati mediante POST
Come abbiamo già detto attraverso il passaggio di dati POST avviene grazie ai form HTML. Un form non è altro che un insieme di campi che vengono passati dal browser ad uno script. Supponiamo di avere questo form nel file form.html che punta, tramite il parametro action, a form.php. Un ipotetico form di contatto, in HTML, potrebbe essere il seguente:
In questo modo abbiamo creato un form con tre campi: nome, email e messaggio. Adesso vedremo com'è semplice prendere i dati inseriti dall'utente mediante PHP.
<form action="form.php" method="post"><br/> <table> <tr> <td width="20%">Nome:</td> <td><input type="text" name="nome" /></td> </tr> <tr> <td width="20%">Email:</td> <td width="80%"><input type="text" name="email" /></td> </tr> <tr> <td width="20%">Messaggio:</td> <td width="80%"><textarea name="messaggio"></textarea></td> </tr> <tr> <td colspan="2" width="100%"><input type="submit" value="Invia il commento"></td> </tr> </form>
In questo modo abbiamo creato un form con tre campi: nome, email e messaggio. Adesso vedremo com'è semplice prendere i dati inseriti dall'utente mediante PHP.
<?php $nome = htmlentities($_POST['nome']); $email = htmlentities($_POST['email']); $messaggio = htmlentities($_POST['messaggio']); echo 'Ti è stata inviata una email da <b>'.$nome.'</b> (email:<b>'.$email.'</b>).<br/>'; echo 'Il messaggio è il seguente: <b>'.$messaggio.'</b>'; ?>
Verificare se una variabile GET o POST è stata passata
Per verificare se una variabile GET o POST è stata realmente passata basta utilizzare la funzione isset() che restituisce true se la variabile esiste o false se non esiste. Prendiamo ad esempio il passaggio della variabile nome mediante GET.
È importante ricordare che, come per tutti gli array, c'è una distinzione tra il valore della chiave se questo è espresso con lettere maiuscole e miniscole. In altre parole $_GET['nome'] è differente da $_GET['NOME'].
<?php
if (isset($_GET['nome'])){
echo 'Il nome è stato passato';
else{
echo 'Nessun nome passato';
}
?>
È importante ricordare che, come per tutti gli array, c'è una distinzione tra il valore della chiave se questo è espresso con lettere maiuscole e miniscole. In altre parole $_GET['nome'] è differente da $_GET['NOME'].
La sicurezza delle variabili GET e POST
Sebbene sia esule dallo scopo di questa guida è bene ricordare che in qualsiasi bravo programmatore deve avere un occhio di riguardo per ciò che concerne la sicurezza. Visto che le variabili GET e POST normalmente possono essere usate per restituire pagine web oppure per essere inserite in un database è importante che queste vengano adeguatamente processate. In particolare:
- Quando si presume che la variabile sia restituita nella pagina è importante evitare che particolari sequenze, corrispondenti a tag HTML, possano essere inserite forzatamente dentro la pagina. In tutti gli esempi abbiamo usato la funzione htmlentities che si preoccupa di convertire i tags in codice "innocuo". Questo previene il cosidetto attacco XSS o cross-site-scripting.
- Quando la variabile può essere usata per inserire un record in un database o visualizzare da esso dei record è indispensabile trattare la variabile per eviatare che, assieme ad essa, possano essere inserite pericolose istruzione SQL. Questa tecnica previene gli attacchi SQL conosciuto come SQL-injections.
Successivo: Gli array
Precedente: Le variabili: operazioni con i numeri