Foros del Web » Programando para Internet » PHP »

validar formulario

Estas en el tema de validar formulario en el foro de PHP en Foros del Web. que tal, El detalle es que tengo un formulario muy extenso (con mas de 25 campos) en el cual recopilo informacion de los usuarios y ...
  #1 (permalink)  
Antiguo 02/05/2006, 07:56
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
validar formulario

que tal,

El detalle es que tengo un formulario muy extenso (con mas de 25 campos) en el cual recopilo informacion de los usuarios y valido estos datos dentro de un " if " en el mismo archivo, si todo es correcto envio datos a la base de datos, de lo contrario los regreso al formulario.

Mi idea es dividir en 3 presentaciones los campos que requiero recopilar para obtener una presentacion mas limpia, pero el problema que se me presenta es en validar los datos y si estan correctos enviarlos al sig archivo. y en el ultimo archivo si todo esta bien gardar los datos en la base. Es decir ahora tengo todo en un archivo que se llama a si mismo en el form y si todo bien se finaliza, pero como puedo validar y pasar datos a otro archivo, dando por entendido que si falta algun dato retorne al mismo formulario.


gracias espero haberme explicado bien
  #2 (permalink)  
Antiguo 02/05/2006, 08:11
Avatar de vash-stampede-  
Fecha de Ingreso: abril-2006
Ubicación: En el estómago de una Rana
Mensajes: 441
Antigüedad: 18 años
Puntos: 3
No se si te entendí bien dices que quieres enviar datos a traves de tres formularios, y que en cada uno de ellos te pida información sobre los usuarios. Que si el primer formulario no esta correctamente rellenado no te pase al segundo ???? a eso te refieres ???
__________________
¡¡¡ Hoy el son de la batalla llegará hasta mi lucharemos hasta vencer o morir, hoy avanzaremos entre toda oscuridad llevando en nuestra sangre el himno de Rohan !!!!!
  #3 (permalink)  
Antiguo 02/05/2006, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Puedes usar sesiones:

En tus N formularios vas almacenando sus datos (los que vas recolectando) por formulario en una sesión (variables). Cada formulario tendría su script de proceso (o aunque lo metas todo en un mismo script . .tendría sus "if()" para ver en que paso estás). Para eso y a nivel de seguridad también te ayudaran las variables de sesión . .para que valides por ejemplo que no te "salten" al formulario N si no pasó por N-1 (el anterior).


En Scritps por separado sería algo tipo:

form1.php
Código PHP:
<?
session_start
();
// defines una variable de sesión para "Marcar" que pasastes por este formulario o vienes de este formulario y no de otro.
$_SESSION['formulario']=1;
?>
//Tu formulario.
//envias a procesa_form1.php
procesa_form1.php
Código PHP:
<?
session_start
();
if (
$_SESSION['formulario']!=1){
die (
"Acceso incorrecto .. no llega desde el form1");
}

// almacenas todo $_POST en una variable de sesión .. ´
$_SESSION['variables']=$_POST;

// validas tus $_POST variables ...

// Si hay un error .. redireccionas a form1.php 
header ("Location: form1.php");
?>
Si obtienes errores .. en $_SESSION['variables'] al redireccionar a form1.php .. tendrás tus variables del formulario para pre-establezcas sus valores originales (algo tipo):

<input type="text" name="nose" value="<? echo $_SESSION['variables']['nose'] ?>">

Y así con el resto de formularios que puedas tener en tu proceso. En el último formulario tendrás en $_SESSION['variables'] un array con todas tus variables de los N formularios .. listas para almacenarlas en tus BBDD (ya estarán validadas al menos) o para que apliques algún otro proceso de "limpieza" si lo requieres una vez validado.

Como veras .. te puedes evitar la creación y validación de la variable de sesión $_SESSION['formulario'] basandote en la validación de alguna de las otras variables de tu formulario que vas almacenando en tu $_SESSION['variables'].

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 02/05/2006, 09:33
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
gracias a ambos por responder tan pronto,

