Añadir un libro al carrito

Adicionamos un artículo a nuestro carrito guardando su referencia.
El archivo busqueda.asp nos propone un enlace a la página anadir.asp acompañado de una variable "id" que tiene como valor la referencia de un articulo. Al pinchar sobre el enlace, ejecutamos este script que tiene como consecuencia el aumento de una unidad del numero de artículos y el almacenamiento de la referencia del nuevo articulo incluido:

<%
'Recuperamos la referencia del articulo
id=Request.Querystring("id")

'Anadimos un articulo mas al carrito y le damos el valor de la referencia
Session("num_articulos")=Session("num_articulos")+1
Session(session("num_articulos"))=id
%>

<!--#include file="plantillas/connon.inc"-->
<!--#include file="scripts_lengua/lecturalengua.inc" -->
<!--#include file="plantillas/plantillahtml.inc"-->

<table align="center" width="400" cellspacing="2" cellpadding="2" border="0">
<%
'Fijamos en 10 el limite de libros
If Session("num_articulos")>10 Then
   Session("num_articulos")=10
%>
   <tr>
   <td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir("limite")%></font><br></td>
   </tr>
<%Else 'tenemos menos de 10 libros, podemos pues anadir el nuevo%>
   <tr>
   <td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir("anadido")%></font><br></td>
   </tr>
<%End If%>
<tr>
<td bgcolor="#cc9900" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="carrito.asp"><%imprimir("vercarrito")%></a></font><br></td>
</tr>
<tr>
<td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="busqueda.asp"><%imprimir("volver")%></a></font><br></td>
</tr>
</table>

<!--#include file="plantillas/connoff.inc"-->

</body>
</html>


Para comenzar, como siempre, recogemos la variable que la URL nos envía:

'Recuperamos la referencia del articulo
id=Request.Querystring("id")


Seguidamente aumentamos de uno la cantidad de libros que hay en el carrito y asignamos el valor de la referencia a una variable Session("numero") cuyo valor de número corresponde con el de la cantidad de artículos presentes en el carrito:

'Anadimos un articulo más al carrito y le damos el valor de la referencia
Session("num_articulos")=Session("num_articulos")+1
Session(session("num_articulos"))=id


Tendremos por lo tanto una colección de variables de este tipo: Session(1)=referencia_1, Session(2)=referencia_2...

La forma más rigurosa de llevar a cabo este tipo de gestiones es a partir de un almacenamiento de registros con los datos correspondientes a cada articulo en una tabla. No hemos querido complicar la aplicación en este sentido y hemos preferido centrarnos en otros aspectos.

Seguidamente, hemos introducido una secuencia que controla el número máximo de artículos en el carrito. Dicho número ha sido fijado en 10. En realidad, para una aplicación "profesional" de este tipo la capacidad del carrito debería ser ilimitada y esto complicaría ligeramente las cosas. Dejamos este punto también a reflexión del lector.

'Fijamos en 10 el limite de libros
If Session("num_articulos")>10 Then
   Session("num_articulos")=10
%>
   <tr>
   <td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir("limite")%></font><br></td>


Si el libro añadido no hace sobrepasar la capacidad del carrito, imprimiremos un mensaje comunicando el éxito de la operación y ofreceremos dos enlaces: Uno para volver al menú de búsquedas y seguir con las compras y otro para ver y editar el carrito.

<%Else 'tenemos menos de 10 libros, podemos pues anadir el nuevo%>
   <tr>
   <td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir("anadido")%></font><br></td>
   </tr>
<%End If%>
<tr>
<td bgcolor="#cc9900" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="carrito.asp"><%imprimir("vercarrito")%></a></font><br></td>
</tr>
<tr>
<td bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="busqueda.asp"><%imprimir("volver")%></a></font><br></td>


Ir la librería

Autor

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Compartir

Comentarios

Rober

14/11/2001
Esta muy bien el articulo, pero... una duda. Esta tienda virtual que habéis hecho te limita la compra a 10 libros. ¿Qué pasa si quiero pedir más libros?.

Lógicamente podría modificar esta línea de comando sql:

sSQL="Insert Into pedidos2 (nombre, direccion, fecha, total, id_1, id_2, id_3, id_4, id_5, id_6, id_7, id_8, id_9, id_10) Values ('"&nombre&"', '"&direccion&"', '"&date&"', "&Session("total")&", "&id(1)&", "&id(2)&", "&id(3)&", "&id(4)&", "&id(5)&", "&id(6)&", "&id(7)&", "&id(8)&", "&id(9)&", "&id(10)&")".

