Foros del Web » Programando para Internet » PHP »

validar form y si no se cumplen las validaciones volver al form

Estas en el tema de validar form y si no se cumplen las validaciones volver al form en el foro de PHP en Foros del Web. Hola a todos. A ver. tengo un formulario. para simplificar diremos que tiene dos campos: Código PHP: < form name = "form"  action = "formnophp.php"  method ...
  #1 (permalink)  
Antiguo 15/10/2008, 02:20
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
validar form y si no se cumplen las validaciones volver al form

Hola a todos. A ver. tengo un formulario. para simplificar diremos que tiene dos campos:

Código PHP:
<form name="form" action="formnophp.php" method="POST">
<
input type="text" name="nombre"></input>
<
input type="text" name="apellidos"></input>
<
input type="submit" name="enviar" value="Enviar">&nbsp;
<
input type="submit" name="quitar" value="Eliminar">
</
form
el archivo formnophp.php que lo procesa tiene este código:

Código PHP:
$nombre trim($_POST[nombre]);
$apellidostrim($_POST[apellidos]);
 
if (empty(
$nombre))
{
echo 
"Ingrese Nombre<br>";
}
if (empty(
$apellidos))
{
echo 
"Ingrese Apellidos<br>";

bien. hasta aquí todo bien. lo que yo quiero es que la validación la haga y si no introduce alguno de los campos me devuelva al form sombreando el campo que ha quedado vacío y respetando el campo que ha metido. por ejemplo, supongamos que ha metido el campo nombre y el campo apellidos lo ha dejado en blanco. al darle a enviar lo que quiero es que procese el archivo formnophp.php, realice las validaciones y como comprobará que el campo apellidos está vacío, me devuelva a la página del form donde deberá recoger lo introducido en el campo nombre y sombrear el campo apellidos que es el que está vacío.

alguna ayuda? gracias....
  #2 (permalink)  
Antiguo 15/10/2008, 02:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: validar form y si no se cumplen las validaciones volver al form

Para ese tipo de cosas suelo meter el form en una función:

Código php:
Ver original
  1. function showForm($data) {
  2. ?>
  3.  
  4.     <form name="form" action="formnophp.php" method="POST">
  5.         <input type="text" name="nombre" value=<?=$data['nombre'];?>></input>
  6.         <input type="text" name="apellidos" value=<?=$data['apellidos'];?>></input>
  7.         <input type="submit" name="enviar" value="Enviar">&nbsp;
  8.         <input type="submit" name="quitar" value="Eliminar">
  9.     </form>  
  10. <?
  11. }

Al llamar a la función showForm le puedes pasar como parámetro el array $_POST, por ejemplo (u otro array qye hayas generado tú parseando los datos, pero siempre teniendo en cuenta que debe respetar el nombre de los indices del mismo).

Para el tema del sombreado usa CSS. Define una clase normal (si quieres) y otra para el caso en el que los datos sean incorrectos. Así una manera fácil y rápida de hacerlo sería tener un array paralelo al de los datos donde tengas la clase a usar:


Código php:
Ver original
  1. if ($_POST['nombre'] == "")  //o la condición con la que valides el campo....
  2.     $dataClass['nombre'] == 'error');
  3. else
  4.     $dataClass['nombre'] == 'correcto');

y la función del formulario quedaría aśi:

Código php:
Ver original
  1. function showForm($data, $class) {
  2. ?>
  3.  
  4.     <form name="form" action="formnophp.php" method="POST">
  5.         <input type="text" name="nombre" class="<?=$class['nombre'];?>" value="<?=$data['nombre'];?>"></input>
  6.         <input type="text" name="apellidos" class="<?=$class['apellidos'];?>" value=<?=$data['apellidos'];?>></input>
  7.         <input type="submit" name="enviar" value="Enviar">&nbsp;
  8.         <input type="submit" name="quitar" value="Eliminar">
  9.     </form>  
  10. <?
  11. }

Y le pasas como parámetro los dos arrays, el de los datos y el de las clases.

Es una forma rápida, muy mejorable y optimizable, pero es un comienzo para ir tirando...
  #3 (permalink)  
Antiguo 15/10/2008, 04:17
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

bueno...antes de anda, gracias....buff....he hecho lo que me pides pero no sé realmente como cuadrarlo todo para que funcione. que debería poner en el archivo del form y qué en la validación, en formnophp?
  #4 (permalink)  
Antiguo 15/10/2008, 04:47
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: validar form y si no se cumplen las validaciones volver al form