la verdad no tengo un gran conocimiento en PHP.

1. como agrego los datos de los campos del form a la variable sesion como me indicas?? se realiza de campo por campo y como los recupero en el ultimo archivo.

2. si todo esta correcto como pasamos al sig archivo

gracias
  #5 (permalink)  
Antiguo 02/05/2006, 10:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. Si te fijas $_POST es un array que contiene -todas- las variables de tu formulario que pueda contener.

Sólo las añado sumando arrays (es cierto .. se me olvidó un array_push() ..)

www.php.net/array

2) Sólo debes redireccionar si está todo correcto a tu segundo o N formulario:
header ("Location: form2.php");

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 02/05/2006, 11:36
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
pues no entiendo como agregar los datos recopilados en el formulario para pasarlos al archivo de validar_formulario, pues debe ser antes de enviarlo, bueno eso creo.

creo que es mi ultima duda en este asunto, no pudieras darme un ejemplo basico con un solo campo. ya tengo la validacion y ya entendi como pasar de unos a otros archivos solo el como guardar antes de pasar al otro archivo

gracias
  #7 (permalink)  
Antiguo 02/05/2006, 11:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. entiendes el concepto de una "sesión"? (es importante que lo entiendas .. sino no veras claro el proceso).

Conoces que $_POST es un array? ...

Cita:
pues no entiendo como agregar los datos recopilados en el formulario para pasarlos al archivo de validar_formulario, pues debe ser antes de enviarlo, bueno eso creo.
Si divides tu proceso en N formularios .. vas a tener N "envios" de datos a tus scritps de proceso. OK?.

La validación de tus formularios .. lo puedes hacer en javascript y/o en PHP .. Recomendable que simpre y en última instanancia se haga en PHP.

Cada scritp PHP de proceso va a validar las variables que este reciba ni más ni menos (podrías liarte con un script de validación "cental" .. pero si esto no lo ves claro .. menos entenderas lo otro creo yo?).

form1.php
Código PHP:
<?
// incias uso de sesiones
session_start();
// revisas si existe la variable de sesión "variables" .. si existe es que llegas 
// por un error en la validación al enviar este formulario.
if (isset($_SESSION['variables'])){
   
$variables=$_SESSION['variables'];
   echo 
"Hay errores, reviselos";
} else {
   
// definio un array vacio para poder "sumar" arrays... 
  //(si es que iniciamos el formulario por primera vez)
   
$_SESSION['variables']=array();
}
?>
<html>
<head>
</head>
<body>
<form action="procesa_form1.php" method="POST">
<input type="text" name="variable1" value="<? echo $variables['variable1']; ?>">
// tu botón de enviar.
</form>
</body>
procesa_form1.php
OJO .. este scritp es de proceso NADA de HTML por médio!!!.
Código PHP:
<?
session_start
();
// sumo array .. todo lo que me venga en $_POST (válido para el resto de formularios).
$_SESSION['variables']=array_push($_POST);

// validamos las variables del formulario1
if (empty($_POST['variable1']){
  
// si hay errores .. redirecciono al formulario.
  
header ("Location: form1.php");
  exit;
}

// Si no hay errores ...
// vamos al formulario2
header ("Location: form2.php");
?>
En tu último script de proceso tendrás un array en $_SESSION['variables'] .. recorrelo para extraer sus elementos. Los indices de este array son exactamente los mismos que el de tus nombres de los campos de tu formulario que fuistes añadiendo.

OJO, no he validado si el proceso se cumple en secuencia . pero eso ya lo podrás hacer tu guiandote por la existencia de alguna de las variables que contenga el formulario anterior en el formulario que llegas (de la sesión).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 03/05/2006, 09:38
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
que pena que te siga molestando pero no esta guardando las variables.

y creo que la sintaxis del array_push() esta mal me marca un warning

esta correcto $_SESSION['variables']=array_push($_POST);
  #9 (permalink)  
Antiguo 03/05/2006, 09:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, es cierto que hay un error en el uso de array_push() .. pero si tienes un problema debes hacer dos cosas:

1) Indicar el error "textual" que obtienes.
2) revisar la documentación de PHP al respecto ... (nos podemos equivocar).

