Buscar en Asptutor     
Demo Tienda Virtual Tutorcar
 Navegacion->Inicio | Active Server Pages  

La web de los recursos y ejemplos de asp

Versión para imprimir

 

Alojado en:


urbe-networks.com

Recomienda esta pagina a un amigo

Servicios Gratuitos

Articulos relacionados

Utilizar GetRows()

Tienda Virtual - Carrito de compra

Messenger a través de BD en ASP

Miniaplicacion de comercio electronico

Objeto Datagrid de ASP.NET en ASP

Acotación de resultados

Como hacer un combobox desde una BD

Dando formato a los numeros (Función FormatDateTime)

Tutorial de ASPEmail

Mas sobre el uso de cookies

Un calendario en ASP

Codigo de un Libro de visitas(IV)

Como hacer un combobox desde una BD

Ordenación de resultados

Conservar los saltos de linea

¿De que pagina vienen mis visitas?


Enlaces recomendados

   

Tutorial ASP

Enviar datos entre páginas
Este articulo ha sido leído 61.983 veces

Enviar datos entre páginas

Colaboración enviada por Pedro Moreno

 

Holas, tenia tiempo que les queria mandar este pequeño truco, pero apenas lo acabo de terminar. Lo que hace es demostrar como enviar cadenas de datos entre paginas sin usar variables de session, este truco lo encontre en una sitio famoso de ASP en ingles, pero lo adapte a mi problema, ya que el ejemplo que dan es estatico, y yo lo ocupaba dinamico. Se le muestra al cliente valores, que  va escogiendo si asi lo desea. Y cada vez que presiona un boton, lo que hace el script es recoger que valores eligio el cliente, si es que tomo alguno, y agregarlos a un arreglo, para continuar mostrando mas datos hasta que se acaben o hasta que el cliente decida. Y estos datos se van almacenando y se van pasando entre el script para no perderse, y al final se desplegan. Es sencillo y ademas muy eficiente. Lo utilize para poder crear un sistema de examenes en linea, donde al cliente se le muestran las preguntas de que estan almacenadas en un base de datos, y el va eligiendo que reactivos

 

Este pequeño truco que me encontre en uno de mis viajes a Internet me ayudo mucho como guia para poder codificar esta pequeña, pero util y eficiente tarea, que es la de poder pasar cadenas de datos entre paginas, sin la necesidad de utilizar ningun componente a nivel de session, por que segun dicen los que saben, no debemos abusar de la variables de session.

Tenemos estas variables que utilizo en el script GuardarDatos1.asp
Contador : Su nombre lo dice todo.
ArrayDatAnt:
Es el arreglo que recibe los datos anteriormente almacenados.
ArrayDatAct(20):
Es el arreglo nuevo, se forma de la union de los datos anteriores(ArrayDatAnt) mas los datos nuevos, o sea, si el cliente valido algunas casillas de verificacion(CheckBox), esos valores se agregan a este arreglo.
ArrayFinal:
Esta cadena es la que se envia al script GuardarDatos2.asp, y lleva todos los datos que el cliente eligio, claro que si no eligio ninguno no lleva nada.
BotonSel:
Solo recibe el boton que presiono el cliente
StrAyuda:
Esta cadena es para formar los nombres de las casillas de verificación, para poder pedir sus nombres.
Indice:
Su nombre dice todo, nos indica la pocisión del ultimo elemento desplegado. Y tambien sirve para saber que numero de casilla de verificacion pedir.
TopeArray
: Nos indica la pocision del ultimo elemento agregado, asi podemos saber en que pocision vamos agregar mas datos al arreglo.

   La figura1 muestra lo se desea hacer, se le empiezan a mostrar al cliente varios valores que el puede o no seleccionar, y los botones hacen lo que dicen.



                        Figura 1

Cuando el cliente active alguno de ellos, nuestro script le va a preguntar al objeto Request, si alguna de la casillas de verificacion fue activada, si ese es el caso entonces vamos a agregarla a nuestro arreglo, con este fragmento de codigo:

For Contador = Indice - 3 To Indice - 1
StrAyuda = "Valor " & Contador
If Not Request( StrAyuda ) = "" Then
ArrayDatAct( TopeArray ) = Request( StrAyuda )
TopeArray = TopeArray + 1
End If
Next

