Infatti non ti conviene fare un refresh
Ti conviene fare una cosa del genere (esempio con 2 campi)
Codice PHP:
<?php
$campo1 
="";
$campo2 ="";
if(isset(
$_POST["campo1"]))
  
$campo1 $_POST["campo1"];
if(isset(
$_POST["campo2"]))
  
$campo1 $_POST["campo2"];

// fai tutti i controlli

if($errore)
{
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"?>">
<input type=text name="campo1" value="<?php echo $campo1?>">
<input type=text name="campo2" value="<?php echo $campo2?>">
<input type=submit value="invia" name="invia">
</form>
<?php
} else {
// Quello che deve avvenire in caso di dati corretti
}