¿Utilizas dos ficheros diferentes? ¿Uno para el formulario y otro para la validación? Creo que en tu caso sería más efectivo usar un sólo archivo para ambas cosas.

Así a grandes rasgos yo haría lo siguiente:

- Comprobar si viene a través del formulario o no (se puede comprobar con la variable $_POST, con el método, etc...)
- Si viene del formulario haces la validación
- Si es validado haces las operaciones correspondientes y luego puedes redirigir a otra página o mostrar ahí mismo los resultados.
- Si no se valida, vuelves a mostrar el formulario, pasando como parámetros los datos que habías recibido por POST así como los campos incorrectos (para cambiarles la clase CSS)
- Y si no viene a través del formulario, lo muestas igualmente, sólo que el array que le pasas estará con datos vacios (o con los datos por defecto si los hay).

Más o menos así lo haría yo.
  #5 (permalink)  
Antiguo 15/10/2008, 05:35
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

buff...cada vez más liada....te cuento:

yo tengo dos archivos: uno el form.php que recoge el formulario y otro el formnophp.php que procesa y valida los datos.

form.php
Código PHP:
<form name="form" action="formnophp.php" method="POST">
<
input type="text" name="nombre"></input>
<
input type="text" name="apellidos"></input>
<
input type="submit" name="enviar" value="Enviar">
</
form
el archivo formnophp.php tiene:
Código PHP:
$nombre trim($_POST[nombre]);
$apellidos trim($_POST[apellidos]); 
if (empty(
$nombre ))
{
echo 
"Ingrese Nombre<br>";
}
if (empty(
$apellidos))
{
echo 
"Ingrese Apellidos<br>";

bien. yo como te decía lo que quiero es que si la validación no se cumple devuelva nuevamente al archivo form.php mostrando los campos que no se cumplen y respetando lo introducido en aquellos que se cumplen. a partir de aquí, trato de seguir tus consejos y orientaciones pero me temo que estoy más hecha un lío que al principio.
  #6 (permalink)  
Antiguo 15/10/2008, 05:59
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: validar form y si no se cumplen las validaciones volver al form

A lo que yo me refería es a algo de éste estilo:


Código php:
Ver original
  1. <?
  2. function showForm($data, $type) {
  3.  
  4.     $class[0] = 'no_ok';
  5.     $class[1] = 'ok';
  6. ?>
  7.         <form name="form" action="" method="POST">
  8.             <input type="text" name="nombre" class="<?=$class[$type['nombre']]?>" value="<?=$data['nombre'];?>"></input>
  9.             <input type="text" name="apellidos" class="<?=$class[$type['apellidos']]?>" value="<?=$data['apellidos'];?>"></input>
  10.             <input type="submit" name="enviar" value="Enviar"> 
  11.         </form>  
  12. <?
  13.  
  14. }
  15.  
  16.  
  17.  
  18.  
  19. function validate($data, &$type) {
  20.    
  21.     $result = 1;
  22.  
  23.     $nombre = trim($data['nombre']);
  24.     $apellidos = trim($data['apellidos']);
  25.     if (empty($nombre)) {
  26.         $result = 0;
  27.         $type['nombre'] = 0;
  28.     } else
  29.         $type['nombre'] = 1;
  30.     if (empty($apellidos)) {
  31.         $result = 0;
  32.         $type['apellidos'] = 0;
  33.     } else
  34.         $type['apellidos'] = 1;
  35.  
  36.     return $result;
  37.  
  38. }
  39.  
  40.  
  41. ?>
  42. <html>
  43. <head>
  44.     <style type="text/css">
  45.         .ok {
  46.             background: green;
  47.         }
  48.         .no_ok {
  49.             background: red;
  50.         }
  51.  
  52.     </style>
  53.  
  54. </head>
  55.  
  56. <body>
  57.  
  58. <?
  59.  
  60. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  61.  
  62.     $data = $_POST;
  63.     $result = validate($data, $type);
  64.     if ($result == 1)
  65.         echo "TODO OK, aquí redireccionamos, o mostramos lo que sea...";
  66.     else
  67.         showForm($data, $type);
  68. }
  69. else {
  70.     $data['nombre'] = "";
  71.     $data['apellidos'] = "";
  72.     $type['nombre'] = 1;
  73.     $type['apellidos'] = 1;
  74.  
  75.     showForm($data, $type);
  76.  
  77. }
  78.  
  79. ?>
  80.  
  81. </body>
  82. </html>


Es un ejemplo muy básico y optimizable, pero por ahí van los tiros.
  #7 (permalink)  
