il controllo che ti ho detto va bene... se imposti una lunghezza minima (o anche controlli semplicemente con un !='') puoi tenere traccia degli "errori": se poi alla fine hai anche un solo errore il form lo riproponi.

Inoltre ti consiglio di mettere anche un controllo lato client che impedisca a priori l'invio se i campi sono vuoti (->JavaScript)