RE:Error al llenar formulario con PHP
Nada está mal con ese script. Así es el funcionamiento normal de las cosas.
Es tu trabajo como programador hacer que los datos ingresados por el usuario se recuperen en caso de que tenga que volver a ingresarlos corregidos.
Un ejemplo sencillo de cómo puedes hacer esto. Supondré que tienes dos archivos, uno con e formulario HTML y otro es el script de validación.
---- formulario.php ----
<?php
session_start();
$nombre = "";
$apellido = "";
if (isset($_SESSION["datos"])) {
$nombre = $_SESSION["datos"]["nombre"];
$nombre = $_SESSION["datos"]["apellido"];
}
?>
<html>
<body>
<form name="form1" action="validar.php" method="post">
<input type="text" name="nombre" value="<?=$nombre?>">
<input type="text" name="apellido" value="<?=$apellido?>">
<input type="submit" name="submit" value="enviar">
</body>
</html>
------ fin formulario.php --------
------ validar.php -------
<?php
session_start();
$_SESSION["datos"] = Array();
$nombre = @$_POST["nombre"];
$_SESSION["datos"]["nombre"] = $nombre;
$apellido = @$_POST["apellido"];
$_SESSION["datos"]["apellido"] = $apellido;
$err = false;
if (validar_nombre($nombre) == false) { $err = true; }
if (validar_apellido($apellido) == false) { $err = true; }
if ($err) { header("Location: formulario.php"); exit; } // Si hay error en los datos, volver al formulario.
// resto del código aquí...
unset($_SESSION["datos"]); // Si no hubo errores destruir la variable de sesión
?>
----- fin validar.php ----
En formulario.php se abre una sesión. Se inicializan un par de variables. Luego se pregunta si existe el array $_SESSION["datos"], si es así, significa que el usuario ya pasó por este formulario, entonces se procede a extraer los datos del array que fue seteado en validar.php.
Luego esos datos son puestos en el value de los inputs.
Si no existía el array $_SESSION["datos"], las variables inicializadas mostrarán nada porque implica que es la primera vez que el usuario llegó al formulario.
En validar.php se abre una sesión. Se crea el array $_SESSION["datos"] (si ya existía, sus datos se pierden, lo cual es correcto porque esos datos ya no son válidos), se pasan los datos de $_POST a variables de trabajo (para que sea más fácil trabajar con ellas más adelante) y con ellas se van creando posiciones en el array $_SESSION["datos"]. Luego se procede a validar cada uno de los datos (mediante funciones, eso te lo dejo a tu gusto). Si resulta que hay un error en los datos, se manda de regreso al formulario. Si no, se procede con el resto del código. Finalmente, como los datos son correctos, se elimina el array $_SESSION["datos"] puesto que los datos ya fueron usados.
¿Preguntas?