Foros del Web » Programando para Internet » PHP »

Sumar productos en carro de compras

Estas en el tema de Sumar productos en carro de compras en el foro de PHP en Foros del Web. Gente tengo un script de un carro de compras muy simple, funciona con array. Lo que quiero hacer es que cuando agregue un producto 2 ...
  #1 (permalink)  
Antiguo 15/07/2012, 13:34
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 5 meses
Puntos: 1
Sumar productos en carro de compras

Gente tengo un script de un carro de compras muy simple, funciona con array. Lo que quiero hacer es que cuando agregue un producto 2 veces no me lo duplique, sino que me cuente que lo tengo 2 veces. Les dejo el código con el cual funciona.

Yo lo inserto al carro de ésta forma
<a href="mete_producto.php?id=1&nombre=producto&preci o=10">Producto $10</a>

Este es el mete_producto.php

Código PHP:
Ver original
  1. <?
  2. include("lib_carrito.php");
  3. $_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"], $_GET["imagen"]);
  4. ?>
  5.  
  6. <html>
  7. <head>
  8.     <title>Introduce Producto</title>
  9. </head>
  10.  
  11. <body>
  12.  
  13. Producto introducido.
  14. <br>
  15. <br>
  16. <a href="index.php">- Volver</a>
  17. <br>
  18. <br>
  19. <a href="ver_carrito.php">- Ver carrito</a>
  20.  
  21. </body>
  22. </html>

Y este es lib_carrito.php

Código PHP:
Ver original
  1. <?
  2. class carrito {
  3.     //atributos de la clase
  4.     var $num_productos;
  5.     var $array_id_prod;
  6.     var $array_nombre_prod;
  7.     var $array_precio_prod;
  8.     var $array_imagen_prod;
  9.     //constructor. Realiza las tareas de inicializar los objetos cuando se instancian
  10.     //inicializa el numero de productos a 0
  11.     function carrito () {
  12.         $this->num_productos=0;
  13.     }
  14.    
  15.     //Introduce un producto en el carrito. Recibe los datos del producto
  16.     //Se encarga de introducir los datos en los arrays del objeto carrito
  17.     //luego aumenta en 1 el numero de productos
  18.     function introduce_producto($id_prod,$nombre_prod,$precio_prod,$imagen_prod){
  19.         $this->array_id_prod[$this->num_productos]=$id_prod;
  20.         $this->array_nombre_prod[$this->num_productos]=$nombre_prod;
  21.         $this->array_precio_prod[$this->num_productos]=$precio_prod;
  22.         $this->array_imagen_prod[$this->num_productos]=$imagen_prod;
  23.         $this->num_productos++;
  24.     }
  25.  
  26.     //Muestra el contenido del carrito de la compra
  27.     //ademas pone los enlaces para eliminar un producto del carrito
  28.     function imprime_carrito(){
  29.         $suma = 0;
  30.         echo '<table border=1 cellpadding="3">
  31.               <tr>
  32.                 <td><b>Nombre producto</b></td>
  33.                 <td><b>Precio</b></td>
  34.                 <td>&nbsp;</td>
  35.               </tr>';
  36.         for ($i=0;$i<$this->num_productos;$i++){
  37.             if($this->array_id_prod[$i]!=0){
  38.                 echo '<tr>';
  39.                 echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
  40.                 echo "<td>" . $this->array_precio_prod[$i] . "</td>";
  41.                 echo "<img src=' . $this->array_imagen_prod[$i] . ' />";
  42.                 echo "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
  43.                 echo '</tr>';
  44.                 $suma += $this->array_precio_prod[$i];
  45.             }
  46.         }
  47.         //muestro el total
  48.         echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
  49.         //total más IVA
  50.         echo "</table>";
  51.     }
  52.    
  53.     //elimina un producto del carrito. recibe la linea del carrito que debe eliminar
  54.     //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
  55.     function elimina_producto($linea){
  56.         $this->array_id_prod[$linea]=0;
  57.     }
  58. }
  59. //inicio la sesión
  60. //si no esta creado el objeto carrito en la sesion, lo creo
  61. if (!isset($_SESSION["ocarrito"])){
  62.     $_SESSION["ocarrito"] = new carrito();
  63. }
  64. ?>
  #2 (permalink)  
Antiguo 15/07/2012, 18:25
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Sumar productos en carro de compras

Alguien ? .
  #3 (permalink)  
Antiguo 15/07/2012, 18:36
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 12 años, 5 meses
Puntos: 20
Respuesta: Sumar productos en carro de compras

Y agregando una nueva variable cantidad no probaste?

Porque la variable $num_productos almacena el total de items agregados nomas no?

Código PHP:
Ver original
  1. var $num_productos;
  2.     var $array_id_prod;
  3.     var $array_nombre_prod;
  4.     var $array_precio_prod;
  5.     var $array_imagen_prod;
  #4 (permalink)  
Antiguo 15/07/2012, 19:02
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Sumar productos en carro de compras

Sí, así es. Como sería la variable cantidad?
  #5 (permalink)  
Antiguo 15/07/2012, 20:29
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Sumar productos en carro de compras

Te dejaré un ejemplo...

Código PHP:
Ver original
  1. <?php
  2.  
  3. function en_carrito($search) {
  4.     foreach($_SESSION['carrito'] as $item) {
  5.         if ($search == $item['item']) {
  6.             return true;
  7.             break;
  8.         }
  9.     }
  10.  
  11.     return false;
  12. }
  13. $items = $_SESSION['carrito'];
  14. if (isset($_POST['item'])) {
  15.     $item = $_POST['item'];
  16.    
  17.     if (en_carrito($item)) {
  18.         $items[$item]['propiedades']['cantidad'] = $items[$item]['propiedades']['cantidad'] * $_POST['cantidad'];
  19.     }else {
  20.         $items[$item] = array(
  21.                 'item'=>$item,
  22.                 'propiedades'=>array(
  23.                         'cantidad'=>$_POST['cantidad'],
  24.                         'precio'=>$_POST['precio']
  25.                     )
  26.             );
  27.     }
  28.  
  29.     $_SESSION['carrito'] = $items;
  30. }
  31. ?>
  32. <html>
  33.     <head>
  34.         <title>Carrito</title>
  35.     </head>
  36.     <body>
  37.         <form action="carrito.php" method="post">
  38.             <input type="text" name="item" id="">
  39.             <input type="text" name="cantidad" id="">
  40.             <input type="text" name="precio" id="">
  41.             <input type="submit" value="Enviar">
  42.         </form>
  43.         <div>
  44.             <?php
  45.             if (count($items) != 0) {
  46.                 foreach($items as $item => $valor) {
  47.                     echo '<p>item: '.$valor['item'].' - '.$valor['propiedades']['cantidad'].' - '.$valor['propiedades']['precio'].' - '.($valor['propiedades']['precio'] * $valor['propiedades']['cantidad']).'</p>';
  48.                 }
  49.             }else {
  50.                 echo '<p>No hay items en el carrito</p>';
  51.             }
  52.         </div>
  53.     </body>
  54. </html>
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 18/07/2012, 14:35
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Sumar productos en carro de compras

La verdad que no me funcionó el ejemplo, alguien me lo podría explicar?
  #7 (permalink)  
Antiguo 18/07/2012, 16:06
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Sumar productos en carro de compras

aja.... mmmm y al menos podrías indicar el porque dices que no te funciono? marco algún error?
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: compras, html, productos, carrito
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:19.