Pero ¿como podria evitar esta situacion e ir asignando dinamicamente los pedidos segun las necesidades?. Muchas gracias por anticipado.

RESPUESTA

Esta librerías, como ya supondrás, no está pensda para utilizarla comercialmente, sino como una práctica que ayude a dominar un poco más las ASP.

El ejemplo de problema que planteas es uno de los casos en los que no está indicada. Para solucionarlo a mi se me ocurre que tengas por separado la tabla del pedido y la de los artículos del pedido.

De tal modo, a la tabla de la que se hace el insert, se le incluiría todo menos los campos id_1 a id_10. Y habría otra tabla que debería contener todos los artículos del pedido.

Esa segunda tabla debería tener por lo menos el identificador del pedido y el identificador del artículo. También podría contener otras cosas como las unidades solicitadas de cada artículo.

El insert que tienes se traduciría entonces en:

  • 1 insert con el pedido en si, sin los artículos
  • varios insert en la tabla de articulo_pedido, uno por cada artículo solicitado (pueden ser 1, 2, 3 o 100.000)
Espero que esta pequeña explicación te permita entender la idea.

Ruben Vilar

21/1/2004
Como comenta el webmaster, exactamente, en todos (99%) de las bases de datos de pedidos, albaranes, facturas, y en definitiva, todos los documentos que contienen lineas de articulos, se trabaja con almenos dos tablas para el documento, la de cabezera y la de lineas, a ejemplo, un tpv generalmente tiene

tiquets_cabezera
tiquets_lineas

En la tabla de lineas se hace referencia a una id unica de la tabla de cabezeras y de esta manera podemos trabajar con las lineas separadamente, pudiendo editarlas, añadirlas, etc... de forma ilimitada.

Salu2

Pedro

22/4/2004
Hola,
Estoy empezando con asp y la verdad es que no se como solucionar este problema. ¿Como se puede hacer para añadir el mismo id en la tabla pedidos y en articulo-pedidos?
Probe con esto , pero me da error, Cadena clase no válida

Set RS=Server.CreateObject("ADODB.Recorset")
With RS
.open "pedidos" ,adOpenDynamic, AdLockOptimistic,admdTableDirect
.AddNew
.Fields("nombre")=nombre
.Fields("direccion")=direccion
.Fields("fecha")=date
.Fields("total")=Session("total")
.update
MiID= .Fields("idpedidos")
End With

Aparte de esto no tengo muy claro como se anidan los inserts para que solo añadas un registro a pedidos y 1,2,3,4... a articulo pedido.
¿Podeis orientarme he probado varias formas? pero ninguna me ha funcionado.

Muchas gracias

asd

