Cómo crear un formulario en una página que se llama a si misma, concetrando todas las acciones en un mismo código, limpio y fácil de mantener.
Uno de los trabajos más habituales en la programación de páginas dinámicas del servidor consiste en tratar formularios, para insertar o actualizar informaciones en una base de datos. En este artículo vamos a ver una manera sencilla de realizar, en ASP, las tareas de inserción de los datos de un formulario en una base de datos, concentrando todas las tareas en una misma página, por medio de formularios reentrantes.
Con el concepto de formulario reentrante, me refiero a una página que contiene un formulario, cuyo submit está dirigido hacia la misma página. De modo que esa página sería encargada de mostrar el formulario, recibir los datos, comprobar su validez y, si todo fue correcto, insertar la información en la base de datos. Él resumen de acciones que debe realizar una página es el siguiente:
Compruebo si se reciben datos del formulario
1) Si no recibo datos del formulario, muestro el formulario vacío
2) En caso contrario, compruebo que los datos sean correctos
2.1) Si no eran correctos, muestro el formulario con los datos que se han recibido.
2.2) Si eran correctos, inserto los datos en la base de datos
Como se puede comprobar en el esquema anterior, el mismo formulario se puede mostrar en dos ocasiones: Si no se reciben datos por POST, o bien, si los datos recibidos por POST no son válidos. Para facilitar las tareas de mantenimiento de la página y crear un código más claro, vamos a hacer un único formulario, que incluiremos en cualquier punto que se necesite.
El esquema anterior, codificado en ASP, sería el siguiente. Nótese que se incluye el formulario en dos puntos distintos del código. Luego veremos el código del formulario.
<%
'comprobamos si se recibe del formulario
if request.form="" then
'si no se recibe algo muestro el formulario
%><!--#include file="formulario.asp"--><%
else
'es que estamos recibiendo datos del formulario
'creo una variable para concretar el error
errores=""
'valido todo para obtener lista de errores
if len(request.form("nombre"))<2 then
errores = errores & "<li>El nombre no es correcto"
end if
if len(request.form("telefono"))<9 then
errores = errores & "<li>El teléfono no es correcto"
end if
'compruebo si hubieron errores
if (errores<>"") then
'hubo errores en la recogida de datos
response.write "Errores en el formulario: <ul style='color:red'>" & errores & "</ul>"
%><!--#include file="formulario.asp"--><%
else
'es que todos los datos eran correctos. inserto en la base de datos
ssql = "insert into cliente (nombre, telefono) values ('" & request.form("nombre") & "', '" & request.form("telefono") & "')"
'ahora habría que conectar con la base de datos y ejecutar la sentencia
'Estos temas se explican en otros artículos
end if
end if
%>
El código está comentado para que se pueda entender más fácilmente. Como vemos se ha seguido el esquema comentado al principio del artículo. Las validaciones se realizan utilizando la función len() de VBScript, que devuelve el número de caracteres que contiene un string.
Código del formulario
Ahora nos centraremos en el formulario. Se trata de un código HTML simple, en el que se ha incluido una manera de memorizar el valor que pudieran tener los campos en anteriores envíos. Esto es porque, cuando se envía el formulario, si hubo errores en los datos, se debe mostrar el error y el formulario con los valores que tuviera anteriormente.
<FORM METHOD="post" ACTION="index.asp" NAME="form03">
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="2">
<TR>
<TD>
Nombre:
</TD>
<TD>
<INPUT TYPE="text" NAME="nombre" VALUE="<%=request.form("nombre")%>">
</DIV>
</TD>
</TR>
<TR>
<TD>
Teléfono:
</TD>
<TD>
<INPUT TYPE="text" NAME="telefono" VALUE="<%=request.form("telefono")%>">
</DIV>
</TD>
</TR>
<TR>
<TD COLSPAN="2" align=right>
<INPUT TYPE="submit" VALUE="Insertar">
</TD>
</TR>
</TABLE>
</FORM>
Para recuperar esos valores, simplemente se define un value para la etiqueta <input>, en el que se coloca lo que haya en el array request.form("nombre_del_campo_a_recuperar").
Espero que estas indicaciones sean de interés, por lo menos para los usuarios menos experimentados.
Con el concepto de formulario reentrante, me refiero a una página que contiene un formulario, cuyo submit está dirigido hacia la misma página. De modo que esa página sería encargada de mostrar el formulario, recibir los datos, comprobar su validez y, si todo fue correcto, insertar la información en la base de datos. Él resumen de acciones que debe realizar una página es el siguiente:
Compruebo si se reciben datos del formulario
1) Si no recibo datos del formulario, muestro el formulario vacío
2) En caso contrario, compruebo que los datos sean correctos
2.1) Si no eran correctos, muestro el formulario con los datos que se han recibido.
2.2) Si eran correctos, inserto los datos en la base de datos
Como se puede comprobar en el esquema anterior, el mismo formulario se puede mostrar en dos ocasiones: Si no se reciben datos por POST, o bien, si los datos recibidos por POST no son válidos. Para facilitar las tareas de mantenimiento de la página y crear un código más claro, vamos a hacer un único formulario, que incluiremos en cualquier punto que se necesite.
El esquema anterior, codificado en ASP, sería el siguiente. Nótese que se incluye el formulario en dos puntos distintos del código. Luego veremos el código del formulario.
<%
'comprobamos si se recibe del formulario
if request.form="" then
'si no se recibe algo muestro el formulario
%><!--#include file="formulario.asp"--><%
else
'es que estamos recibiendo datos del formulario
'creo una variable para concretar el error
errores=""
'valido todo para obtener lista de errores
if len(request.form("nombre"))<2 then
errores = errores & "<li>El nombre no es correcto"
end if
if len(request.form("telefono"))<9 then
errores = errores & "<li>El teléfono no es correcto"
end if
'compruebo si hubieron errores
if (errores<>"") then
'hubo errores en la recogida de datos
response.write "Errores en el formulario: <ul style='color:red'>" & errores & "</ul>"
%><!--#include file="formulario.asp"--><%
else
'es que todos los datos eran correctos. inserto en la base de datos
ssql = "insert into cliente (nombre, telefono) values ('" & request.form("nombre") & "', '" & request.form("telefono") & "')"
'ahora habría que conectar con la base de datos y ejecutar la sentencia
'Estos temas se explican en otros artículos
end if
end if
%>
El código está comentado para que se pueda entender más fácilmente. Como vemos se ha seguido el esquema comentado al principio del artículo. Las validaciones se realizan utilizando la función len() de VBScript, que devuelve el número de caracteres que contiene un string.
Código del formulario
Ahora nos centraremos en el formulario. Se trata de un código HTML simple, en el que se ha incluido una manera de memorizar el valor que pudieran tener los campos en anteriores envíos. Esto es porque, cuando se envía el formulario, si hubo errores en los datos, se debe mostrar el error y el formulario con los valores que tuviera anteriormente.
<FORM METHOD="post" ACTION="index.asp" NAME="form03">
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="2">
<TR>
<TD>
Nombre:
</TD>
<TD>
<INPUT TYPE="text" NAME="nombre" VALUE="<%=request.form("nombre")%>">
</DIV>
</TD>
</TR>
<TR>
<TD>
Teléfono:
</TD>
<TD>
<INPUT TYPE="text" NAME="telefono" VALUE="<%=request.form("telefono")%>">
</DIV>
</TD>
</TR>
<TR>
<TD COLSPAN="2" align=right>
<INPUT TYPE="submit" VALUE="Insertar">
</TD>
</TR>
</TABLE>
</FORM>
Para recuperar esos valores, simplemente se define un value para la etiqueta <input>, en el que se coloca lo que haya en el array request.form("nombre_del_campo_a_recuperar").
Espero que estas indicaciones sean de interés, por lo menos para los usuarios menos experimentados.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...