Nel passaggio [2], quando ricevi i dati inviati dal form iniziale, tutto funziona bene proprio perchè i dati "viaggiano" atraverso $_POST. Cosa che non accade quando dal passaggio [2] procedi verso il [3], difatti i valori delle variabili $nome e $cognome risultano nulli.

Il consiglio è quello di trasportare questi valori con dei campi hidden da inserire nel form del passaggio [2]...

codice:
<input type="hidden" name="nome" value="$nome">
<input type="hidden" name="cognome" value="$cognome">
Anche se, personalmente, resto del parere che lo switch sarebbe la soluzione migliore...