Foros del Web » Programando para Internet » PHP »

Error en carrito de compras

Estas en el tema de Error en carrito de compras en el foro de PHP en Foros del Web. Hola a todos: Tengo un error que me está volviendo loca. El caso es que cuando trato de modificar la cantidad de productos en mi ...
  #1 (permalink)  
Antiguo 05/05/2009, 09:21
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Pregunta Error en carrito de compras

Hola a todos:

Tengo un error que me está volviendo loca. El caso es que cuando trato de modificar la cantidad de productos en mi carrito de compras, me sale el siguiente error:

Warning: array_count_values() [function.array-count-values]: Can only count STRING and INTEGER values!

Hice un echo var_dump($cart); y noté que al agregar el primer producto me da NULL.

Los productos siguientes si se reflejan y al hacer echo var_dump($cart); me dice esto por ejemplo:

array(1) { [139]=> int(1) }

este es el código de mostrar_carrito.php:

Código PHP:
<?
  
include ('func.php');
   
session_start();
  if(
$new)
  {
    
//nuevo artículo seleccionado
    
if(!session_is_registered("cart"))
    {
      
$cart = array();
      
session_register("cart");
      
$items 0;
      
session_register("items");
      
$precio_total "0.00";
      
session_register("precio_total");
    }
    if(
$cart[$new])
      
$cart[$new]++;
    else
      
$cart[$new] = 1;
    
$precio_total calculate_precio($cart);
    
$items calculate_items($cart);
  }
  if(
$save)
  {
    foreach (
$cart as $sku => $qty)
    {
      if($
$sku=="0")
        unset(
$cart[$sku]);
      else
        
$cart[$sku] = $$sku;
    }
    
$precio_total calculate_precio($cart);
    
$items calculate_items($cart);
  }
  
do_html_header("Tu carro de compra");
  if(
$cart&&array_count_values($cart))
    
mostrar_carro($cart);
  else
  {
    echo 
"<p>No hay artículos en tu carro";
    echo 
"<hr>";
  }
 
?>
Por favor ayudenme a saber que estoy haciendo mal.

Gracias.
  #2 (permalink)  
Antiguo 05/05/2009, 09:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en carrito de compras

Lee en el Manual lo que hace array_count_values.

Si quieres saber solamente si hay items en el carrito usa solamente count().

Saludos.
  #3 (permalink)  
Antiguo 05/05/2009, 09:40
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Error en carrito de compras

Gracias GatorV

Le cambié

if($cart&&array_count_values($cart))

por

if($cart&&count($cart))

pero el problema que tengo es:

1) cuando agrego el primer articulo al carrito no me lo toma en cuenta.

2) Al hacer algun cambio en la cantidad de productos no me aparece el número de productos sino me pone size????

No sé porque...
  #4 (permalink)  
Antiguo 05/05/2009, 09:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en carrito de compras

Como te comente, si ves lo que hace array_count_values y es lo que necesitas, ocupalo pero ve el porque te puede generar errores, en tu array.

Por otro lado todo depende de tu funcion mostrar_carrito, si esta esta mal programada no te va a mostrar nada.

Saludos.
  #5 (permalink)  
Antiguo 05/05/2009, 10:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
cómo hago para que cuando agregue el nuevo producto también agregue 1 a items???

Esta es mi función mostrar_carro:

