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.
Re erencia: 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.

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 KtdGKbG ombre 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 KtdGKbG ombre 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

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

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<@

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.

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.

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.

También podría gustarte