Está en la página 1de 9

Tu mejor ayuda para aprender a hacer webs

www.desarrolloweb.com
Carrito de la compra en PHP
Autores del manual
Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Miguel Angel Alvarez
Director de DesarrolloWeb.com
http://www.desarrolloweb.com
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
"
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
#$ cap%tulos&
Carrito de la compra en PHP
'amos a (er una manera sencilla de realizar un carrito de la compra en )*)+ utilizando una
(ariable de sesi!n para guardar los datos del carrito+ como los nombres de los productos+ sus
precios y otros datos de inter,s. En estos ejemplos nos (amos a centrar e-clusi(amente en la
.uncionalidad del carrito+ es decir+ la memorizaci!n de los productos comprados a lo largo de
toda la sesi!n+ dejando de lado todo lo relati(o a presentaci!n o la e-tracci!n de los productos
de una base de datos.
)ara entender este manual son necesarios unos conocimientos pre(ios sobre )*)+ /ue se
pueden obtener de la lectura de nuestro manual de )*) http://www.desarrolloweb.com/php/ o
los talleres pr0cticos de la tecnolog%a http://www.desarrolloweb.com/manuales/1/. Debemos
prestar especial atenci!n al manejo de sesiones en )*) y+ dado /ue esta implementaci!n del
carrito est0 realizada utilizando programaci!n orientada a objetos+ ser0 necesario /ue
conozcamos un poco ese tipo de programaci!n+ particularmente en )*) 2.
El carrito lo hemos creado con la (ersi!n )*) 2. )ara /ue este ejemplo .uncione en )*) $ #/ue
b0sicamente cambia con respecto a su antecesor en el trabajo con objetos& habr%a /ue realizar
algunas modi.icaciones.
Reerencia: Disponemos de algunos art%culos sobre la programaci!n orientada a objetos en )*) 2.
3e pueden descargar los c!digos de este art%culo en un archi(o comprimido.
!ibrer"a lib#carrito.p$p
'amos a atacar al problema creando una librer%a con la declaraci!n de una clase+ /ue luego
utilizaremos para crear un objeto carrito. 4on dicho objeto implementaremos el trabajo t%pico
del carro de la compra+ es decir+ introducir productos+ e-traerlos+ contabilizar precios+ etc. Esta
librer%a la guardaremos en un archi(o llamado lib5carrito.php y contendr0 el c!digo de la clase
carrito+ con todos sus m,todos y propiedades.
El carrito se debe poder acceder en cual/uier momento+ siempre y cuando el (isitante
permanezca en la p0gina. 6dem0s+ cada (isitante debe disponer de un carrito propio. 6un/ue
podr%amos pensar en otras soluciones+ estas necesidades descritas inicialmente+ hacen muy
recomendable el uso de (ariables de sesi!n+ puesto /ue o.recen la mejor .orma de tratar con
datos espec%.icos de cada usuario+ /ue deben perdurar entre las distintas p0ginas /ue (isite.
'amos a mantener una (ariable de sesi!n con una instancia de la clase carrito+ /ue contendr0
el carro de la compra del (isitante. Esta (ariable de sesi!n se guardar0 en
753E3389:;ocarrito;< y se debe crear al acceder a la p0gina+ siempre y cuando no se haya
creado pre(iamente. )or ello+ en cada p0gina se ha de comprobar si hay un carrito creado y+ si
no es as%+ se debe instanciar el objeto.
i. #=isset#753E3389:;ocarrito;<&&>
753E3389:;ocarrito;< ? new carrito#&@
A
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
B
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Este c!digo lo hemos situado dentro del archi(o librer%a del carrito+ despu,s de la declaraci!n
de la clase.
Artculo por Miguel Angel Alvarez
Estudio de las necesidades del carrito
6hora nos (amos a .ijar en la clase carrito. )ara empezar (amos a hacer un estudio de las
.uncionalidades y datos /ue deber%a contener.
M%todos del ob&eto carrito
Las .uncionalidades /ue deber%a implementar el objeto carrito se de.inir0n como m,todos de la
clase carro de la compra. En principio+ se deben crear los siguientes m,todos:
8ntroducir un producto en el carrito
Eliminar un producto del carrito
Costrar el carrito
9tras .uncionalidades /ue seguro /ue necesitar0s a medida /ue a(ances en el trabajo...
'atos a utilizar
)ara empezar+ tenemos /ue lle(ar la cuenta del nDmero de productos /ue se han introducido
en el carrito. En el momento de creaci!n del objeto carrito+ el nDmero de productos debe ser
igual a cero.
Tambi,n necesitaremos guardar los id5producto de cada uno de los productos /ue se (ayan
introduciendo en el carrito. Lo haremos a tra(,s del array 7array5id5prod+ /ue es una de las
propiedades del objeto.
6hora bien+ probablemente sea Dtil guardar m0s /ue los simples identi.icadores de los
productos. 3i se guarda su precio y su nombre puede ser Dtil para mostrar r0pidamente esos
(alores sin necesidad de acceder a la base de datos.
)ara ello se utilizan otro par de arrays+ /ue tambi,n se han creado como atributos del objeto
carrito. Estos son 7array5nombre5prod+ para almacenar los nombres de los productos y
7array5precio5prod+ para guardar los precios de cada uno de los productos del carrito.
Artculo por Miguel Angel Alvarez
Implementacin de la clase carrito en PHP
4omo hab%amos dicho+ el carrito de la compra se ha implementado en una clase+ para
apro(echar algunas de las (entajas de la programaci!n a objetos. 'amos a (er ahora c!mo
realizar esa clase+ lo /ue incluye la de.inici!n de propiedades y m,todos.
Atributos de la clase carrito
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
E
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Es pre.erible empezar por (er los atributos /ue tendr0 la clase carrito+ /ue ya adelantamos en
el cap%tulo anterior.
//atributos de la clase
(ar 7num5productos@
(ar 7array5id5prod@
(ar 7array5nombre5prod@
(ar 7array5precio5prod@
El atributo 7num5productos guarda el nDmero de productos almacenados en el carrito.
7array5id5prod guarda los identi.icadores de los productos comprados. 7array5nombre5prod
almacena los nombres de los productos y por Dltimo+ 7array5precio5prod+ /ue guarda el precio
de los productos.
)or ejemplo+ si tu(i,semos un solo producto en el carrito+ 7num5productos (aldr%a uno.
6dem0s+ en los arrays tendr%amos una sola posici!n #con %ndice cero&+ donde se guardar%a el
identi.icador+ nombre y precio. Estos datos se guardan por separado en cada uno de los tres
arrays.
M%todos del carrito
'amos ahora con las .unciones t%picas del carrito /ue se necesitar0 crear en algDn momento.
Constructor
3e debe contar con un constructor /ue resuma las tareas de inicializaci!n del carrito. En
concreto+ el constructor simplemente inicia a cero el nDmero de productos del carrito.
.unction carrito #& >
7thisFGnum5productos?H@
A
(ota: Este objeto est0 construido con )*) 2+ donde los constructores tienen el mismo nombre /ue la
clase+ en este caso ;carrito;. En )*) $ los constructores deben llamarse siempre 55constructor
)ntroducir un producto en el carrito
3e hace con el m,todo introduce5producto#&+/ue recibe los datos del producto y los introduce
en el objeto carrito. Tambi,n aumenta en uno el nDmero de productos del carrito.
.unction introduce5producto#7id5prod+7nombre5prod+7precio5prod&>
7thisFGarray5id5prod:7thisFGnum5productos<?7id5prod@
7thisFGarray5nombre5prod:7thisFGnum5productos<?7nombre5prod@
7thisFGarray5precio5prod:7thisFGnum5productos<?7precio5prod@
7thisFGnum5productosII@
A
El incremento se hace al .inal por/ue el numero de productos inicialmente es cero y el primer
producto a insertar deseamos /ue tenga ese %ndice.
*orrar un producto del carrito
Debemos disponer de una .unci!n /ue nos permita eliminar un producto del carrito. En este
caso (oy a crear una .unci!n /ue recibe el nDmero de l%nea del producto dentro del carrito+ /ue
corresponde con el %ndice de los arrays de productos /ue deseamos borrar. )odr%amos recibir
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
2
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
tambi,n el identi.icador del producto a borrar o incluso puede ser /ue nos sea Dtil crear un par
de .unciones para borrar productos del carrito+ una recibiendo la l%nea del carrito y otra
recibiendo el identi.icador del producto. )ara este ejemplo me resulta m0s .0cil recibir la l%nea
en la /ue est0 ese producto en el carrito.
.unction elimina5producto#7linea&>
7thisFGarray5id5prod:7linea<?H@
A
3implemente colocamos a cero el identi.icador de producto a borrar. o borramos
directamente las (ariables de sesi!n por/ue eso nos obligar%a a recolocar todos los %ndices de
las (ariables de sesi!n para /ue .uesen correlati(os. Este detalle tendremos /ue tenerlo en
cuenta a la hora de mostrar el carrito+ pues si el identi.icador de producto es cero+ se entiende
/ue el producto est0 eliminado del carrito.
Tampoco disminuimos en uno el nDmero de productos+ por/ue en realidad no estamos
eliminando un producto de la estructura de datos+ sino /ue lo estoy marcando a cero para
saber /ue no hay nada /ue contabilizar en ese caso.
En el siguiente cap%tulo (eremos la implementaci!n del m,todo m0s complicado del carrito+
/ue es el encargado de mostrar todos los productos /ue hay dentro.
Artculo por Miguel Angel Alvarez
Mostrar el carrito PHP
La Dltima .unci!n de las /ue (amos a (er a/u% sir(e para mostrar todos los productos del
carrito. Tiene /ue hacer un simple bucle /ue recorra los arrays de productos+ /ue se han ido
rellenando al meter productos en el carrito. Debe mostrar los datos de cada producto segDn se
recorre con el bucle. 6dem0s+ debe proporcionar el importe total de la compra y un enlace
para /uitar cual/uier producto del carrito.
.unction imprime5carrito#&>
7suma ? H@
echo JKtable border?" cellpadding?;E;G
KtrG
KtdGKbGombre productoK/bGK/tdG
KtdGKbG)recioK/bGK/tdG
KtdG K/tdG
K/trGJ@
.or #7i?H@7iK7thisFGnum5productos@7iII&>
i.#7thisFGarray5id5prod:7i<=?H&>
echo JKtrGJ@
echo ;KtdG; . 7thisFGarray5nombre5prod:7i< . ;K/tdG;@
echo ;KtdG; . 7thisFGarray5precio5prod:7i< . ;K/tdG;@
echo ;KtdGKa hre.?Jeliminar5producto.phpLlinea?7iJGEliminar productoK/tdG;@
echo JK/trGJ@
7suma I? 7thisFGarray5precio5prod:7i<@
A
A
//muestro el total
echo ;KtrGKtdGKbGT9T6L:K/bGK/tdGKtdG KbG7sumaK/bGK/tdGKtdG K/tdGK/trG;@
//total m0s 8'6
echo ;KtrGKtdGKbG8'6 #"1M&:K/bGK/tdGKtdG KbG; . 7suma N "."1 . ;K/bGK/tdGKtdG K/tdGK/trG;@
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
$
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
echo ;K/tableG;@
A
La .unci!n declara primero la (ariable suma donde se guardar0 la suma de importes de los
productos.
3e muestran todos los productos con un bucle /ue recorre las l%neas del carrito+ desde la
primera hasta el nDmero de productos. En cada l%nea del carrito se muestran sus datos+
teniendo cuidado por/ue si el identi.icador del producto era cero /uer%a decir /ue ese producto
hab%a sido borrado del carrito. 6dem0s+ acumulamos en la (ariable suma el importe de todos
los productos del carrito /ue no han sido borrados pre(iamente.
Toda(%a dentro del bucle /ue recorre los productos del carrito+ colocamos un enlace para /ue el
(isitante pueda eliminar un producto. *ay /ue darse cuenta /ue el enlace para borrar un
producto indica como par0metro la l%nea del carrito /ue se debe borrar+ /ue era lo /ue nosotros
necesit0bamos en la .unci!n creada para borrar los productos.
Oa .uera del bucle+ imprimimos el importe total con la suma de los importes de los productos
/ue hemos ido acumulando durante el bucle.
C+digo completo de la clase
'eamos a continuaci!n c!mo /uedar%a la clase carrito completa+ para /ue no se nos pase
ningDn detalle.
class carrito >
//atributos de la clase
(ar 7num5productos@
(ar 7array5id5prod@
(ar 7array5nombre5prod@
(ar 7array5precio5prod@
//constructor. Pealiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de productos a H
.unction carrito #& >
7thisFGnum5productos?H@
A
//8ntroduce un producto en el carrito. Pecibe los datos del producto
//3e encarga de introducir los datos en los arrays del objeto carrito
//luego aumenta en " el numero de productos
.unction introduce5producto#7id5prod+7nombre5prod+7precio5prod&>
7thisFGarray5id5prod:7thisFGnum5productos<?7id5prod@
7thisFGarray5nombre5prod:7thisFGnum5productos<?7nombre5prod@
7thisFGarray5precio5prod:7thisFGnum5productos<?7precio5prod@
7thisFGnum5productosII@
A
//Cuestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
.unction imprime5carrito#&>
7suma ? H@
echo JKtable border?" cellpadding?;E;G
KtrG
KtdGKbGombre productoK/bGK/tdG
KtdGKbG)recioK/bGK/tdG
KtdG K/tdG
K/trGJ@
.or #7i?H@7iK7thisFGnum5productos@7iII&>
i.#7thisFGarray5id5prod:7i<=?H&>
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
1
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
echo JKtrGJ@
echo ;KtdG; . 7thisFGarray5nombre5prod:7i< . ;K/tdG;@
echo ;KtdG; . 7thisFGarray5precio5prod:7i< . ;K/tdG;@
echo ;KtdGKa hre.?Jeliminar5producto.phpLlinea?7iJGEliminar productoK/tdG;@
echo JK/trGJ@
7suma I? 7thisFGarray5precio5prod:7i<@
A
A
//muestro el total
echo ;KtrGKtdGKbGT9T6L:K/bGK/tdGKtdG KbG7sumaK/bGK/tdGKtdG K/tdGK/trG;@
//total m0s 8'6
echo ;KtrGKtdGKbG8'6 #"1M&:K/bGK/tdGKtdG KbG; . 7suma N "."1 . ;K/bGK/tdGKtdG K/tdGK/trG;@
echo ;K/tableG;@
A
//elimina un producto del carrito. recibe la linea del carrito /ue debe eliminar
//no lo elimina realmente+ simplemente pone a cero el id+ para saber /ue esta en estado retirado
.unction elimina5producto#7linea&>
7thisFGarray5id5prod:7linea<?H@
A
A
Artculo por Miguel Angel Alvarez
Utilizacin de la clase carrito en PHP
)ara ilustrar el .uncionamiento de la clase carrito+ (amos a realizar unas p0ginas donde
podremos utilizarla. Pealmente son unas p0ginas sencillas+ el trabajo duro ya se realiz! al
crear el propio carrito.
inde-.php
La p0gina de inicio muestra una lista de objetos para comprar. Esta lista est0 completamente
in(entada sobre la marcha+ pero en nuestros ejemplos lo l!gico ser%a /ue la e-traj,ramos de
una base de datos.
KL
include#;lib5carrito.php;&@
LG
KhtmlG
KheadG
KtitleGTrabajando con el carritoK/titleG
K/headG
KbodyG
Ka hre.?;mete5producto.phpLid?"BQnombre?sillaImodeloIjupiterQprecio?RH;G3illa modelo jupiter RH eurosK/aG
KbrG
KbrG
Ka hre.?;mete5producto.phpLid?"1Qnombre?mesaIcamillaIo.ertaQprecio?BS;GCesa camilla en o.erta BS
eurosK/aG
KbrG
KbrG
Ka hre.?;mete5producto.phpLid?"RQnombre?3illaIo.icinaQprecio?"HB;G3illa o.icina "HB eurosK/aG
KbrG
KbrG
Ka hre.?;mete5producto.phpLid?SRQnombre?6paradorIcocinaIblancoQprecio?BHH;G6parador cocina blanco BHH
eurosK/aG
KbrG
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
T
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
KbrG
KbrG
F Ka hre.?;(er5carrito.php;G'er carritoK/aG
K/bodyG
K/htmlG
mete#producto.p$p
Esta p0gina introduce el un producto en el carrito de la compra. Pecibe los datos del producto
a introducir por la UPL. Lo /ue hace es llamar al m,todo introduce5producto#&+ pasando los
datos del producto+ /ue se reciben por VET.
KL
include#;lib5carrito.php;&@
753E3389:;ocarrito;<FGintroduce5producto#75VET:;id;<+ 75VET:;nombre;<+ 75VET:;precio;<&@
LG
KhtmlG
KheadG
KtitleG8ntroduce )roductoK/titleG
K/headG
KbodyG
)roducto introducido.
KbrG
KbrG
Ka hre.?;inde-.php;GF 'ol(erK/aG
KbrG
KbrG
Ka hre.?;(er5carrito.php;GF 'er carritoK/aG
K/bodyG
K/htmlG
ver#carrito.p$p
La p0gina /ue muestra el carrito es b0sicamente una llamada al m,todo de la clase carrito /ue
se encarga de mostrar el contenido del carro de la compra y la suma de los precios de los
productos.
KL
include#;lib5carrito.php;&@
LG
KhtmlG
KheadG
KtitleG8ntroduce )roductoK/titleG
K/headG
KbodyG
KL
753E3389:;ocarrito;<FGimprime5carrito#&@
LG
KbrG
KbrG
Ka hre.?;inde-.php;G'ol(erK/aG
K/bodyG
K/htmlG
eliminar#producto.p$p
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
R
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Esta p0gina recibe por VET el %ndice del producto /ue se desea borrar. 4on el %ndice+ se llama
al m,todo elimina5producto+ /ue se encarga de marcar como eliminado el producto del carro.
KL
include#;lib5carrito.php;&@
753E3389:;ocarrito;<FGelimina5producto#75VET:;linea;<&@
LG
KhtmlG
KheadG
KtitleG8ntroduce )roductoK/titleG
K/headG
KbodyG
)roducto eliminado.
KbrG
KbrG
KbrG
Ka hre.?;inde-.php;GF 'ol(erK/aG
KbrG
KbrG
Ka hre.?;(er5carrito.php;GF 'er carritoK/aG
K/bodyG
K/htmlG
Artculo por Miguel Angel Alvarez
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/
Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
S

También podría gustarte