Código PHP:
<?
function mostrar_carro($cart$change true$images 2)
{
  global 
$items;
  global 
$total_price;

  echo 
"<table border = 0 width = 100% cellspacing = 0>
        <form action = show_cart.php method = post>
        <tr><th colspan = "
. (1+$images) ." bgcolor=\"#D0E0F0\">Item/Tienda</th>
        <th bgcolor=\"#D0E0F0\">Precio</th>
        <th bgcolor=\"#D0E0F0\">Cantidad</th>
        <th bgcolor=\"#D0E0F0\">Total</th></tr>"
;
  
//display each item as a table row
  
foreach ($cart as $sku => $qty)
  {
    
$product get_product_details($sku);
    echo 
"<tr>";
    if(
$images ==true)
    {
      echo 
"<td align = left>";
      if (
file_exists("img/$sku.jpg"))
      {
         
$size GetImageSize("img/".$sku.".jpg");
         if(
$size[0]>&& $size[1]>0)
         {
           echo 
"<img src=\"img/".$sku.".jpg\" border=0 ";
           echo 
"width = "$size[0]/." height = " .$size[1]/">";
         }
      }
      else
         echo 
"&nbsp;";
      echo 
"</td>";
    }
    echo 
"<td align = center>";
    echo 
"<a href = \"mostrar_producto.php?sku=".$sku."\">".$product["title"]."</a> ";
    echo 
"</td>";
    echo 
"<td></td>";
    echo 
"<td align = left>Bs. ".number_format($product["price"], 2);
    echo 
"</td><td align = center>";
    
// if we allow changes, quantities are in text boxes
    
if ($change == true
        echo 
"<input type = text name = \"$sku\" value = $qty>";
    else 
    
//echo $qty;
      
echo "</td><td align = center>$".number_format($product["precio"]*$qty,2)."</td></tr>\n";
  }
   echo 
"<tr>
          <th colspan = "
. (2+$images) ." bgcolor=\"#D0E0F0\">&nbsp;</td>
          <th align = center bgcolor=\"#D0E0F0\">
              $items
          </th>
          <th align = center bgcolor=\"#D0E0F0\">
              Bs. "
.number_format($precio_total2).
          
"</th>
        </tr>"
;
   echo 
"<tr>
          <th colspan = "
. (2+$images) ." bgcolor=\"#ffffff\">&nbsp;</td>
          <th align = center bgcolor=\"#ffffff\">
             IVA
          </th>
          <th align = center bgcolor=\"#ffffff\">
              Bs. "
$iva= ($precio_total*12/100) ."</th>
        </tr>"
;
  
// display total row
  
echo "<tr>
          <th colspan = "
. (2+$images) ." bgcolor=\"#D0E0F0\">&nbsp;</td>
          <th align = center bgcolor=\"#D0E0F0\">
              Total
          </th>
          <th align = center bgcolor=\"#D0E0F0\">
              Bs. "
. ($precio_total $iva) ."
          </th>
        </tr>"
;
  
// display save change button
  
if($change == true)
  {
    echo 
"<tr>
            <td colspan = "
. (1+$images) .">&nbsp;</td>
            <td align = center>
              <input type = hidden name = save value = true>
              <input type = image src = \"images/save-changes.gif\"
                     border = 0 alt = \"Save Changes\">
            </td>
            <td>&nbsp;</td>
        </tr>"
;
  }
  echo 
"</form></table>";
}
?>
Por favor que estoy haciendo mal, no puedo verlo.... ????

Estuve analizando y tengo un problema aqui:

Código PHP:
<?
if($save)
  {
    foreach (
$cart as $sku => $qty)
    {
      if($
$sku=="0") {
        unset(
$cart[$sku]);
        }
      else {
        
$cart[$sku] = $$sku;
    }
    
$precio_total calculate_precio($cart);
    
$items calculate_items($cart);
  }
  }
?>
El valor de $save es true que viene de:

Código PHP:
<?
 
echo "<tr>
            <td colspan = "
. (1+$images) .">&nbsp;</td>
            <td align = center>
              <input type = hidden name = save value = true>
              <input type = image src = \"images/save-changes.gif\"
                     border = 0 alt = \"Save Changes\">
            </td>
            <td>&nbsp;</td>
        </tr>"
;
?>
El punto es que no me trae $cart[$sku].

Cómo puedo hacer para traerlo o si tienen alguna sugerencia para plantear el código de otra manera se los agradezco en el alma.

Última edición por GatorV; 05/05/2009 a las 11:30
  #6 (permalink)  
Antiguo 05/05/2009, 11:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en carrito de compras

Pues si estas usando sesiones te falta el session_start(); para iniciar la sesion y traer las variables de sesion.

Por otro lado veo que confias mucho en el uso de register_globals, eso es un grave riesgo de seguridad, lee esto: http://www.php.net/manual/en/security.globals.php

Saludos.
  #7 (permalink)  
Antiguo 05/05/2009, 11:37
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Error en carrito de compras

ya tengo session_start();

el problema es que no pasa $cart[$sku], parece que al darle al botón de guardar cambios no se lleva esto para hacerlo.

De verdad si pudiera verlo o entenderlo pero no es así, ayudame por favor
  #8 (permalink)  
Antiguo 05/05/2009, 11:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en carrito de compras

Haz un var_dump($cart) en esa pagina y verifica si hay valores o no, por otro lado, en verdad trata de usar las variables globales ($_SESSION, $_POST, $_GET) ya que de la forma que lo estas haciendo te vas a encontrar con muchos problemas al subirlo a un server.

Saludos.
  #9 (permalink)  
Antiguo 05/05/2009, 11:48
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Hice var_dump($cart) al agregar el 1er producto y me da NULL
Hice var_dump($cart) al agregar el 2do producto y me da array(1) { [134]=> int(1) }

Cuando le doy al botón de guardar cambios, var_dump($cart) me da array(2) { [134]=> int(1) [133]=> int(1) }

pero me coloca todo en cero en el carrito (la cantidad, el subtotal, el iva y el total)

No sé que pasa aqui???

Cambie lo de las sesiones globales como me indicaste pero ahora no conserva los productos en el carrito, los reemplaza cada vez que guardo uno nuevo. Lo hice así:

if (!isset($_SESSION['cart']))
{
$cart = array();
$_SESSION['cart'];
$items = 0;
$_SESSION['items'];
$total_price = "0.00";
$_SESSION['precio_total'];
}

y lo otro que mencione en el post anterior tampoco puedo solucionarlo.

De verdad estoy angustiada pues llevo un año haciendo esta página. Por favor ayudenme y muchas gracias.

Última edición por GatorV; 05/05/2009 a las 15:04
  #10 (permalink)  
Antiguo 05/05/2009, 15:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Error en carrito de compras

Entonces el problema lo tienes en tu logica al agregar al carrito, te recomendaria 1) no usar register_globals, desactivarlo para que no te sobreescriba las variables, y que hagas el diagrama de flujo de tu proceso para agregar cosas al carrito.

Saludos.
  #11 (permalink)  
Antiguo 05/05/2009, 21:18
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Error en carrito de compras

claro es la lógica y por eso pedí ayuda. Hoy no es mi día. De todas formas gracias por tu atención.
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 22:14.