15/11/2008
<a href="http://www.mzaeen.com/vb/f34/">&#1589;&#1608;&#1585;</a> -
<a href="http://www.mzaeen.com/vb/f6/">&#1575;&#1586;&#1610;&#1575;&#1569;</a> -
<a href="http://www.mzaeen.com/vb/f6/">&#1605;&#1608;&#1590;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f6/">&#1601;&#1587;&#1575;&#1578;&#1610;&#1606;</a> -
<a href="http://www.mzaeen.com/vb/f72/">&#1605;&#1603;&#1610;&#1575;&#1580;</a> -
<a href="http://www.mzaeen.com/vb/f72/">&#1605;&#1610;&#1603; &#1575;&#1576;</a> -
<a href="http://www.mzaeen.com/vb/f72/">&#1575;&#1603;&#1587;&#1587;&#1608;&#1575;&#1585;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f73/">&#1583;&#1610;&#1603;&#1608;&#1585;</a> -
<a href="http://www.mzaeen.com/vb/f73/">&#1575;&#1579;&#1575;&#1579;</a> -
<a href="http://www.mzaeen.com/vb/f73/">&#1594;&#1585;&#1601; &#1606;&#1608;&#1605;</a> -
<a href="http://www.mzaeen.com/vb/f38/">&#1581;&#1604;&#1608;&#1610;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f38/">&#1591;&#1576;&#1582;</a> -
<a href="http://www.mzaeen.com/vb/f71/">&#1591;&#1576;</a> -
<a href="http://www.mzaeen.com/vb/f71/">&#1585;&#1580;&#1610;&#1605;</a> -
<a href="http://www.mzaeen.com/vb/f7/">&#1588;&#1593;&#1585;</a> -
<a href="http://www.mzaeen.com/vb/f7/">&#1602;&#1589;&#1575;&#1574;&#1583;</a> -
<a href="http://www.mzaeen.com/vb/f41/">&#1582;&#1608;&#1575;&#1591;&#1585;</a> -
<a href="http://www.mzaeen.com/vb/f18/">&#1602;&#1589;&#1589;</a> -
<a href="http://www.mzaeen.com/vb/f15/">&#1603;&#1608;&#1585;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f16/">&#1589;&#1608;&#1585; &#1587;&#1610;&#1575;&#1585;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f10/">&#1591;&#1585;&#1576;</a> -
<a href="http://www.mzaeen.com/vb/f34/">&#1589;&#1608;&#1585;</a> -
<a href="http://www.mzaeen.com/vb/f51/">&#1605;&#1602;&#1575;&#1591;&#1593; &#1601;&#1610;&#1583;&#1610;&#1608; </a> -
<a href="http://www.mzaeen.com/vb/f51/">&#1576;&#1604;&#1608;&#1578;&#1608;&#1579;</a> -
<a href="http://www.mzaeen.com/vb/f66/">&#1575;&#1604;&#1593;&#1575;&#1576; &#1601;&#1604;&#1575;&#1588;</a> -
<a href="http://www.mzaeen.com/vb/f68/">&#1575;&#1601;&#1604;&#1575;&#1605; &#1575;&#1606;&#1605;&#1610;</a> -
<a href="http://www.mzaeen.com/vb/f68/">&#1589;&#1608;&#1585; &#1575;&#1606;&#1605;&#1610;</a> -
<a href="http://www.mzaeen.com/vb/f61/">&#1575;&#1601;&#1604;&#1575;&#1605;</a> -
<a href="http://www.mzaeen.com/vb/f63/">&#1575;&#1601;&#1604;&#1575;&#1605; &#1593;&#1585;&#1576;&#1610;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f64/">&#1605;&#1587;&#1604;&#1587;&#1604;&#1575;&#1578; &#1575;&#1580;&#1606;&#1576;&#1610;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f75/">&#1589;&#1608;&#1585; &#1605;&#1587;&#1604;&#1587;&#1604;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f76/">&#1605;&#1587;&#1604;&#1587;&#1604;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f22/">&#1576;&#1585;&#1575;&#1605;&#1580;</a> -
<a href="http://www.mzaeen.com/vb/f21/">&#1576;&#1585;&#1575;&#1605;&#1580; &#1606;&#1578; </a> -
<a href="http://www.mzaeen.com/vb/f67/">&#1605;&#1587;&#1606;&#1580;&#1585;</a>
<a href="http://www.mzaeen.com/vb/f67/">&#1578;&#1608;&#1576;&#1610;&#1603;&#1575;&#1578;</a>
<a href="http://www.mzaeen.com/vb/f70/">&#1579;&#1610;&#1605;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f70/">&#1582;&#1604;&#1601;&#1610;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f70/">&#1575;&#1604;&#1593;&#1575;&#1576; &#1580;&#1608;&#1575;&#1604;</a> -
<a href="http://www.mzaeen.com/vb/f23/">&#1576;&#1585;&#1575;&#1605;&#1580; &#1580;&#1608;&#1575;&#1604;</a> -
<a href="http://www.mzaeen.com/vb/f23/">&#1606;&#1594;&#1605;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f23/">&#1576;&#1585;&#1575;&#1605;&#1580; &#1606;&#1608;&#1603;&#1610;&#1575;</a> -
<a href="http://www.mzaeen.com/vb/f65/">&#1605;&#1587;&#1580;&#1575;&#1578;</a> -
<a href="http://www.mzaeen.com/vb/f65/">&#1589;&#1608;&#1585; &#1608;&#1587;&#1575;&#1574;&#1591;</a> -
<a href="http://www.mzaeen.com/vb/f65/">&#1585;&#1587;&#1575;&#1574;&#1604; &#1580;&#1608;&#1575;&#1604;</a> -
<a href="http://www.mzaeen.com/vb/f24/">&#1601;&#1608;&#1578;&#1588;&#1608;&#1576;</a> -
<a href="http://www.mzaeen.com/vb/f24/">&#1578;&#1589;&#1575;&#1605;&#1610;&#1605;</a> -
<a href="http://www.mzaeen.com/vb/f54/">&#1578;&#1585;&#1580;&#1605;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f9/">&#1605;&#1608;&#1575;&#1590;&#1610;&#1593; &#1605;&#1579;&#1610;&#1585;&#1577;</a> -
<a href="http://www.mzaeen.com/vb/f53/">&#1575;&#1606;&#1575;&#1588;&#1610;&#1583;</a> -