A veces tenemos que dividir el formulario en varias partes (páginas), procesarlas por separado y luego reunirlas en un solo resultado.
Este artículo describe métodos y patrones de diseño para hacerlo.
Nota:
El tema de dividir un formulario en varios pasos es muy complejo, sobre todo si se quiere hacer bien. Me he encontrado con muchos enfoques a lo largo de mi vida, de los que hablaré aquí. Algunos enfoques parecen atractivos, pero son ingenuos y sólo funcionan en casos concretos. Para cada enfoque, describo cuándo tiene sentido y qué enfoques no tienen sentido.
Por lo general, el objetivo es obtener los datos básicos del primer formulario en la primera página, validarlos, luego guardarlos "en algún lugar" y mostrar la siguiente página.
Cuando el usuario llega a la última página, hay que enviar todo el formulario y procesar las entradas.
En cada paso, es importante validar siempre cuidadosamente todos los datos y permitir que el usuario salte hacia atrás en las páginas a voluntad para que pueda volver a corregir los datos cuando encuentre un error. Además, si el formulario se debe renderizar de forma condicional en función de los datos ya obtenidos, se trata de un proceso muy exigente.
Podemos implementar los formularios individuales nosotros mismos en HTML puro y luego manejar el procesamiento en PHP, o utilizar soluciones ya hechas como Formularios de Nette.
Ejemplo de la vida:
Muy a menudo, los programadores principiantes me envían correos electrónicos y preguntan cuestiones aparentemente sencillas para las que hay una solución preparada. Por ejemplo, específicamente sobre el procesamiento de formularios en PHP.
Siempre recomiendo saltarse el tratamiento manual por completo y utilizar una solución preparada en su lugar. En realidad, es muy complicado implementar correctamente, por ejemplo, la validación del correo electrónico introducido y que 2 contraseñas dentro de 2 campos coincidan, mientras que queremos redirigir al usuario de vuelta al formulario pre-rellenado según sus datos y con mensajes de error en caso de error.
Porque la gente no sabe que no sabe que no sabe y por eso, en lugar de invertir 1 hora de tiempo en aprender una solución ya hecha para el 99,99% de los problemas, prefieren elegir su propia solución, a la que dedican decenas de horas de depuración, y todavía hay casos en los que los formularios no funcionan, arrojan errores, tienen vulnerabilidades de seguridad y no protegen los datos introducidos.
Así que el objetivo de este paso es implementar varias páginas en diferentes URLs que contendrán formularios en blanco.
Recomiendo implementar cada formulario independientemente de los otros (atómicamente) y manejar el paso de estado en una capa de aplicación diferente. La razón es que, en la práctica, cada formulario manejará la validación de datos de forma diferente, escribirá sus salidas de forma diferente, manejará los errores de forma diferente, y probablemente querremos ampliarlo o cambiarlo a lo largo del tiempo, por lo que no necesitamos conocer el contexto de todo el proceso y cambiar docenas de sitios para hacerlo.
Al procesar el primer formulario, queremos primero validar los datos recibidos y, si son correctos, redirigir al usuario al segundo paso. Es una buena idea manejar la redirección como una redirección HTTP, porque puede ocurrir fácilmente que los datos no sean válidos, en cuyo caso queremos devolver al usuario al primer formulario y no al siguiente paso.
Básicamente podemos almacenar los estados de 4 maneras:
No se recomienda:
Recomendado:
Ninguna de las soluciones anteriores es perfecta ni la única correcta. Yo mismo combino varios enfoques cuando trabajo en soluciones de varios pasos. Normalmente, por ejemplo, resuelvo una cesta de la compra como una tabla de la base de datos, a la que asigno los datos que ya he recogido y la vinculo a un usuario (si está conectado) o a una sesión (si no está conectado y aún no nos conocemos).
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | es