Foros del Web » Programando para Internet » PHP »

manejo extenso de formulario en php

Estas en el tema de manejo extenso de formulario en php en el foro de PHP en Foros del Web. hola tengo un formulario muy grande por la cual lo he dividio en 4 paginas, y quisiera que al pulsar el boton guardar datos y ...
  #1 (permalink)  
Antiguo 25/03/2004, 10:35
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 4 meses
Puntos: 0
manejo extenso de formulario en php

hola tengo un formulario muy grande por la cual lo he dividio en 4 paginas, y quisiera que al pulsar el boton guardar datos y continuar se guardara los datos de esa primera pagina y luego continuara con la segunda y asi sucesivamente hasta llegar a la ultima.

me habian dicho que habia que capturar el id pero lo envio por post? y luego que hago un UPDATE de los siguientes campos?
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #2 (permalink)  
Antiguo 25/03/2004, 10:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En estos casos se suele usar más bien sesiones (yo por lo menos lo hago así) .. voy almacenando en una sesisión todas las variables de mis formularios que tenga en el proceso y al final hago un único INSERT o UPDATE según corresponda a la BD .. Es más .. si en el proceso de esos 4 o N formularios (parcelados pero que son uno mismo ..) cancelan el proceso por cualquier eventualidad .. los datos que pudieran haber ingresado no me quedan incompletos en la BD.

Pero .. si quieres ir guardandolos en tu BD . .el primer formulario tendrá que genera el "INSERT" con los datos que tenga en ese momento .. rescatar el ID obtenido de ese registro creado (mysql_insert_id() o similar) y de ahí propagar el ID obtenido (a ser posible por seguridad en una variable de sesión) para que los subsiguientes formularios hagas sólo un UPDATE condicional a ese registro por ese ID (UPDATE .. WHERE ID=$id ...).

El problema vendrá cuando el proceso no se llegue a completar por entero .. ahí tendrás que implementar rutinas para borrar esos registros incompletos y/o usar algún campo extra en tu BD que indique que el proceso se completó correctamente pasando por esos X formularios (páginas) ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 25/03/2004, 11:09
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 4 meses
Puntos: 0
ok

Ok cluster yo lo tengo como dices por sesiones y que a lo ultimo ingrese todos los datos, pero en mi trabajo no ha funcionado eso porque donde se conecta cuentan con un acceso telefonico muy malo y cuando se cae el internet pierden lo que han ingresado porque no alcanzan a llegar a la ultima pagina que es donde se guarda la info.

lo que quisiera hacer y que te comente arriba es hacer un ingreso por páginas y luego hacer una especie de update del mismo registro y continuar por las 4 secciones de mi formulario hasta completarse.

en la tarde coloco un codigo de ejemplo para que me vayas orientando si puedes con lo del mysql_insert_id().


__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #4 (permalink)  
Antiguo 25/03/2004, 11:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm supongo que tendras algún tipo de gestión de usuarios y pasarán por un "login" antes de entrar a rellenar ese formulario extenso que tienes? .. Te lo comento por qué tendra que indentificar de alguna forma segura quien se quedó " a medias" rellenado ese formulario para poder ofrecerle la opción de "continuar" con el mismo ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 26/03/2004, 08:45
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 4 meses
Puntos: 0
hola de nuevo

Hola Cluster!

Efectivamente tengo en mi sistema una parte de autenticación que para poder leer / escribir tienen que loguearse primero, incluso en mi form largo, al momento de yo ingresar la información coloque un campo oculto que guarda el nombre de la persona que ingreso esa información, por ahi logro identificar quien fue el que ingreso X registro por decir, además tengo un checkbox que el usuario tiene que elegir donde el espefica si va a llenar todo el formulario de una vez? o va a llenar la primera parte o la segunta y luego continua hasta terminarlo.

ahora estaba pensando en como sería para ingresar por partes el form, de mi archivo parte1.php por post envio datos a parte2.php donde aqui le espera su primer insert

Código PHP:
$sql="INSERT INTO tabla (pendiente, fecharegistro, persona, departamento, dos, ciudad, ciudaddos, fechades, fecharet, a01, a02, a03, a04, b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51 b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b70) VALUES ('$pendiente', '$fecharegistro', '$persona', '$departamento', '$dos', '$ciudad', '$ciudaddos', '$fechades', '$fecharet', '$a01', '$a02', '$a03', '$a04', '$b01', '$b02', '$b03', '$b04', '$b05', '$b06', '$b07', '$b08', '$b09', '$b10', '$b11', '$b12', '$b13', '$b14', '$b15', '$b16', '$b17', '$b18', '$b19', '$b20', '$b21', '$b22', '$b23', '$b24', '$b25', '$b26', '$b27', '$b28', '$b29', '$b30', '$b31', '$b32', '$b33', '$b34', '$b35', '$b36', '$b37', '$b38', '$b39', '$b40', '$b41', '$b41', '$b42', '$b43', '$b44', '$b45', '$b46', '$b47', '$b48', '$b49', '$b50', '$b51', '$b52', '$b53', '$b54', '$b55', '$b56', '$b57', '$b58', '$b59', '$b60', '$b61', '$b62', '$b63', '$b64', '$b65', '$b66', '$b67', '$b68', '$b69', '$b70')";