Si no me equivoco esta vez .. el uso correcto sería:

array_push($_SESSION['variables'],$_POST);

para más información:
www.php.net/array_push

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 03/05/2006, 12:12
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
ya visite la pagina que me indicas antes de poner el mensaje enterior, y ya probe de varias maneras pero no encuentro la solucion para hecharlo andar.

te pongo el texto y me comentas en que estoy mal, algunas cosas las notaras no como me indicas pero es que como te digo ya probe de varias formas

formulario1.php

Código PHP:
<?php session_start(); 
$_SESSION['formulario']=1
if (isset(
$_SESSION['variables']))
  { 
   
$variables=$_SESSION['variables']; 
   echo 
"error en el formulario" ;
  } else { 

   
$_SESSION['variables']=array(); 
   echo 
"si entro" ;
  } 
?>
<html>
<head>
<title>formulario 1</title>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta http-equiv="pragma" content="no-cache" />
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" id="body">
<form action="valida_formulario1.php" method="post" >
  <table border="0" width="330" cellpadding="2" cellspacing="2" align="center" id="tbl_aluno">
    <tbody>
      <tr>
        <td align="left" colspan="3"><hr>
        </td>
      </tr>
      <tr>
        <td colspan="3" align="left"> </td>
      </tr>
      <tr>
        <td align="left" colspan="3"><font color="#666666" size="3" face="Arial"><b>Datos del coordinador responsable</b></font></td>
      </tr>
      <tr>
        <td height="20" colspan="3" valign="middle">&nbsp; </td>
      </tr>
      <tr>
        <td width="175" height="20" align="left" valign="middle" ><b> Instituci&oacute;n:</b></td>
        <td width="242" height="20" align="left" valign="middle" >
          <input maxlength="50" size="36" type="text" id="institucion_local2" name="institucion_local" value="<? echo $_SESSION['variables'?>"></td>
      </tr>
      <tr>
        <td height="20" align="left" valign="middle" ><b>Departamento:</b></td>
        <td height="20" align="left" valign="middle" >
          <input maxlength="50" size="36" type="text" id="dpto" name="dpto" value="<? echo $_SESSION['variables'?>">
        </td>
      </tr>
      <tr>
        <td colspan="3" valign="middle"><font color="#666666" size="3" face="Arial"> <a id="href_continuar">
          <input name="image" type="image" src="soicitud/btn_continuar.gif" alt="" width="92" height="20" border="0">
        </a></font></td>
      </tr>
    </tbody>
  </table>
</form>
</body>
</html>
valida_formulario1.php


Código PHP:
<?php session_start(); 
if (
$_SESSION['formulario']!=1)

            die (
"Acceso incorrecto .. no llega desde el form1"); 
            
// Si hay un error .. redireccionas a form1.php  
            
header ("Location: formulario1.php");
}else{

            if (empty(
$_POST['institucion_local']))
              { 
              
array_push($_SESSION['variables'],$_POST['dpto']);  
              
header ("Location: formulario1.php"); 
              exit(); 
              } 
            
session_start();
            
array_push($_SESSION['variables'],$_POST['institucion_local']);             

            echo 
$_SESSION['variables']['institucion_local']; 
            echo
"<br>";
            echo 
$_POST['institucion_local'];
            echo
"<br>";
            echo 
$_POST['dpto'];
            
//header ("Location: forma2.php"); 
    
}
?>

ayuda por favor con esto que ya me tiene
es un pequeño paso para ustedes pero un gran paso para la humanidad
  #11 (permalink)  
Antiguo 03/05/2006, 13:47
 
Fecha de Ingreso: enero-2003
Ubicación: Aguascalientes, Aguascalientes
Mensajes: 191
Antigüedad: 21 años, 3 meses
Puntos: 1
pues tuve que hacer varias cambias para que me funcionara, no se si es lo mas correcto pero realiza lo que buscaba.