Codigo 1


Como desplegamos de 3 en 3 valores, y la primera vez que corre la aplicacion Indice = 3, por ello empezamos de 0( Indice -3 ) hasta 2 ( Indice - 1 ). Y asi sucesivamente. ¿Por que hacemos esta cochinada de codigo?, por que estamos formando las casillas de verificacion de la siguiente manera:  

<% For Contador = Indice - 3 To Indice - 1
StrAyuda = "Valor " & Contador
%>
<input type="checkbox" name="<%=StrAyuda%>" value="<%=Contador%>"><%=StrAyuda%><br>
<%
Next
%>
Codigo 2

Como se puede ver el nombre de la casilla de verificacion se forma uniendo la cadena "valor " mas el numero de que almacena la variable Contador. Que en codigo estatico seria algo asi:
ArrayDatAct( TopeArray ) = Request("Valor N"),
donde N es valor del Contador. Pero como estamos desplegando varios valores, y en mi aplicacion esos valores estan contenidos en una tabla, por ello me hes mas facil identificarlos por el numero de registro, o si les parece mejor podrian agregarle mas alguna cadena que defina el campo como este caso.

Ahora si te preguntas, ¿Como se que el cliente ha activado alguna casilla de verificacion?, muy facil, en el codigo1 Linea3, esa linea lo que hace es preguntar al objeto Request, si la casilla de verificacion en cuestion fue activada, si la respuesta fue cierta, entonces la casilla de verificacion contiene el valor de su campo value, de lo contrario no trae mas que una cadena vacia. Y si fue cierto, el campo value envia su contenido que es igual al valor que tenia la variable Contador cuando fue creado, entoces lo pedimos y lo agregamos a nuestro arreglo encargado ArrayDatAct en su pocision correspondiente( TopeArray ).

Pero esto es solo lo que corresponde a la salida de las casillas de verificacion y como solicitar sus valores si el cliente eligio alguno, ahora vamos a pasar a la parte importante del codigo, que es la de como pasar los datos que llevamos almacenados entre paginas.

Se puede hacer ya sea usando el metod POST o GET, aqui usamos los dos uno, el POST lo usamos para pasar los valores entre las misma pagina y el GET para pasar los valores a otra pagina que los desplega, aunque podemos mezclarlos, es solo cuestion de gustos y experiencia. Si usamos el metodo POST vamos a utilizar la etiqueta HIDDEN, este tipo de etiqueta es muy util, y su nombre como dice, no se mira en nuestra pagina, pero ahi esta en memoria. Para forma la cadena que almacena los valores que el cliente a seleccionado debemos hacer un ciclo desde el primero hasta el ultimo valor del arreglo que contiene los datos( ArrayDatAct ). Asi

For Contador = 0 To TopeArray
%>
<input type="hidden" name="ArrayDatAnt" value="<%=ArrayDatAct( Contador )%>">
<%
Next
Codigo 3

Aqui TopeArray sabe cual es la pocision del ultimo elemento agregado, y como los arreglos en VB empiezan en cero, Contador sabe donde debe empezar. Aqui lo que se hace es crear una variable de nombre ArrayDatAnt tipo Hidden, que almacena muchos valores diferentes pero que todos tiene en comun el mismo nombre, si esto lo ponemos de 1 en 1, tendriamos algo asi en nuestra pagina:

<input type="hidden" name="ArrayDatAnt" value="<%=X )%>">
<input type="hidden" name="ArrayDatAnt" value="<%=Y )%>">
<input type="hidden" name="ArrayDatAnt" value="<%=Z )%>">
Codigo 4

Donde X,Y,Z, son los valores que contiene nuestro arreglo. Ahora cuando nosotros en nuestro script le pedimos el valor de la variable de nombre ArrayDatAnt al objeto Request, este separa los valores de la variable del mismo nombre con una coma "," no importa si usamos el metodo POST o GET, este amigo asi trabaja. Ahora si vemos en realidad como trae la cadena el objeto Request tendriamos algo asi:

ArrayDatAnt=0,2,5,8,10,etc
Codigo 5

Por ello nos facilita la labor de poder quitar las comas que nos llegan demas. Y ahora ¿como hacemos esto?

