mm Es que lo que planteas no sólo se hace con "header()" que te serviría para redireccionar .. sino con cookies/sesiones o propagando esos datos (variables) por el URL
Lo más simple sería propagar esas X varibles en el URL
formulario.php Código PHP:
// Si hay errores se presenta el mensaje. El hecho lo define una variable de control/parámetro: "codigo"
if (isset($_GET['codigo'])){
echo "Hay un error o bla bla bla ...";
}
<form action="procesar.php" method="POST">
<input type="text" name="campo1" value="<? echo $_GET['campo1'] ?>">
<input type="text" name="campo2" value="<? echo $_GET['campo2'] ?>">
<input type="submit" name=" enviar " value="submit">
</form>
procesar.php Código PHP:
<?
// validas tus datos $_POST['campo1'] .. $_POST['campo2'] como lo tengas que hacer ...
if (...){
// Si no se cumplen tus validaciones de datos/etc .. redireccionas al formulario .. pasando las variables que llegaron aquí .. pero por el URL en modo GET.
header("location: formulario.php?estado=error&campo1=".$_POST['campo1']."&campo2=".$_POST['campo2']);
exit;
} else {
// la validación fué correcta .. haz lo que tengas que hacer.
}
?>
Los mensajes de error/exito debes presentarlos en el script que tiene el formulario o en cualquier otra .. pero NUNCA en la que hagas el header() que es donde validas o procesas esos datos. (sino tendrás problemas con "cabeceras enviadas .. bla bla".)
Esa variable "codigo" en el formulario.php tan sólo se vé si exite o no para mostrar el mensaje de error genérico .. Si te gestionas esa variables con tus própios valores podrías mostrar cosas como "falta el dato tal .. o el otro . o todos .. o bla bla".
Lo ideal para estos casos es usar sesiones .. Pero la técnica es igual: formulario -> procesa/valida .. si no es corecto -> redireccionar hacia otra(s) páginas y previamente guardar tus variables del formulario en una cookie/sesión o bien propagarlas "a mano" por el URL como en ejemplo que puse.
Un saludo,