Antiguo 15/10/2008, 06:31
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

ok...entiendo entiendo.....voy a trabajar sobre el tema....ya os cuento....gracias por todo Keysher:corazo n:
  #8 (permalink)  
Antiguo 15/10/2008, 12:18
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

Perfecto. va genial!!! ahora sólo me queda una única duda. todo lo tengo en una única página llamada form.php. trata de validar y comprueba si están los campos. todo correcto. pero si están los campos bien cumplimentados debería llevar a la acción del form:

<form name=form method=post action=procesar.php>

el archivo procesar lo que hace es meter los valores de los campos introducidos en una base de datos.

cuál es el problema? que todo el script funciona de miedo si el campo action está vacío. pero en el momento en el que le meto la página procesar.php, se olvida de hacer las validaciones y lo lleva directamente a la página procesar sin hacer las validaciones.

por qué es eso?

por último, cómo haría para, en el campo que está vacío, a parte de iluminarse en rojo como tenemos ahora, salga una frase del tipo Este campo es obligatorio
  #9 (permalink)  
Antiguo 15/10/2008, 12:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: validar form y si no se cumplen las validaciones volver al form

Eso es normal, ten en cuenta que el "action" indica a qué página ha de mandarse el formulario, y esa página es la que se carga.

Si tienes la validación (o las consultas a la BDD) en otra página tendrías que hacer una redirección en algún punto... (ya sea a la hora de volver a mostrar el formulario si la validación ha fallado, o cuando valida correctamente y quieres introducir los datos). Lo malo de esto es que tendrías que pasar las variables entre las dos páginas.

Personalmente lo haría todo en una misma página, es decir, pilla el código que tienes para cuando se validan los datos, mételo en una función, incluyelo en el fichero que tenemos y en el if correspondiente, llama a esa función.

El código que puse es un ejemplo básico de cómo se puede hacer, es muy mejorable y, sobre todo, personalizable. Era simplemente para que se entendiese la lógica.

Con respecto a lo del estilo del formulario... para eso está CSS... Diseña primero cómo quieres que sea el formulario en todos los estados (sin datos, con datos metidos, datos erroneos, etc...), una vez que tengas claro cómo quieres que sea crealo con HTML y CSS. Después ya vendrá idear cómo generearlo dinámicamente con PHP para cada caso....
  #10 (permalink)  
Antiguo 16/10/2008, 03:00
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

Nada....no soy capaz de que me procese los datos cuando todo está validado...lo he intentado poniendo en el if un header que redirija a la página de procesar; metiendo una función...nada....


y tampoco soy capaz de sacar el mensajito debajo de cada campo vacío...buff....demasiado para mis pobres conocimientos....alguna ayuda?
  #11 (permalink)  
Antiguo 16/10/2008, 04:11
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: validar form y si no se cumplen las validaciones volver al form

Umm, explica un poco cómo quieres que sea el formulario, qué campos tiene y qué quieres que se muestre en cada caso...

Y postea el código que quieres que se ejecute cuando se validen los campos.
  #12 (permalink)  
Antiguo 16/10/2008, 04:30
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validar form y si no se cumplen las validaciones volver al form

ok. vamos a partir del formulario que estamos utilizando para el ejemplo. cuando todo va bien (es decir, cuando validamos correctamente los datos), se envía todo al archivo procesar.php. este archivo procesar lo que hace es meter esos datos en dos campos de una tabla de base de datos. en definitiva lo que tiene procesar.php es lo siguiente:

Código PHP:
$nombre=$_POST[nombre];
$apellidos=$_POST[apellidos];

mysql_query("INSERT INTO tabla(nombre,apellidos) VALUES('$nombre,'$apellidos')"); 

   
header("Location: correcto.php"); 
traté de poner en el action este archivo procesar.php. evidentemente no funcionaba, no validaba nada. lo que hice después es redirigir mediante un header en el if si la validación había sido correcta:
Código PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$data $_POST;
$result validate($data$type);    
if (
$result == 1)        
header ('Location: procesar.php');
else 
showForm($data$type);}
..... 
y por último directamente metí en una función todo el procesar.php. tampoco.

respecto al mensajito. supongamos estos dos campos. ya se ha conseguido que el campo que esté vacío o no pase la validación se sombree de rojo. ahora el tema está en que además de sombrearse de rojo ese campo, aparezca al lado el mensaje "El campo nombre es obligatorio" o "El campo apellidos es obligatorio".

quizás esté abusando excesivamente de tus conocimientos y tu amabilidad. de cualquier manera, gracias Keysher
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:30.