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
}