mysql_query($sql) or die("Error en consulta <br>MySQL dice: ".mysql_error());
echo 
"Los Datos han sido ingresados correctamente!, continue con la parte II"
bien y en la parte 2 envio datos a la parte 3 donde el insert tiene que llevar el mysql_insert_id() ? pero ya no sería INSERT sino UPDATE ??


__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #6 (permalink)  
Antiguo 26/03/2004, 09:23
 
Fecha de Ingreso: marzo-2004
Ubicación: Toluca, Mx
Mensajes: 19
Antigüedad: 13 años, 8 meses
Puntos: 0
Lo q puedes hacer es hacer un insert en la primera parte, al pasar a la siguiente parte cargas tus campos en variables de sesión, al terminar de llenar la parte haces un insert de los datos nuevos y un update con los datos que traes en las variables de sesión.
  #7 (permalink)  
Antiguo 26/03/2004, 09:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sobre el tema de los checkbox para que el usuario diga si va a ejecutar todo el formulario de una vez o en várias páginas .. eso lo decides tu si lo deseas .. pero, el hecho de saber tu sistema cual formulario es el que le corresponde a ese usuario en ese proceso deber de hacerlo "automático" ..

Para eso, puedes usar un campo "contador" extra en tu BD que indique en que formulario está y se actualize con cada formulario que se rellena hasta llegar al último de una série de X formularios.

Para obtener el ID de tu primer fomulario que es donde has creado el registro para esa tabla .. usa: (es la versión SQL equivalente a mysql_last_id() de PHP .. )

1er formulario (proceso_form_1.php)

Haces el INSERT con los datos que tengas de ese formulario (ojo con los campos con valor requerido que te dará problemas Msyql ..). Define el campo extra que va a controlar el contador de formularios con valor "1" (y valor predefinido 0 cuando definas el campo en cuestión)

seguidamente obtienes el ID que ha generado automáticamente el campo que uses como "autoincremental" ...

Código PHP:
  // obtener ID 
    
$sql_id_nose="SELECT LAST_INSERT_ID() FROM clientes";
    
$id_nose=mysql_result($sql_id_nose,0); 
ahí en $id_nose (cambia las varibles/nombre tabla como gustes) obtendrás tu ID .. el cual usaras para los subsiguientes formularios para hacer el Update condicional bajo ese ID.

Esa variable "$id_nose" sería altamente recomendable propagarla en una variable de sesión tipo:

$_SESSION['id_nose']=$id_nose;

de aquí .. saltas automáticamente a tu formulario 2

Por ejemplo:
Código PHP:
header ("location: formulario_2.php"); 
En el formulario_2.php .. valida esa variable de sesión (id_nose) como para determinar que se saltó el proceso de la secuencia de formularios ...

Código PHP:
<?
session_start
()
if (empty(
$_SESSION['id_nose'])){
die (
"Se saltó la secuencia . .no dería estar aquí");
}

// etc formulario ..
El procesar_form_2.php y subsiguientes .. tendrás que validar igualmente esa variable de sesión y en lugar de INSERT ahora harás sólo UPDATES a los campos que recogas en estos formularios .. El campo extra de control (el contador .. de formularios) lo incrementas en una unidad tipo

Código PHP:
$sql="UPDATE tabla SET contador=contador+1,otroscampos='$valores' .... WHERE id_nose='".$_SESSION['id_nose']."'"
Fijate que se usa la variable de sesión para montar el condicional para el UPDATE (sino actualizaría toda esa tabla).

Eso mas o menos sería el proceso de creación de un registro completo con X formularios por el camino ...

Si el Usuario se queda a medias y tiene que volver a rellenar el formulario .. tras tu login que lo autentificas haces una consulta SQL por el campo "contador" para saber donde se quedó y en consecuencia redireccionar hacia el formulario que corresponda.

Para esto .. no sé si en tu montón de campos de esa tabla ya incluyes el Usuario autentificado que está operando el formulario .. pero si no lo tienes en cuenta debes incluirlo (en el INSERT primero por lo menos) para dejar constancia de quien estaba trabajando ese formulario de X partes.

Así .. las consultas serían condicionales par el momento que tengas que ofrecer el formulario que el Usuario X se quedó a medias .. tipo:

..... WHERE usuario=$usuario_login AND contador > 0 AND contador < X

Es decir .. "ver sólo los registros de ese usuario que los tenga a medias" .. siendo X el nº total de formularios del proceso (partes).

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 26/03/2004, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se me olvidó que al requerir tu usuario continuar con X fomrulario que se quedó a medias .. tu rutina que lance el proceso hacia el formulario X que le corresponda debe crear la variable de sesión

$_SESSION['id_nose'] ..

Para que continue con ella el proceso lógico de la secuencia de formularios.

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 14:55.