Sei qui: Home » Guide » PHP » Guida completa a PHP » Passare i dati via GET e via POST

Passare i dati via GET e via POST

PHP è un linguaggio pensato per poter interagire con l'utente. Per questo motivo si rende necessaria la possibilità di inviare dati attraverso il browser che verranno eseguiti dallo script. L'interprete PHP mette a disposizione due variabili definite superglobals che accettano dati dal browser in forma di GET, ovvero passate direttamente dall'url, o di POST qualora i dati fossero inviati tramite un form.

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à:
<?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
GET & POST
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:
<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.
<?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:
  1. 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.
  2. 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.
Ricerca
News
giu 3, 2010
È stato appena rilasciato, dalla società JetBrains, un nuovo IDE per la creazione rapida di progetti Web/PHP/MySQL.

tag: phpstorm, IDE, php

apr 3, 2010
Rilasciato JQuery UI in versione stabile. La release 1.8, oltre a numerosi bugfix, possiede due interessanti Widgets.

tag: jquery

mar 12, 2010
È stato da poco rilasciato il famoso forum SMF in versione 2.0RC3; tanti bugfix e un'aspetto più consolidato.

tag: smf, vbulletin, forum

mar 11, 2010
Un articolo "passo-passo" che spiega come configurare Google Apps con un qualsiasi tipo di pacchetto TopHost. Un'accoppiata vincente!

tag: TopHost, Google Apps

mar 9, 2010
Inserita la guida completa a PHP

tag: howtoprog

mar 8, 2010
Il sito è in fase di restyling; ci scusiamo per gli eventuali disagi ma, come vedrete a breve, vale la pena pazientare qualche giorno!