Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Carrito Compra PHP
Manual Carrito Compra PHP
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