Pues .. guardanto $_POST en una session al llegar a tu script de proceso .. si hay error .. devuelves la pagina del formulario y usas los campos value= de los formularios para predefinir sus valores originales ..
Así no ves las variables en el URL (por GET) que hay que decirlo .. tieen un límite de tañamo (no sé ahora cual es .. pero lo tiene) ..
Tu formulario:
Código PHP:
<?
session_start();
if (isset($_SESSION['variables'])){
$variables=$_SESSION['variables'];
} else {
$variables=array();
}
session_unregister("variables"); // me deshago del array sessiones . Opcional ..
?>
<input type="text" name="nombreCampo" value="<?echo $variables["nombreCampo"];?>">
Y tu formaulario que procesa ...
Código PHP:
<?
session_start();
$_SESSION['variables']=$_POST;
// etc tu código de validacion . etc ..etc
?>
Incluso puedes pasar en la sesion algun otro array .. como uno de "codigos de error" y mostar los mensajes de error personalizados en cada campo del formulario . y no en la pagina que haces el proceso de los datos redireccionando automáticamente al formulario via:
header("location: formulario.php");
en caso de errror ..
(yo lo uso así todos mis formularios de proceso)
Un saludo,