
18/09/2009, 17:40
|
 | | | Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 23 años, 6 meses Puntos: 0 | |
ayuda con variables de sesion Hola,
tengo este carrito de la compra en ASP el cual guarda en una variable de sesion la cantidad de cada id de prodcuto.
¿Podeis decirme como puedo hacer para guardar en la variable de sesion mas datos? Usa la funcion MeterArticulo.
¿Y luego de que manera en Mostrarcatalogo visualizaria esos campos en el bucle?
Este es el codigo:
Código:
<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<%Response.Buffer=True%>
<%
Sub MostrarCatalogo
' Muestra el catálogo con enlaces para ir comprando
Dim oRs, oRs2, SQL ' Uso 2 recordset
Dim idmarca ' IdMarca en Productos
' Conexión sin DSN a la base de datos
set oRs=Server.CreateObject("ADODB.Recordset")
set oRs2=Server.CreateObject("ADODB.Recordset")
SQL="SELECT * FROM Productos;"
oRs.Open SQL, oConn
'Dibujo la tabla
%>
<TABLE BORDER=1 CELLSPACING="1" CELLPADDING="1">
<TR>
<TD><B>Marca</B></TD>
<TD><B>Producto</B></TD>
<TD><B>Precio</B></TD>
<TD></TD>
<%
do until oRs.EOF
idmarca=oRs.Fields("Marca")
' Tengo que sacar el nombre y la URL de la marca
SQL="SELECT * FROM Marcas WHERE IdMarca="&idmarca&";"
oRs2.Open SQL, oConn
' Cuidado con los dos recordset ahora:
' oRs2 tiene la marca
' oRs tiene el producto
%>
<TR>
<TD><A HREF="<%=oRs2.Fields("URL")%>"><%=oRs2.Fields("Nombre")%></A></TD>
<TD><%=oRs.Fields("Nombre")%></TD>
<TD><%=oRs.Fields("Precio")%></TD>
<TD><A HREF="shop.asp?ac=meter&prod=<%=oRs.Fields("IdProducto")%>">Comprar</A></TD>
</TR>
<%
'Limpio oRs2
oRs2.Close
oRs.MoveNext
loop
'Termino la tabla
%>
</TABLE>
<%
oRs.Close
set oRs=nothing
set oRs2=nothing
' Pinto opciones
%>
<center><A HREF=shop.asp?ac=ver>Ver Carrito</A></center>
<%
End Sub
'----------------------------------------------------------
Sub MostrarCarrito
' Muestra el contenido del carrito de la compra
' En este ejemplo los gastos de envío los declaro aquí como constante.
' En un caso real deberían traerse de base de datos y llenar un combo por ejemplo
' carrito es la variable global que referencia al carrito
Dim oRs, oRs2, SQL
Dim clave
Dim gastos ' Gastos de envio
Dim total, subtotal
gastos=2500 ' Para todo el mundo! :)
total=0
subtotal=0
' Conexión sin DSN a la base de datos
' Debería haber sacado estas líneas a un sub y llamarlo, pero en fin :(
set oRs=Server.CreateObject("ADODB.Recordset")
'Pinto la tabla
%>
<TABLE BORDER="1" CELLPADDING="1" CELLSPACING="1">
<TR>
<TD>Artículo</TD>
<TD>Cantidad</TD>
<TD>Precio/unidad</TD>
<TD>Quitar del carrito</TD>
<TD>Total</TD>
</TR>
<%
For Each clave in carrito
subtotal=0 ' Total de cada artículo en el carrito
'Pinto la línea de este producto
SQL="SELECT * FROM Productos WHERE IdProducto="&clave&";"
set oRs=oConn.Execute(SQL)
%>
<TR>
<TD><%=oRs.Fields("Nombre")%></TD>
<TD><%=carrito(clave)%></TD>
<TD><%=oRs.Fields("Precio")%></TD>
<TD><A HREF="shop.asp?ac=sacar&prod=<%=clave%>&cant=1">Quitar Uno</A>
<A HREF="shop.asp?ac=sacar&prod=<%=clave%>&cant=<%=carrito(clave)%>">Quitar Todos</A>
</TD>
<%
' Multiplico el precio por la cantidad. FormatNumber me asegura que es un nº válido
' y convierto todo a tipo Single con CSng.
subtotal=CSng(FormatNumber(carrito(clave))*oRs.Fields("Precio"))
total=total+subtotal
%>
<TD><%= subtotal %></TD>
</TR>
<%
Next
if carrito.Count > 0 then
oRs.Close
set oRs=nothing
end if
'Pinto el final de la tabla
%>
<TR>
<TD COLSPAN=4>Gastos de envío</TD>
<TD>
<%
if total=0 then
Response.Write("0") ' Sin compra no hay gastos de envío
else
Response.Write(gastos)
end if
%>
</TD>
<TR>
<TD COLSPAN=4><B>Total:</B></TD>
<TD>
<%if total=0 then
Response.Write("0")
else
Response.Write(total+gastos)
end if
%>
</TD>
</TABLE>
<%
' Pinto los enlaces
' si no he llamado desde PasarPorCaja
if accion<>"fin" then
%>
<center>
<A HREF=shop.asp>Seguir mirando</A> / <A HREF=shop.asp?ac=fin>Pasar por caja</A>
</center>
<%
end if
End Sub
'----------------------------------------------------------
Sub MeterArticulo (id)
' Añade el producto id al carrito de la compra
' En un caso real se deberían poder añadir más de una unidad
' bien desde el catálogo, bien editando en el carrito
' Si ya tengo el artículo en el carrito sumo 1 a la cantidad
if carrito.Exists(id) then
carrito(id)=carrito(id)+1
else
' Si no lo añado
carrito.Add id, 1
end if
Response.Write("Se ha añadido el artículo al carrito<br>")
End Sub
Sub SacarArticulo (id, cantidad)
' Saca un numero "cantidad" de articulos "id" del carrito
if not carrito.Exists(id) then
Response.Write("¡No tienes eso en tu carrito!")
else
if cantidad>1 then
'Quito todos así que quito ese articulo del carrito
carrito.Remove(id)
else
'Quito uno
carrito(id)=carrito(id)-1
if carrito(id)<1 then
carrito.Remove(id)
end if
end if
end if
End Sub
Sub PasarPorCaja
'-----------------------------------------------
' En este punto del script es donde debería ir
' todo lo relacionado con el pago, etc.
' Se podría por ejemplo escribir el pedido en un fichero
' de texto y añadirlo a una tabla de pedidos en la base de datos
' o bien enviar los detalles por email a una dirección.
' ¡Es tu decisión!
' Para el ejemplo, simplemente se lista el carrito una vez más
' y se muestra un mensaje de agradecimiento
%>
<H2>¡Gracias por comprar!</H2>
<%
MostrarCarrito
%>
En breve te llegarán a tu casa los productos. Gracias por
comprar en ASPFácil.
<br>
(En un caso real aquí pediríamos los datos, etc.)
<%
' Para el ejemplo, aquí libero la variable de sesión
set Session("carrito")=nothing
End Sub
'---------------------------------
' Programa "principal"
'---------------------------------
Dim carrito
Dim accion
Dim producto
Dim cant
Dim oConn
set oConn=Server.CreateObject("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("tienda.mdb")
' Si no existe el carrito lo creo
' si existe lo referencio
if isobject(Session("carrito")) then
set carrito=Session("carrito")
else
set carrito=Server.CreateObject("Scripting.Dictionary")
end if
accion=CStr(Request.QueryString("ac")) 'Paso el parámetro a cadena
producto=CInt(Request.QueryString("prod")) 'Paso el parámetro cant a número entero
cant=CInt(Request.QueryString("cant")) 'Paso el parámetro cant a número entero
Select Case accion
Case "ver"
'Muestro el carrito
MostrarCarrito
Case "meter"
'Añado articulo al carrito
MeterArticulo producto
MostrarCarrito
Case "sacar"
' Quito el numero 'cant' de articulos 'producto' del carrito
call SacarArticulo (producto, cant)
MostrarCarrito
Case "fin"
' Muestro las compras y termino
PasarPorCaja
Case else
'Muestro el catálogo
MostrarCatalogo
End Select
set Session("carrito")=carrito
oConn.Close
set oConn=nothing
%>
|