il procedimento che uso io e che fino ad adesso mi è sembrato il migliore è usare controlli JS nella pagina stessa in maniera tale che poi i campi, in caso di errore, non vengano cancellati.
fatta la submit del form nella pagina di elaborazione ripeto gli stessi controlli.
il doppio passaggio che faccio non è perchè sono matto e mi va di scrivere codice (cosa che si può risolvere con una funzione apposita per i check sia php che JS.
faccio il doppio controllo perchè non tutti gli utenti hanno abilitato javascript sul loro browser. la cosa è rara ma può capitare, specialmente se incappi in utenti "furboni" con manie di hacker da strapazzo che pensano di essere grandi se riescono a bypassare i controlli del programmatore.
Ciao