hola,
no revisé todo ese código, pero hace unos días tuve el mismo problema y lo solucioné así:
1) inicié una sesión antes de redireccionar al formulario de vuelta
2) registré una variable de sesión, un array, al que le pasé las variables de $_POST, conteniendo los datos escritos por el usuario
3) en la página de error, continúo la sesión, e imprimo los valores en las etiquetas, de estar, mediante el atributo "value" de las etiquetas HTML. Todos los inputs pueden tener un atributo "value" que es como un valor inicial del campo; <input bl bla value="valor inicial">bla bla creará un campo ya rellenado con el texto "valor inicial".
Utilicé esta forma porque las variables de $_POST se pierden en un redireciconamiento. Sin embargo el redireccionamiento es correcto, se debería de hacer así, como cuando el formulario es completado con éxito, la página de mensaje de éxito, etc, etc, no debería ser la misma del script que procesó los datos.
El array que te queda es un array asociativo (con índices basados en texto y no en números) con los mismos nombres de los campos del formulario. El código que utilicé es más o menos éste; no lo pongo todo porque sería muy largo, de todas maneras esto es lo relevante. y te conviene revistar las funciones de sesión en
manual PHP sesiones :
Código PHP:
$recuperar = array();
foreach($_POST as $indice => $valor) {
$recuperar[$indice] = $valor;
}
// sesión
session_start();
session_register("recuperar");
Así te queda un array $recuperar con los nombres de los campos de formulario como índices ($recuperar['nombre'] contendrá lo que introdujo el usuario, etc), y lo recuperas en el redireccionamiento mediante sesión, con $_SESSION['recuperar']. Nota que vas a necesitar acceder, con esta notación, a cada campo mediante $_SESSION['recuperar']['nombre de campo']...
porque $recuperar es en sí un array, y como $_SESSION es también un array, te queda un array de un array...
Luego en el output del codigo haces
Código PHP:
if ( isset($_SESSION['recuperar']['nombre de campo']) ) {
print ' value="' . $_SESSION['recuperar']['nombre de campo'] . '">'; }
etc
eso en el lugar del código que corresponda
espero haberme explicado
saludos