Come ha scritto il mio amico Luca Ruggero in un suo bell'articolo, esistono fondamentalmente due metodi per utilizzare il metodo POST nella trasmissione dei dati tramite form: si creano due pagine, una contenente il modulo per l'invio e l'altra il codice che interpreterà i dati, oppure, si inserisce tutto il codice in una pagina che mostrerà dinamicamente o il form o l'output derivante dall'invio dei dati a seconda del comportamento richiesto.
Concettualmente, non è possibile ritenere uno dei due metodi citati come il migliore, ma in termini pratici utilizzare una sola pagina è preferibile: una sola pagina da creare, un solo codice da modificare in caso di aggiornamento, un solo documento da spedire sul server..
Form e codice su due pagine diverse
Vediamo ora come utilizzare POST su due pagine; ecco il codice del modulo che salveremo in una pagina chiamata "form.html":
<form method="POST" action="form.php"> Inserisci il tuo nome: <input type="text" name="nome"> <input type="submit" name="invia" value="Invia"> </form>Ed ecco il codice server side per l'elaborazione dei dati trasmessi da salvare nella pagina indicata nell'action del form:
<? //controlliamo che sia stato inviato il parametro if(isset($_POST['nome'])) { $nome = trim(stripslashes($_POST['nome'])); if ($nome!=="") { echo $nome; } //notifica in caso di parametro vuoto else{ echo "Non hai inserito il nome."; } //non si potrà accedere direttamente //alla pagina contenente il codice server side }else{ header("Location:form.html"); } ?>Il codice proposto è molto semplice e i commenti aiutano a chiarire i vari passaggi, al lettore non rimane altro che eseguire un test su quanto proposto.
<? //controlliamo la presenza del parametro d'invio if(isset($_POST['invia'])) { $submit = $_POST['invia']; $nome = trim(stripslashes($_POST['nome'])); if ($nome!=="") { echo $nome; }else{ echo "Non hai inserito il nome.";} }else{ //nel caso in cui manchi il parametro d'invio //verrà visualizzato il form ?> <form method="POST" action="form.php"> Inserisci un nome: <input type="text" name="nome"> <input type="submit" name="invia" value="Invia"> </form> <? } ?>Il listato proposto può essere implementato a piacere, per esempio anche in questo caso potremmo aggiungere un ulteriore controllo sull'invio del parametro "$_POST['nome']"; oppure protremmo effettuare un controllo sulla base di una querystring spedita tramite action come nell'esempio di Luca.