Dovresti impostare in maniera diversa il tuo script.
Una soluzione molto comune e valida è quella di usare un'unica pagina (magari con una statica html a cui reindirizzare l'utente quando ha inviato i dati con successo).
Codice PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['nome_tasto_submit']) ){
//ha inviato il form. Verifica i dati.
$errori = array();
if(strlen($_POST['username']) < 5){
$errori['username'] = 'Il campo username deve contenere almeno 5 caratteri.';
}
if($_POST['password'] != $_POST['conferma_password']){
$errori['password'] = 'Le due password non coincidono';
}
//ecc.
//se il form è corretto, ovviamente l'array $errori è rimasto vuoto...
if(!empty($errori)){
//esegue quello che deve eseguire (ad esempio inserire l'username nel database)
header("Location: pagina-di-success.html");
die();
}
else{
//inizializza i dati con quelli già passati via POST, cosi puo pre-impostare il form
$dati_precedenti = $_POST;
}
}
else{ //non ha ancora inviato il form. Inizializza i dati con valori vuoti. Volendo, se ad esempio è una pagina di modifica dati, è possibile inizializzare questi valori con quelli ricavati dal database.
$dati_precedenti = array('username'=>'Infocurci', 'citta'=>'Roma', 'professione'=>'Programmatore php'); //ecc ecc
}
//se arriva fin qui, vuol dire che NON è passato per l'header() inviato in occasione del form inviato con successo. Può quindi procedere direttamente alla stampa del form.
?>
<form>
<input type="text" name="username" size="20" value="<?php echo $dati_precedenti['username'];?>" />
<?php
if(isset($errori['username'])){
echo '<span class="error">'.$errori['username'].'</span>';
}
?>
</form>