Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/07/2006, 04:49
Avatar de franquero
franquero
 
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Hola yconoclasta, te voy a plantear cómo hago yo los formularios con php. Creo que te puede ayudar con la validación.

1. En el formulario incluyo un input hidden (campo oculto)
Código PHP:
<input type="hidden" name="enviado" value="1"
2. La estructura del formulario, dependiendo de si ha sido enviado o no:
Código PHP:
if (array_key_exists("enviado"$_POST)) {
   
validar();
} else {
   
mostrar_formulario();

3. mostrar_formulario
Código PHP:
function mostrar_formulario() {
print<<<HTML
//El formulario se carga en esta misma página
<form action="$_SERVER
[PHP_SELF]" method="post">
<input type="radio" name="....
...
...
...
<input type="hidden" name="enviado" value="1">
<input type="submit" value="Enviar!">
</form>
HTML;

4. validar()
Código PHP:
function validar() {
//creamos un array para guardar los errores
$errores = array();
//añadimos tantos errores como fallos haya en el formulario
if (!$_POST['pregunta1']) {
   
$errores[] = 'Debe responder la pregunta 1';
}
if (!
$_POST['pregunta2']) {
   
$errores[] = 'Debe responder la pregunta 2';
}
....
//Comprobamos el array. Si tiene errores los listamos y volvemos
//a imprimir el formulario. Si no hay errores lo procesamos
if ($errores) {
   print 
'<ul>';
   foreach (
$errores as $err) {
   print 
'<li>' $err '</li>';
   }
   print 
'</ul>';
   
mostrar_formulario();
} else {
   
procesar();
}

5. procesar()
Aquí haces lo que quieras con las respuestas, sabiendo que están todas respondidas correctamente

6. Tienes que tener en cuenta que si hay algún error y el formulario se vuelve a imprimir, se perderán las respuestas que hubiera dado el usuario, por eso es conveniente recuperarlas y volver a imprimirlas en el formulario (Por lo que he leído tu formulario se basa en opciones radio, pero en caso de tener campos como text, textarea, select, se puede hacer lo mismo fácilmente):
Código PHP:
//creamos la funcion
function recuperar_respuesta($nombre,$valor) {
if ((
array_key_exists($nombre$_POST)) AND ($_POST[$nombre] == $valor)) {
$check "checked=\"checked\"";
} else {
$check '';
}
return(
$check);
}
//la aplicamos a cada pregunta
$recuperar1a recuperar_respuesta('pregunta1''a');
$recuperar1b recuperar_respuesta('pregunta1''b');
$recuperar1c recuperar_respuesta('pregunta1''c');

//la incluimos en el formulario
<input type="radio" name="pregunta1" value="a" $recuperar1a>Respuesta a<br>
<
input type="radio" name="pregunta1" value="b" $recuperar1b>Respuesta b<br>
<
input type="radio" name="pregunta1" value="c" $recuperar1c>Respuesta c<br
Espero que te sea de ayuda.
Saludos
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.