Mostrar el carrito PHP

  • Por
Función para mostrar los productos almacenados en el carrito de la compra, en PHP.
La última función de las que vamos a ver aquí sirve para mostrar todos los productos del carrito. Tiene que hacer un simple bucle que recorra los arrays de productos, que se han ido rellenando al meter productos en el carrito. Debe mostrar los datos de cada producto según se recorre con el bucle. Además, debe proporcionar el importe total de la compra y un enlace para quitar cualquier producto del carrito.

function imprime_carrito(){
    $suma = 0;
    echo '<table border=1 cellpadding="3">
    <tr>
    <td><b>Nombre producto</b></td>
    <td><b>Precio</b></td>
    <td> </td>
    </tr>';
    for ($i=0;$i<$this->num_productos;$i++){
       if($this->array_id_prod[$i]!=0){
          echo '<tr>';
          echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
          echo "<td>" . $this->array_precio_prod[$i] . "</td>";
          echo "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
          echo '</tr>';
          $suma += $this->array_precio_prod[$i];
       }
    }
    //muestro el total
    echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td> </td></tr>";
    //total más IVA
    echo "<tr><td><b>IVA (16%):</b></td><td> <b>" . $suma * 1.16 . "</b></td><td> </td></tr>";
    echo "</table>";
}


La función declara primero la variable suma donde se guardará la suma de importes de los productos.

Se muestran todos los productos con un bucle que recorre las líneas del carrito, desde la primera hasta el número de productos. En cada línea del carrito se muestran sus datos, teniendo cuidado porque si el identificador del producto era cero quería decir que ese producto había sido borrado del carrito. Además, acumulamos en la variable suma el importe de todos los productos del carrito que no han sido borrados previamente.

Todavía dentro del bucle que recorre los productos del carrito, colocamos un enlace para que el visitante pueda eliminar un producto. Hay que darse cuenta que el enlace para borrar un producto indica como parámetro la línea del carrito que se debe borrar, que era lo que nosotros necesitábamos en la función creada para borrar los productos.

Ya fuera del bucle, imprimimos el importe total con la suma de los importes de los productos que hemos ido acumulando durante el bucle.

Código completo de la clase

Veamos a continuación cómo quedaría la clase carrito completa, para que no se nos pase ningún detalle.

class carrito {
    //atributos de la clase
    var $num_productos;
    var $array_id_prod;
    var $array_nombre_prod;
    var $array_precio_prod;

    //constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    function carrito () {
       $this->num_productos=0;
    }

    //Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    function introduce_producto($id_prod,$nombre_prod,$precio_prod){
       $this->array_id_prod[$this->num_productos]=$id_prod;
       $this->array_nombre_prod[$this->num_productos]=$nombre_prod;
       $this->array_precio_prod[$this->num_productos]=$precio_prod;
       $this->num_productos++;
    }

    //Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    function imprime_carrito(){
       $suma = 0;
       echo '<table border=1 cellpadding="3">
       <tr>
       <td><b>Nombre producto</b></td>
       <td><b>Precio</b></td>
       <td> </td>
       </tr>';
       for ($i=0;$i<$this->num_productos;$i++){
          if($this->array_id_prod[$i]!=0){
             echo '<tr>';
             echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
             echo "<td>" . $this->array_precio_prod[$i] . "</td>";
             echo "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
             echo '</tr>';
             $suma += $this->array_precio_prod[$i];
          }
       }
       //muestro el total
       echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td> </td></tr>";
       //total más IVA
       echo "<tr><td><b>IVA (16%):</b></td><td> <b>" . $suma * 1.16 . "</b></td><td> </td></tr>";
       echo "</table>";
    }

    //elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    function elimina_producto($linea){
       $this->array_id_prod[$linea]=0;
    }
}

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Bruno Savron

18/10/2006
Donde se ingresa este código ??

if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}

No es en la librería ,después de la definición de clase,..??Donde precisamente ??

RESPUESTA

Obviamente, después de la definición de la clase, porque si no no te funcionará.
Como también utiliza sesiones, tendrás también que iniciar la sesión antes de poder ejecutar ese código.
Ahora bien, el codigo luego lo podrás poner donde lo necesites, siempre que sea antes de trabajar con el carrito y después de haber incluido el código de la clase y haber iniciado la sesión.

