Foros del Web » Programando para Internet » PHP »

foreach

Estas en el tema de foreach en el foro de PHP en Foros del Web. Hola a todos... Su ayuda me salvara mas dias de tortura. Bien, hace poco que intento programar en PHP y he empezado a hacer un ...
  #1 (permalink)  
Antiguo 14/05/2009, 15:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 38
Antigüedad: 16 años, 3 meses
Puntos: 0
foreach

Hola a todos...
Su ayuda me salvara mas dias de tortura.
Bien, hace poco que intento programar en PHP y he empezado a hacer un carrito de compras que tal vez muchos ya han visto debido a que viene de unos videotutoriales. La verdad me ha dado muchos problemas debido a que alli se trabaja con php4 y yo trabajo con php5.
El asunto es que cuando selecciono un libro para colocarlo en el carrito va bien pero cuando le doy al boton salvar cambios me sale este error:
Cita:
Warning: Invalid argument supplied for foreach() in "C....show_cart.php" on line 30
Aqui esta el codigo de mi archivo show_cart.php
Código php:
Ver original
  1. <?php
  2.   include ('book_sc_fns.php');
  3.  
  4. "arroba" $new=$_GET["new"];
  5. $cart=$_SESSION["cart"];
  6.  
  7.   if($new)
  8.   {
  9.      if(!session_is_registered("cart"))
  10.    {
  11.       $cart = array();
  12.       $_SESSION["items"] = 0;
  13.       $_SESSION["total_price"] = "0.00";
  14.     }
  15.     if($cart[$new])
  16.       $cart[$new]++;
  17.     else
  18.       $cart[$new] = 1;
  19.     $total_price = calculate_price($cart);
  20.     $items = calculate_items($cart);
  21.  
  22.   }
  23.   if(isset($_POST["save"]))
  24.   {
  25.     foreach ($cart as $isbn => $qty)
  26.     {
  27.       if($$isbn=="0")
  28.         unset($cart[$isbn]);
  29.       else
  30.         $cart[$isbn] = $$isbn;
  31.     }
  32.     $total_price = calculate_price($cart);
  33.     $items = calculate_items($cart);
  34.   }
  35.  
  36.   do_html_header("Tu carro de compra");
  37.  
  38.   if($cart and array_count_values($cart))
  39.     display_cart($cart);
  40.   else
  41.   {
  42.     echo "<p>No hay artículos en tu carro";
  43.     echo "<hr>";
  44.   }
  45.   $target = "index.php";
  46.  
  47.    if($new)
  48.   {
  49.     $details =  get_book_details($new);
  50.     if($details["catid"])
  51.       $target = "show_cat.php?catid=".$details["catid"];
  52.   }
  53. //  display_button($target, "continue-shopping", "Continue Shopping");
  54. //  $path = $_SERVER["PHP_SELF"];
  55. //  $path = str_replace("show_cart.php", "", $path);
  56.   display_button("       ".$_SERVER["SERVER_NAME"].$path."checkout.php", "go-to-checkout", "Go To Checkout");
  57.   do_html_footer();
  58. ?>

Aqui estan las funciones calculate_price y calculate_items
Código php:
Ver original
  1. function get_book_details($isbn)
  2. {
  3.   if (!$isbn || $isbn=="")
  4.      return false;
  5.  
  6.    $conn = db_connect();
  7.    $query = "select * from books where isbn='$isbn'";
  8.    $result = "arroba"mysql_query($query);
  9.    if (!$result)
  10.      return false;
  11.    $result = "arroba"mysql_fetch_array($result);
  12.    return $result;
  13. }
  14.  
  15. function calculate_price($cart)
  16. {
  17.    $price = 0.0;
  18.   if(is_array($cart))
  19.   {
  20.     $conn = db_connect();
  21.     foreach($cart as $isbn => $qty)
  22.     {
  23.       $query = "select price from books where isbn='$isbn'";
  24.       $result = mysql_query($query);
  25.       if ($result)
  26.       {
  27.         $item_price = mysql_result($result, 0, "price");
  28.         $price +=$item_price*$qty;
  29.       }
  30.     }
  31.   }
  32.   return $price;
  33. }
  34.  
  35. function calculate_items($cart)
  36. {
  37.   $items = 0;
  38.   if(is_array($cart))
  39.   {
  40.     foreach($cart as $isbn => $qty)
  41.     {
  42.       $items += $qty;
  43.     }
  44.   }
  45.   return $items;
  46. }

Me disculpan si existe redundancia alguna en el codigo puesto que estoy tratando de readaptarlo y en realidad no se mucho.
Les agradezco mucho su colaboracion...

Última edición por jam1138; 14/05/2009 a las 19:59 Razón: Cambio coloreado de código
  #2 (permalink)  
Antiguo 14/05/2009, 16:26
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 5 meses
Puntos: 48
Respuesta: foreach

Seguramente foreach no esta recibiendo un array. Asegurate que la variable $cart sea un array.

Saludos!
  #3 (permalink)  
Antiguo 14/05/2009, 19:23
 
Fecha de Ingreso: diciembre-2007
Mensajes: 38
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: foreach

Gracias por responder Synkronice.
No se si estoy equivocada pero pienso que en esta linea estoy declarando el array "$cart = array();" y por ende esa variable es la que se le pasa al foreach.
Llevo como una semana en este codigo y nada que doy con la solucion.
Si alguien tiene otra respuesta se los agradezco mucho....
  #4 (permalink)  
Antiguo 14/05/2009, 21:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: foreach

Viendo tu script seguramente esta programado para usar register globals, eso es un problema de seguridad y es probable que sea la causa del porque no funciona en PHP5, revisa este link: http://www.php.net/variables.external y http://www.php.net/security.globals

Saludos.
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 05:53.