ojala me corrijan los horrores que vean


Código PHP:
<?php session_start(); 
$_SESSION['formulario']=1
if (isset(
$_SESSION['variables']))
  { 
   
$variables=$_SESSION['variables']; 
   echo 
"error en el formulario" ;
  } else { 

   
$_SESSION['variables']=array(); 
   echo 
"si entro" ;
  } 
?>
<html>
<head>
<title>formulario 1</title>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta http-equiv="pragma" content="no-cache" />
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" id="body">
<form action="valida_formulario1.php" method="post" >
  <table border="0" width="330" cellpadding="2" cellspacing="2" align="center" id="tbl_aluno">
    <tbody>
      <tr>
        <td align="left" colspan="3"><hr>
        </td>
      </tr>
      <tr>
        <td colspan="3" align="left"> </td>
      </tr>
      <tr>
        <td align="left" colspan="3"><font color="#666666" size="3" face="Arial"><b>Datos del coordinador responsable</b></font></td>
      </tr>
      <tr>
        <td height="20" colspan="3" valign="middle">&nbsp; </td>
      </tr>
      <tr>
        <td width="175" height="20" align="left" valign="middle" ><b> Instituci&oacute;n:</b></td>
        <td width="242" height="20" align="left" valign="middle" >
          <input maxlength="50" size="36" type="text" id="institucion_local" name="institucion_local" value="<? echo $_SESSION['institucion_local'?>"></td>
      </tr>
      <tr>
        <td height="20" align="left" valign="middle" ><b>Departamento:</b></td>
        <td height="20" align="left" valign="middle" >
          <input maxlength="50" size="36" type="text" id="dpto" name="dpto" value="<? echo $_SESSION['dpto']?>">
        </td>
      </tr>
      <tr>
        <td colspan="3" valign="middle"><font color="#666666" size="3" face="Arial"> <a id="href_continuar">
          <input name="image" type="image" src="soicitud/btn_continuar.gif" alt="" width="92" height="20" border="0">
        </a></font></td>
      </tr>
    </tbody>
  </table>
</form>
</body>
</html>
valida_formulario1.php


Código PHP:
<?php session_start(); 
if (
$_SESSION['formulario']!=1)

            die (
"Acceso incorrecto .. no llega desde el form1"); 
            
header ("Location: formulario1.php");
}else{

            if (empty(
$_POST['institucion_local']))
              { 
                
$_SESSION['institucion_local']=$_POST['institucion_local'];
                
$_SESSION['dpto']=$_POST['dpto'];
                
header ("Location: formulario1.php"); 
                exit(); 
              } 
            
$_SESSION['institucion_local']=$_POST['institucion_local'];
            
$_SESSION['dpto']=$_POST['dpto'];
            
array_push($_SESSION['variables'],$_SESSION['institucion_local'],$_SESSION['dpto']);              
            echo
"<br>";
            echo 
$_SESSION['variables'][0];
            echo
"<br>";
            echo 
$_SESSION['variables'][1];
            echo
"<br>";
            
//header ("Location: forma2.php"); 
    
}
?>
gracias por tu ayuda Cluster
  #12 (permalink)  
Antiguo 03/05/2006, 14:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si usas un "exit" tipo:

Código PHP:
<?
if ($_SESSION['formulario']!=1
{              
            
header ("Location: formulario1.php"); 
            exit;
}
Te evitas tener que hacer el "else" y cerrarlo (}) mas abajo ...

Ten presente que si hay un error vas a redireccionar si o si hacia el fomulario (y si no redireccionas como ahora que usas el die() .. no tiene sentido ese "header()" ahí de tipo "Location").

Si tienes que mostrar un mensaje de error o exito .. muestralo en el escript que redireccionas (tu formulario1.php en tu caso, para eso pasa alguna variable de sesión .. tal cual lo haces con las otras variables para identificar que llegas por ese lado).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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:48.