Pues si pasa algún error .. vuelve a tu formulario con un link directo (o redireccionamiento) .. pero ahí le tendrás que pasar "todas" las variables que recibistes y validastes con algún error en tu script PHP que procesó esas variables ..
Yo para eso uso sesiones:
procesa_formulario.php Código PHP:
<?
// valido mis $_POST['variable'] .. (o el metodo que use ..)
// si hay error:
// Me guardo el array POST enterito en una sesión ...
$_SESSION['form_variables']=$_POST;
// y redirecciono a mi formulario ...
// si lo requiero .. le paso a formulario.php?error=blabla alguna variable .. o incluso ese error se lo paso como otra variable de sesión (es lo ideal esto último ..)
header("location: formulario.php");
exit;
?>
Y mi formulario ..
formulario.php Código PHP:
<?
// incio uso sesiones ...
session_start();
// miro si está definida mi variable de sesión (que es un array)
// y contine mis variables del formulario ...
if (isset($_SESSION['form_variables'])){
// lo asigno a una variable "temporal" ...
$form=$_SESSION['form_variables'];
// me deshago de la variable de sesion .. por si recargo página que me quede límpio el formulario ..
session_unregister('form_variable');
// debería ser unset($_SESSION['form_varibale']); .. pruebalo ..
}
?>
<html>
<form ....>
<!-- Uso el campo value= .. para asignarle el valor de la variable (dentro del elemento del array que guardé) que le corresponde como estado inicial .. -->
<input type="text" name="nombre" value="<?php $form['nombre'] ?>">
<!-- etc ... -->
</form>
</html>
Eso sería más o menos el código principal .. por supuesto faltan detalles como aplicar stripslashes() si es necesario (para devolver a tu formulario caracteres límpios de caracteres: \ de más .. .. etc..) y de aplicar más isset() antes de mostrar el dato en el formulario ... También es un ejemplo muyy básico .. se complica un poco a la hora de predefinir estados iniciales de "select's" .. "radio" y "checkbox" elementos de formulario.
Esto mismo podrías hacerlo "paseando" tus variables por el URL (propagadas en el header(location ... formulario.php?varible=valor&otra=valor ... etc ..) .. o con Cookies ...
Un saludo,