Buenas.
La idea es hacer un formulario con
action $_SERVER['PHP_SELF'], utilizando funciones y el array $_POST
mostrar_formulario();
validar();
procesar();
Con un campo "hidden" en
mostrar_formulario() detectamos si se ha enviado o no.
Código PHP:
//Si se ha enviado el formulario lo validamos
if (array_key_exists('check', $_POST)) {
validar();
} else {
//Si no, lo mostramos
mostrar_formulario();
}
En caso de que se haya enviado llamamos a la función validar. En esta función creamos un array $errores, y por cada infracción añadimos un elemento al array:
Código PHP:
function validar() {
//Creamos el array
$errores = array();
//añadimos elementos por cada fallo
if (strlen(trim($_POST['nombre'])) < 2) {
$errores[] = 'Debe introducir un nombre válido';
}
if (lo que sea) {
$errores[] = 'Descripción del error';
}
//Devolvemos el array
return $errores;
}
En
mostrar_formulario(), si el array $errores no está vacío lo imprimimos con foreach.
Finalmente, si el formulario ha sido enviado, y el array $errores está vacío, ejecutamos la función procesar(), en la que escribiremos lo que queramos que haga el formulario.
Respecto a mostrar los valores escritos por el usuario cuando el formulario se reimprime con los errores: creamos un array $default, al que pasamos los valores de $_POST
Código PHP:
$default = $_POST;
//Si $_POST está vacío establecemos los valores por defecto que queramos
if (!$_POST) {
$default = array ("nombre" => "Escriba su nombre",
"apellido" => "Escriba su apellido");
Y en la función
mostrar_formulario, en cada campo establecemos $default como valor por defecto:
Código PHP:
print "Nombre <input type=\"text\" name=\"nombre\" value=\"$default[nombre]\">";
Espero que sirva. Si queréis puedo poner el código completo de un formulario. Saludos