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