Es un error esperar que el browser te mantenga los datos!
Una manera es pasar los datos entre ambas paginas, para lo que podes usar get, session, cookies...
Una manera sería:
formualario.php
Código PHP:
<?
session_name('Test');
session_start();
?>
...
<?=empty($_SESSION["error"])?'':htmlentities($_SESSION["error"]);?>
...
<input type="text" name="nombre" id="nombre" value="<?=empty($_SESSION["nombre"])?'':htmlentities($_SESSION["nombre"]);?>" maxlength="255" />
<input type="text" name="apellido" id="apellido" value="<?=empty($_SESSION["apellido"])?'':htmlentities($_SESSION["apellido"]);?>" maxlength="255" />
...
guardar.php
Código PHP:
session_name('Test');
session_start();
$_SESSION["error"] = "";
...
#Levantas las variables del from
$nombre = empty($_POST["nombre"])?'':$_POST["nombre"];
$apellido = empty($_POST["apellido"])?'':$_POST["apellido"];
#Guardas todo en sessiones
$_SESSION["nombre"] = $nombre;
$_SESSION["apellido"] = $apellido;
#Supongamos que solo es apellido obligatorio.
if( empty( $nombre ) ) $_SESSION["error"] = "Debe completar su nombre";
#Ahora validamos si hay o no error:
if( ! empty( $_SESSION["error"] ) ) header("Location: formulario.php");
#Listo, estamos listo para seguir...guardar en la db, dar las gracias...recorda una vez guardado destruir las sessiones.
...
Es una no mala idea por arriba de una de las tantas maneras.