Bhè, normalmente si fanno 2 livelli di controlli: lato client, via javascript, all'onsubmit del form, in modo da bloccare proprio il submit alla pagina di elaborazione in caso di errori.
Se il controllo lato client funziona (oppure javascript è disabilitato), si passa al controllo lato server... potresti fare il submit verso la pagina contenente il form stesso e prevedere una class "error" in CSS (tipo con i campi incriminati contraddistinti dal classico sfondo rosso) e ricopiare comunque i dati tramite opportuni value="<?php echo($_POST['nomecampo']);>" nei vari campi del form