Soluzioni, talvolta anche bizzarre, ce ne sono a decine ma la piu' logica e' quella prevista dal pattern PRG il quale suggerisce di utilizzare il metodo POST soltanto per l'invio dei dati della form e l'esecuzione di operazioni ed alla fine utilizzare un comando di reindirizzamento per far vedere l'output agli utenti.
HTTP 1.1 (RFC 2616) ha infatti introdotto il codice di risposta HTTP 303 See Other per gestire questi tipi di situazioni e assicurare che se l'utente effettua un refresh della pagina non venga generata una nuova esecuzione del codice.
La realizzazione di questo pattern e' abbastanza semplice, utilizzando il linguaggio di programmazione PHP (ma puo' essere realizzata in qualunque linguaggio) in linee generali sono necessari tre file:
1) form.php in cui sara' presenta la form dove l'utente inserira' i dati da inviare
Codice: Seleziona tutto
<form name="NomeForm" action="elaborazione.php" method="post">
...i vari input...
</form>
...elaborazione dei dati...
Codice: Seleziona tutto
header("HTTP/1.1 303 See Other");
header("Location: http://$_SERVER[HTTP_HOST]/risposta.php");
die();
Codice: Seleziona tutto
<p>Elaborazione della form effettuata con successo!!!</p>
I piu' attenti di voi si chiederanno come mai all'inizio di questa discussione e' stato menzionato anche il metodo GET se fin qui non e' mai stato utilizzato; tale metodo non e' che un potenziamento di cio' che possiamo fare, infatti se abbiamo la necessita' di legare la pagina di risposta a dati inviati tramite la form basta semplicemente inviarli tramite GET in fase di reindirizzamento:
in elaborazione.php avremo
Codice: Seleziona tutto
header("Location: http://$_SERVER[HTTP_HOST]/risposta.php?formInput1=$_POST['formInput1']");
Codice: Seleziona tutto
echo $_GET['formInput1'];
Roberto Basile