Principiante

11/2/2007
Lo que no termino de entender es como le muestro esa informacion al vendedor, si me puedes aclarar esa duda te lo agradeceria!

david

13/3/2007
hola me gustaria saver que es lo que hacen en realidad la session que cuando miro el codigo y veo lo de $_session me lio un poco ¿a que es lo que hace la session? ¿a una base de dato? ¿o lo almacena en una variable de de la session? ¿o que es lo que es?
como por ejemplo lo siguiente cuando pone $_session, ¿a que es lo que llama o hace referencia?.
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}

david

13/3/2007
hola soy el chaval que hizo el anterior comentario por favor haber si podeis responderme rapido que tengo que presentar un trabajo para mi modulo y necesito informacion sobre lo preguntado. muchas gracias

Piropeator

08/5/2007
No podrían poner la ejecución simulada del Script PHP para el Carrito de compras?

x

06/12/2007
no se entiende na su carrito harto malo

josancin

25/9/2009
con los datos del ejemplo deberia funcionar?
hola a todos,
he descargado los scripts con el codigo integro
si doy por ejemplo al ejemplo de silla modelo jupiter 80 euros, despues doy a ver carrito y no sale nada

¿no deberian salir los datos de la silla modelo jupiter 80 euros?
gracias y que vaya bien

mamamama1

18/12/2009
holas
este crisp para q se entienda mejor debe de tener mas explicaciones, muestras por ejemplo para ver como funciona (vedios)

Fran

21/2/2010
Que guay!!
Tu código está fenomenal.

La verdad es q pa no tener ni idea de PHP me a costado tita ponerlo en marcha!!!

Muchas Gracias...

Para los anteriores comentarios, hay que iniciar sesion poniendo:
<?
session_start();
class carrito {

Vamos, iniciar sesion antes de declarar la clase.
y hay q poner:


if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}

Justo al final de la case, para que la cargue..

ahh, y como el php4 ya no se usa en nada cambiar el nombre de la función constructora...

function __constructor() {
$this->num_productos=0;
}

MUCHAS GRACIAS.

PD: Jamás hagas caso del que falte a tu trabajo especialmente si es como éste.

agus210

24/4/2010
Duda
Hola que tal espero que revicen este comentario, bueno al menos tu fran, lo que pasa es que ya hice lo que pones anteriormente y no me muestra los pruductos, me muestra:

imprime_carrito(); ?>

Ollie

14/5/2010
eliminar producto
Viendo detenidamente los arrays de la instancia del carrito, me doy cuenta que pones a 0 la posicion del producto eliminado pero solo en el id, tambien habria que hacer lo mismo para el array de los nombres no cres?
o estoy mal

quedaria algo asi como: unset($this->array_id_prod[$linea]);

y lo mismo para el nombre y el precio no cres?

o corrigeme si estoy mal gracias de antemano

jiorchovic

24/9/2010
Excelente aporte
Me gusto el aporte y el codigo si funciona, solo le agrege antes del isset($_SESSION...), session_start();..

espero pronto subir algo de como kedo lo ke stoe aciendo
saludos

dajacar2

04/12/2010
ayuda
me podrias ayudar a como hacerlo correr, dajacar@hotmail.com

veronica medina

18/9/2012
adquisicion de revistas
quiero adquirir los numeros 20, 21 y 22 de la revista de fieltro

Alumno de 2ºDAW

16/4/2014
Maravilloso
Nada más escribo para decirte que me ha ido a la perfección y que la explicación, al menos para mi, ha sido muy clara. Y el "resumen final" que has hecho lo ha dejado sin duda alguna.

Decirte que voy a usar este código para mi proyecto de fin de curso y que estoy muy agradecido.
Gracias Miguel Angel!

Ivan

14/6/2014
Duda
Tengo una duda sobre el codigo, ya que cuando imprime el carrito segun el registro que haya seleccionado lo muestra doble en el carrito en vez de meter solo un producto, cual sera el problema?