Io di solito faccio così:
Codice PHP:
<?php
$errors = array(); // o = [] per le nuove versioni di php
if(isset($_POST['submit'])){
if(trim($_POST['campo']) == ''){
$errors['campo'] = 'Campo non può essere vuoto';
}
if(!validMail($_POST['campo2'])){ // funzione che controlla la mail
$errors['campo2'] = 'Campo2 non è una mail valida';
}
// altri controlli
if(empty($erros)){
// Controlli ok, posso salvare su db o inviare mail o
// quello che si vuole
header('location: ...'); // Ridiriggo su una landing page
exit();
}
}
?>
<form ...>
<?php
$class = "input-text";
if(isset($errors['campo']))
$class .= " error";
?>
<input name="campo" class="<?php echo $class ?>" value="<?php echo @$_POST['campo'] ?>"/>
<!-- Ovviamente il value andrebbe trattato meglio per evitare che i dati messi dall'utente
rompano l'html. Visto che non è argomento della domanda ho lasciato il valore del post -->
<?php
$class = "input-email";
if(isset($errors['campo2']))
$class .= " error";
?>
<input name="campo2" class="<?php echo $class ?>" value="<?php echo @$_POST['campo2'] ?>" />
<!-- etc per gli altri campi
</form>
Chiaramente puoi anche farti una classe helper che ti semplifichi le cose