ArrayDatAnt
= Request( "ArrayDatAnt" )
ArrayDatAnt = Split( ArrayDatAnt, "," )
Codigo 6

La funcion Split, hace la labor de quitar el caracter deseado del arreglo que queramos, y nos retorna un arreglo limpio, solo conteniendo los valores que el cliente eligio, y se veria asi al salir de la funcion:

ArrayDatAnt(0) = 0
ArrayDatAnt
(1) = 2
ArrayDatAnt
(2) = 5
ArrayDatAnt
(3) = 8
ArrayDatAnt
(4) = 10
Codigo 7

Con este arreglo ya podemos sacar su indice maximo e indice minimo del arreglo usando las funciones LBound que nos dice cual es el indice minimo de nuestro arreglo y UBound nos dice cual es indice maximo del arreglo. En nuestro caso solo usamos la ultima funcion, asi quedaria el codigo que hace esto:

TopeArray = UBound( ArrayDatAnt, 1 )
Codigo 8

Por ello es importante esta funcion ya que nos dice el indice del ultimo elemento del arreglo y con ello podremos saber donde agregar el siguiente valor si es que hay, y eso es lo que hacemos en el Codigo 8.

Una vez que el cliente decidio guardar los datos que lleva hasta un determinado momento o si ya no hay mas datos, lo que hace el script es primero que nada, checar si hay mas datos por agregar antes de salir de este script, si es el caso los debe agregar al arreglo del cliente, si no entonces el pregunta al arreglo si contiene datos para enviar, si es el caso debe formatearlos para poder enviarlos, aqui utilizamos el metodo GET.

If Not TopeArray = 0 Then
For Contador = 0 To TopeArray - 1
ArrayFinal = ArrayFinal & "ArrayFinal=" & ArrayDatAct( Contador )
ArrayFinal = ArrayFinal & "&"
Next
ArrayFinal =
Left( ArrayFinal, Len( ArrayFinal ) - 1 )
End If
Response.Redirect "DatosGuardados2.asp?" & ArrayFinal

Codigo 9

Como se puede ver en el codigo 9, lo que se hace para poder enviar todos los datos contenidos en el arreglo, es concatenarlos en una sola cadena con un solo nombre de variable. Si estiramos esta variable se observaria algo asi:

ArrayFinal=0,2,5,8,10

Ademas si observan el Codigo9 Linea6, se elimina el ultimo caracter de la cadena, ya que va demas.Y otra vez de nueva cuenta, cuando recibamos la variable y todos sus campos debemos quitar las comas como en el codigo6 linea2, que es lo que hace el script DatosGuardados2.asp. Y por ultimo solo desplegamos los datos que el cliente ha elegido si es que eligio algunos. La salida del script se puede ver en la Figura2.


               Figura 2

Ademas de eso si observan la barra de navegacion de su navegador podrian ver todos los datos que se estan enviando en la variable ArrayFinal, esto por que el metodo GET no esconde nada de información, pero como les recuerdo, esto se puede hacer ya sea con el metodo POST o GET, pero eso ya ustedes lo deciden.

Bueno espero esto les sirva en algo, ya que recuerden debemos tratar de usar lo menos posible las variables a nivel de session, aunque existen muchos componentes ya de fabrica que hacen esto de una manera mas facil, pero degradan el desempeño del servidor ya que su pagina sera visitada por cientos y miles de navegadores al mismo tiempo, y si multiplicamos la memoria que se necesita para poder crear un solo componente de estos por el numero de navegadores que accesan su pagina en un determinado momento, creame que el pobre servidor grita. Bueno ahi les mando los dos scripts para que los prueben y les saquen provecho, cualquier comentario sera bienvenido. Hasta pronto.

 


 

¿Estas empezando y este articulo es muy complejo para tí?
Empieza por el principio, visita Ejemplos Básicos

Puedes obtener un listado completo de todos los artículos y ejemplos de ASP en http://www.asptutor.com/asp/todoslosarticulos.asp
 

Valora este articulo   Malo Excelente  
66 usuarios han valorado este articulo. Valoracion media:

Nota: Para cualquier consulta u opinión sobre este articulo puedes usar los foros

 

 

AspTutor lo hacemos entre todos ¿Como vas a colaborar hoy?


Google

 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar