Si, alla fine del procedimento devi distruggere i dati di sessione.
E' normale che non funzioni! I dati post al terzo passaggio non ce li hai più! Ce li hai in $_SESSION['form']!
Ci sono un po' di teatri. Al terzo passaggio non essendo impostato alcun valore post la sessione viene sovrascritta con un valore vuoto.
Ecco come funziona il tutto
Codice PHP:
<?PHP
session_start(); //"Apro" la sessione...
error_reporting(E_ALL); //Chiedo che siano attivati i "notice" su *tutti* gli errori
//==== PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
if (isset($_POST['invia'])) {
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
$_SESSION['form']['invia'] = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$_SESSION['form']['insert'] = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$_SESSION['form']['nome'] = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$_SESSION['form']['cognome'] = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
echo "$key => $value
"; //<== Questa è un'aggiunta per averci sempre sott'occhio i valori dell'array; poi la levo ;-)
}
echo "<html><head><title>[2] == Controlla i dati</title></head>
<body>
2).
Ciao, $nome $cognome!
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
<input type=\"reset\" value=\"Cambia i dati\" onclick=\"java-script:history.back()\">
<input type=\"submit\" value=\"INSERISCI!\" name=\"insert\">
</form>
</body>
</html>";
}
//==== PASSAGGIO N° [3]: STAMPA dei dati inseriti ========//
else if (isset($_POST['insert'])) {
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
echo "$key => $value
"; //<== Questa è un'aggiunta per averci sempre sott'occhio i valori dell'array; poi la levo ;-)
}
echo "<html><head><title>[3] == Valori per \"$nome $cognome\"</title></head>
<body>
3).
Ho inserito i dati \"[b]$nome $cognome[/b]\" nel DB!
</body>
</html>";
// Se tutto è andato bene a questo punto devi distruggere la sessione
unset( $_SESSION['form'] ) ;
}
else {
//==== PASSAGGIO N° [1]: Inserimento dei dati ========//
echo "<html><head><title>[1] == Inserisci i dati</title></head>
<body>
1).
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
Nome: <input name=\"nome\" size=\"30\">
Cognome: <input name=\"cognome\" size=\"30\">
<input type=\"reset\" value=\"CiòripenZato...\">
<input type=\"submit\" value=\"OK\" name=\"invia\">
</form>
</body>
</html>";
}
?>
Cmq rimango dell'opinione che devi usare gli array superglobali e non delle variabili abbreviate. E' una regola di buona programmazione! Se intendi usare le variabili in questo modo, inoltre c'è la direttiva register global che prima era settata ad on (e quindi si otteneva la stessa cosa che vuoi ottenere tu ma senza il foreach). Ora è settata ad off per problemi di sicurezza. USA GLI ARRAY SUPERGLOBALI! Ti ho illustrato l'uso del foreach per questo scopo solo per didattica e non per fartelo usare in uno script reale.