Hola a todos,
Estoy intentando crear un carrito de la compra para una web bastante sencilla y de momento todo me iba bien, use el carrito de aspfacil.com y simplemente le añadí el hecho de que sólo se pueda usar el carrito si te has registrado antes.
El caso es que ahora lo que quiero es que cuando el usuario decida finalizar la compra todo lo que este en su carrito pase a una tabla de la base datos llamada pedidos y hay es donde tengo las dudas, he intentado pasar los datos de la session carrito a la base de datos pero no me aclaro y me da un fallo de se espera un objeto en la linea de "tabla3.open sql2,conexion,3,3".
Básicamente creo que lo que no entiendo es el funcionamiento del objeto carrito o la variable de sesión carrito y como puedo sacar los datos de ahí y meterlos en la tabla de pedidos, si puedieráis darme alguna pista de por donde empezar os lo agradecería mucho.
Tampoco tengo demasiado claro como hacer para que la tabla de Pedidos esté bien, es decir entiendo que debe tener:
- idpedido = autonúmerico
- idusuario = texto
- total = numérico (gasto total de ese pedido)
- fecha = obtenida con date() en ASP
- hora = obtenida con time() en ASP
Pero aparte de estos datos, ¿cómo hago para que aparezca el detalle de la compra desglosado? Es decir cuantas unidades y de que producto, podría crear 3 campos de cada producto: idproducto, precio y unidades pero supongo que no será la forma correcta de hacerlo.
Este es el código de la página de un producto:
Código asp:
Ver original<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Tienda</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="/estilos/estilos.css" rel="stylesheet" type="text/css" />
</head>
<body>
<%
Sub MostrarCatalogo
Set conexion = Server.CreateObject("ADODB.Connection")
Set tabla = Server.CreateObject("ADODB.recordset")
conexion.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; Data Source="&server.MapPath("../db/Tienda.mdb")
sql = "Select * from Productos where Idproducto =" & request("id")
tabla.open sql, conexion
Dim usuario
Dim nombre
usuario = session("usuario")
%>
<% if (usuario = "ok") then
nombre = session("user")%>
<table width="960" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="31" align="right"><span style="color:#FFFFFF;font-weight:bold">Hola <%=nombre%></span><img src="http://www.forosdelweb.com/iconos/carrito.gif" alt="" width="16" height="13" hspace="5" border="0" align="absmiddle" /><a href="http://www.forosdelweb.com/tienda/index.htm" target="_blank" >Tienda</a> <a href="desconectar.asp?id=1&pag=prod1" >Cerrar sesión</a></td>
</tr>
<% else %>
<table width="960" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="31" align="right"><img src="http://www.forosdelweb.com/iconos/carrito.gif" alt="" width="16" height="13" hspace="5" border="0" align="absmiddle" /><a href="http://www.forosdelweb.com/tienda/index.htm" target="_blank" >Tienda</a></td>
</tr>
<% end if%>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#77786A">
<tr>
<td height="115" align="left" valign="bottom"><br />
<table border="0" cellspacing="0" cellpadding="10">
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td align="center" bgcolor="#757668"><table width="920" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000">
<tr>
<td><table width="920" border="0" cellspacing="10" cellpadding="0">
<tr>
<td align="left"><img src="<%=tabla.fields("foto")%>" /> <table width="420" border="0" cellspacing="0" cellpadding="10">
<tr valign="top">
<td><%=tabla.fields("nombre")%><br /></td>
</tr>
</table>
<font color="#FFFFFF"><br />
</font>
<% if (usuario = "ok") then
nombre = session("user")%>
<table border="0" cellpadding="10" cellspacing="0" bgcolor="#5C5C4C">
<tr>
<td><font color="#FFFFFF">Precio : <strong><%=tabla.Fields("precio")%></strong>€</font></td>
<td bgcolor="#999966" ><img src="http://www.forosdelweb.com/../imag/ico-carrito.gif" alt="" width="16" height="13" /> <a href="prod1.asp?ac=meter&prod=<%=tabla.Fields("Idproducto")%>&id=1" target="_blank">Comprar</a></td></tr>
</table>
<% else %>
<table border="0" cellpadding="10" cellspacing="0" bgcolor="#5C5C4C">
<tr>
<td><font color="#FFFFFF">Precio : <strong>70</strong>€</font></td>
<td bgcolor="#999966"><img src="http://www.forosdelweb.com/iconos/carrito.gif" alt="" width="16" height="13" /> <a href="http://www.forosdelweb.com/tienda/index.htm" target="_blank">Comprar</a></td>
</tr>
</table>
<% end if%>
<font color="#FFFFFF"> </font></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td align="center" bgcolor="#757668"> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
<% tabla.close
End sub
''''''''''''''''''''''''''''''''''''''''SHOP''''''''''''''''''''''''''''''''''''''''''''''
Sub MostrarCarrito'*********************************************************
Dim tabla, tabla2, SQL
Dim clave
Dim gastos
Dim total, subtotal
'gastos=2500 '
gastos=0
total=0
subtotal=0
Set tabla=Server.CreateObject("ADODB.Recordset")
%>
<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
SQL="SELECT * FROM Productos WHERE IdProducto="&clave&";"
Set tabla=conexion.Execute(SQL)
%>
<TR>
<TD><%=tabla.Fields("Nombre")%></TD>
<TD><%=carrito(clave)%></TD>
<TD><%=tabla.Fields("Precio")%></TD>
<TD><A HREF="prod1.asp?ac=sacar&prod=<%=clave%>&cant=1&id=1">Quitar Uno</A>
<A HREF="prod1.asp?ac=sacar&prod=<%=clave%>&cant=<%=carrito(clave)%>&id=1">Quitar Todos</A>
</TD>
<%
subtotal=CSng(FormatNumber(carrito(clave))*tabla.Fields("Precio"))
total=total+subtotal
%>
<TD><%= subtotal %></TD>
</TR>
<%
Next
If carrito.Count > 0 Then
tabla.Close
Set tabla=Nothing
End If
%>
<TR>
<TD COLSPAN=4>Gastos de envío</TD>
<TD>
<%
If total=0 Then
Response.Write("0")
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>
<%
If accion<>"fin" Then
%>
<center>
<A HREF=prod1.asp?id=1>Seguir mirando</A> / <A HREF=prod1.asp?ac=fin&id=1>Pasar por caja</A>
</center>
<%
End If
End Sub'********************************************************************
Sub MeterArticulo (id)'******************************************************
If carrito.Exists(id) Then
carrito(id)=carrito(id)+1
Else
carrito.Add id, 1
End If
Response.Write("Se ha añadido el artículo al carrito<br>")
End Sub'********************************************************************
Sub SacarArticulo (id, cantidad)'*******************************************
If Not carrito.Exists(id) Then
Response.Write("¡No tienes eso en tu carrito!")
Else
If cantidad>1 Then
carrito.Remove(id)
Else
carrito(id)=carrito(id)-1
If carrito(id)<1 Then
carrito.Remove(id)
End If
End If
End If
End Sub'********************************************************************
Sub PasarPorCaja'***********************************************************
%>
<H2>¡Gracias por su compra!</H2>
<%
MostrarCarrito
%>
En breve te llegarán a tu casa los productos. Gracias por comprar . <br>
(En un caso real aquí pediríamos los datos, etc.)
<%
Dim tabla3, sql2
sql2 = "Select * from Pedidos"
tabla3.open sql2,conexion,3,3
tabla3.addnew
tabla3.fields("Idusuario") = session("idusuario")
tabla3.update
tabla3.Close
Set tabla3=Nothing
Set Session("carrito")=Nothing
End Sub'********************************************************************
Dim carrito
Dim accion
Dim producto
Dim cant
Dim conexion
%>
<%
If IsObject(Session("carrito")) Then
Set carrito=Session("carrito")
Else
Set carrito=Server.CreateObject("Scripting.Dictionary")
End If
accion=CStr(Request.QueryString("ac"))
producto=CInt(Request.QueryString("prod"))
cant=CInt(Request.QueryString("cant"))
Select Case accion
Case "ver"
MostrarCarrito
Case "meter"
MeterArticulo Producto
MostrarCarrito
Case "sacar"
Call SacarArticulo (producto, cant)
MostrarCarrito
Case "fin"
PasarPorCaja
Case Else
MostrarCatalogo
End Select
Set Session("carrito")=carrito
conexion.Close
Set conexion=Nothing
''''''''''''''''''''''''''''''''''''''''SHOP''''''''''''''''''''''''''''''''''''''''''''''
%>
Este es link a la página con el archivo original:
http://www.aspfacil.com/codigo/shop.asp?ac=ver