Foros del Web » Programando para Internet » PHP »

carrito y variables

Estas en el tema de carrito y variables en el foro de PHP en Foros del Web. Hola a todos, me pueden ayudar con mi problema porfavor, tengo el carrito de webestilo (un poco modificado) y me funciona bien, sin ningun tipo ...
  #1 (permalink)  
Antiguo 16/05/2003, 21:01
Avatar de pabloman  
Fecha de Ingreso: enero-2003
Ubicación: Temuko
Mensajes: 54
Antigüedad: 14 años, 11 meses
Puntos: 0
carrito y variables

Hola a todos, me pueden ayudar con mi problema porfavor, tengo el carrito de webestilo (un poco modificado) y me funciona bien, sin ningun tipo de errores:
carrito webestilo:
Código PHP:
<?
session_start
();
session_register('itemsEnCesta');
if (
$_POST["producto"])
//comprobamos si existe algún producto 
if (!isset($itemsEnCesta))  {
  
$items["producto"]=$_POST["producto"];
  
$items["cantidad"]=$_POST["cantidad"];
  
$items["cuotas"]=$_POST["cuota"];
  
$items["comentario"]=$_POST["coment"];
  
$itemsEnCesta= array($items);  }
  else { 
//recorremos su contenido, con el foreach, y si encontramos un artículo igual, añadimos la cantidad...
  
foreach($itemsEnCesta as $ind => $item_v)  {
      if (
$item_v["producto"]==$_POST["producto"])  {
      
$itemsEnCesta[$ind]["cantidad"]+=$_POST["cantidad"];
      
$encontrado=1;  }
// Si no lo encontramos, es un nuevo artículo, por lo tanto, añadimos el nuevo producto con la correspondiente cantidad a compra
  
if (!$encontrado)  {
     
$items["producto"]=$_POST["producto"];
     
$items["cantidad"]=$_POST["cantidad"];
     
$items["cuotas"]=$_POST["cuota"];
     
$items["comentario"]=$_POST["coment"];
     
$itemsEnCesta[]=$items;  }
  } 
// cierra el else
}
?>
<html><body>
<form action="<?=$PHP_SELF."?".$SID?>" method="post">
  Ingresa el producto <input type="text" name="producto" size="20"><br>
  Ingresa la cantidad <input type="text" name="cantidad" size="5"><br>
  Ingresa el Nº de cuotas <input type="text" name="cuota" size="5"><br>
  Ingresa comentario <input type="text" name="coment" size="25"><br>
  <input type="submit" value="Añadir a la cesta"><br>
</form>
<?
if (isset($itemsEnCesta))  {
 echo
'El contenido de la cesta de la compra es:<br>';
 foreach(
$itemsEnCesta as $k => $items)  {
    foreach(
$items as $tipo => $value) {
      echo 
$tipo.': '.$value.' ';  }
      echo 
"<br>";
    }
}
?>
</body></html>
hasta aki todo bien, en mis aplicaciones abro una sesion de la siguiente forma:

sesion.php
Código PHP:
<?
include ("conexx.php"); // se conecta a la BD, $var_usu y $var_con los traigo de otro form
$ssql "SELECT * FROM usuarios WHERE login='$var_usu' and password='$var_con'";
$rs mysql_query($ssql,$conex);
if (
mysql_num_rows($rs)!=0)  { //si la ejecución del SQL es != 0, existe el user y pass
  
session_start(); //defino una sesion y guardo datos
  
$_SESSION['compra']="si";
  
header ("Location: carrito.php? cod=$cod&calculo=$calculo&resultado=$resultado"); //envia 3 variables a carrito.php
}
else {
 
header("Location: registrarse.php?errorusuario=si"); //si no existe... 
}
?>
de sesion.php traigo las 3 variables deberia añadir a mi carrito, este es el codigo:

carrito.php
Código PHP:
<?
   
include ("conexx.php"); // se conecta a la BD
   
session_start(); 
   
$compra=$_SESSION['compra']; // asignamos a $variable la variable de la session áctiva.
?>

<html>
<head>  <title></title>
</head>
<body>
<?php
// la sesion ya esta abierta y compra="si"
if (($compra)=="si"){

//****** de aki para abajo aplico carrito webestilo(o al menos lo intento) *******

if ($_POST["$cod"])
//comprobamos si existe algún articulo 
    
if (!isset($compra))    {
        
$items["producto"]=$_POST["$cod"];
    
$items["cuotas"]=$_POST["$calculo"];
    
$items["resultado"]=$_POST["$resultado"];
    
$compra= array($items);  }
    else  { 
//recorremos su contenido, con el foreach, y si encontramos un artículo igual, añadimos las cuotas...
     
foreach($compra as $ind => $item_v)  {
    if (
$item_v["producto"]==$_POST["$cod"])  {
             
$compra[$ind]["cuotas"]+=$_POST["$calculo"];
        
$encontrado=1;  }
    } 
// Si no lo encontramos, es un nuevo artículo, por lo tanto, añadimos el nuevo producto con la correspondiente cuota a compra
    
if (!$encontrado)  {
                   
$items["producto"]=$_POST["$cod"];
          
$items["cuotas"]=$_POST["$calculo"];
       
$items["resultado"]=$_POST["$resultado"];
       
$compra= array($items);  }
    } 
// cierra el else
}
 
// ***** aki deberia mostrar la compra*********
if (isset($compra))  {
   echo
'El contenido de la cesta de la compra es:<br>';
   foreach(
$compra as $k => $items)    {
       foreach(
$items as $tipo => $value)    {
             echo 
$tipo.': '.$value.' ';  }
             echo 
"<br>";
    }
}
?>
</body>
</html>
pero me da el siguiente mensaje:
Warning: Invalid argument supplied for foreach() in c:\apache\htdocs\pruebas_php\open_sess.php on line xx

en donde la linea xx es: foreach($compra as $k => $items) {
Pueden ayudarme porfavor, gracias (al menos por leerme)

Necesito ayudaaaaaaaaaaa pleaseeeeeeee.-

Bye bye.-
__________________
Cuando creo aprender algo, mas me doy cuenta que nada se...

Última edición por pabloman; 17/05/2003 a las 13:58
  #2 (permalink)  
Antiguo 17/05/2003, 18:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La variable de sesion:
$_SESSION['compra']="si";

que en tu carrito.php haces:
$compra=$_SESSION['compra'];

Para luego:
foreach($compra as $k => $items) {

En un if .. haces:
$compra= array($items); }

Cuando deberiás hacer simplemente:
$compra=$items o .. simplemente usar $items en tus foreach() que leen el array que contiene tu carrito de compra (tu sesion ItemsEnCesta que registras en el primer script ..)

Como veras $compra en ese punto tiene la cadena "si" .. nada de un array .. Revisalo .. ahí tienes un gran lio. Usa variables diferentes para cada cosa ... no mezcles funcionalidades para una misma variable .. así vienen los lios.

Ademas de todo eso .. estas mezclando várias formas de registrar variables en una sesión .. por un lado usas $_SESSION y por otro lado session_register() .. Te recomiendo que te decidas por un método y que uses ese único método .. El ideal es $_SESSION por seguridad.

Si usas $_SESSION .. los arrays se han de serializar (serialize() ) y des-serializar (unserialize() ) para guardar/leer un array en una sesión.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 01:31.