Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Carrito de Compra no almacena valores

Estas en el tema de Carrito de Compra no almacena valores en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola buenas estoy haciendo una página web sobre libros y tengo un problema con mi carrito de la compra les pongo mi codigo y les ...
  #1 (permalink)  
Antiguo 08/02/2008, 08:29
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Carrito de Compra no almacena valores

hola buenas
estoy haciendo una página web sobre libros y tengo un problema con mi carrito de la compra

les pongo mi codigo y les explico cual es my problema:
tengo un fichero lib_carro donde me declaro un objeto carrito
class carrito {
//atributos de la clase
var $num_productos;
var $array_isbn;
var $array_nombre_prod;
//var $array_precio_prod;
var $array_imagen_prod;

// constructor de la clase carrito
function carrito () {
$this->num_productos=0;
}

// introduce los valores en la variable session carrito
function introduce_producto($isbn,$non,$ima){
$this->array_isbn[$this->num_productos]=$isbn;
$this->array_nombre_prod[$this->num_productos]=$non;
$this->array_imagen_prod[$this->num_productos]=$ima;
$this->num_productos++;
echo $this->num_productos;
}
}
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
$carritos=new carrito;
}
$carritos=new carrito;

luego tengo un archivo donde si toco el carrito de la compra me remite a otra página para introducir los datos en la variable session, hasta aqui todo bien

este es el código que hace esto
<form action=index.php?modulo=catalogo&aux=1 method=POST>
<td><input type=image src=modulos/catalogo/imagen/car.png></td>
<input type=hidden name=nombre value=\"$nombre\">
<input type=hidden name=isbn value=\"$isbn\">
<input type=hidden name=precio value=$precio>
<input type=hidden name=imagen value=$imagen>
</form>


finalmente quiero ver lo he introducido y hago lo siguiente

include("lib_carro.php");
if($aux==1){
$aux=0;
$isbn=$_POST['isbn'];
$non=$_POST['nombre'];
$ima=$_POST['imagen'];

$carritos->introduce_producto($isbn,$non,$ima);
$_SESSION['ocarrito']=$carritos;
$carritos->imprime_carrito();


Mi proble es que creo que siempre me esta creando una variable sesión nueva porque el contador nunca que lo incrementa, no me acumuka nada!!!!!!!!

espero que puedan ayudarme y siento que sea tan largo

Última edición por maitep; 08/02/2008 a las 08:47
  #2 (permalink)  
Antiguo 08/02/2008, 09:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: ayuda please

Sin ver todo el flujo de tu programa parece que en cada pagina creas un objeto carrito, almacenas los datos y luego lo almacenas en la sesion.

Esto es un error, ya que siempre se quedara en 0s, necesitas primeramente recuperar el objeto de la sesion y luego introducirlo o de plano usar la variable de sesion.

Algo asi:
Código PHP:
$carrito $_SESSION['ocarrito'];
$carrito->introduce_producto($isbn,$non,$ima);
// o
$_SESSION['ocarrito']->introduce_producto($isbn,$non,$ima); 
Saludos.

PD. Por favor usa títulos mas descriptivos en tus mensajes.
  #3 (permalink)  
Antiguo 08/02/2008, 09:21
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Re: Carrito de Compra no almacena valores

gracias por tu respues GatorV, ya lo probe pero nada
yo no se si estoy entendiendo bien esto o no?

mi index de la web comienza asi

require("alta.php") ;
echo $session;
$aux=$_GET['aux'];
include("lib_carro.php");

en el alta .php tengo la conexin con la base de datos y el session_start(), asi que como siempre vuelvo a index tendre la la session estar activada y las variables session iran pasando sin problema, luego incluyo el lib_carro.php
el final de este fichero es lo siguiente

session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
$carrito=new carrito;
}
$carrito=new carrito;

si no tengo creado el ocarrito me lo crea y tedria el $carrito del tipo carrito
si el ocarrito ya esta creado no crea nada nuevo y usa el que tiene

segun esto al cerrar el if $carrito=new carrito; no tendria que estar, pero si lo quito me da este error

Fatal error: Call to a member function introduce_producto() on a non-object in C:\wamp\www\libro1\index.php on line 12

por eso lo dejo y por eso creo que cada vez que entro aqui me habre un carrito nuevo.

es cierto lo que pienso o lo estoy viendo mal?????

tienes alguna idea de que esta fallando.
  #4 (permalink)  
Antiguo 08/02/2008, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Carrito de Compra no almacena valores

Con isset checas si una variable existe, si tu usas !isset le estas diciendo al if, si una variable no existe, por lo que si ya existe en la sesión entonces creas una variable, para que tu if funcione correctamente debería de estar así:
Código PHP:
if (!isset($_SESSION["ocarrito"])){
       
$_SESSION["ocarrito"] = new carrito();
}

$carrito $_SESSION["ocarrito"]; 
Saludos.
  #5 (permalink)  
Antiguo 11/02/2008, 04:35
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Re: Carrito de Compra no almacena valores

hola Gator V perdona que no te contestara antes pero es que tuve que hacer otras cosas en fin de semana.
probé tu solución y nada, me da el siguiente fallo.

Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;carrito&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\wamp\www\libro1\index.php on line 12

no encuentra el objeto carrito a menos que lo ponga en el index y siempre me crea una nuevo
esto esfrustante
  #6 (permalink)  
Antiguo 11/02/2008, 08:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Carrito de Compra no almacena valores

El problema es que debes de incluir lib_carrito antes de usar session_start para que pueda ser des-serializado y creado para que lo puedas usar. Te recomiendo mover tu include( "lib_carro.php" ) a un lugar donde este ANTES de usar session_start();.

Saludos.
  #7 (permalink)  
Antiguo 11/02/2008, 11:47
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Re: Carrito de Compra no almacena valores

eres un crack, eres el mejor!!!!!!!!!!!!!!!!! funciono!!!!!!!
ya casi no podia ni dormir comiendome la cabeza con esto

muchas muchas gracias
  #8 (permalink)  
Antiguo 12/02/2008, 04:24
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Re: Carrito de Compra no almacena valores

Hola gatorV como session pero me he dado cuenta de que cuando habro dos sesiones distintas de distintos usuarios si deslogeo uno me deslogea los dos y cuando compro cosas con uno la compra tambien me la mete en el otro.

No deberia ser una session ocarrito por usuario y si me logeo dos veces con distintos usuarios no deberia crearme dos sesiones distintas.

mi fichero de alta es este

<?php
session_start();
include "conexion.php";//conexión con la base de datos
if($_POST['logout']){//comprobamos si se ha realizado un logout
session_destroy();//Cierra la sesión y destruye los datos de una sesión
session_start();//Iniciar sesión sin un nombre concreto
header("Location: index.php");//recargamos la pagina
}else{
if(isset($_POST['login'])){//comprobamos si se ha realizado un login
$usuario=$_POST['usuario'];//la funcion isset significa, si tiene valor
$password=($_POST['pass']);// el password

//comprobamos que el usuario y el password sean correctos.
//Tambien comprobamos el nivel que por defecto es 1
$sql = "SELECT * FROM users WHERE ((usuario='".$usuario."') && (pass1='".$password."'));";
$result = mysql_query($sql)
or die('Could not look up user data; ' . mysql_error()); //muestra mensaje de error y deja de ejecutar la página
$row = mysql_fetch_array($result); //Extrae la fila de resultado como una matriz asociativa
if (mysql_num_rows($result)!= 0){//comprobamos que la respuesta no sea nula
$_SESSION['usuario']=$usuario;
$_SESSION['password']=$password;
$_SESSION['level']=$row['level'];
}else{//no esta en la base de datos(usuario anonimo)
$_SESSION['usuario']="anonimo";
$_SESSION['level']=0;
if($_POST['login'])//y si se ha realizado login, indicamos que existe un error modificando la cabecera del web
header("Location: index.php?fallo=true");//los valores a partir del signo ? son valores de formulario
} //que se pueden leer como $_GET['fallo']
}}
?>

aqui tiene un session start al principio y cuando vuelve al index tiene otro, por eso continua con la session anterior, puede ser este el fallo???
  #9 (permalink)  
Antiguo 12/02/2008, 07:23
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Carrito de Compra no almacena valores

que tiene este post de OOP?, apenas el carrito...
  #10 (permalink)  
Antiguo 12/02/2008, 09:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Carrito de Compra no almacena valores

Las sesiones son iguales por dominio y explorador, si tu usas el mismo explorador para ver las dos sesiones veras los datos reflejados en ambos.

Saludos.
  #11 (permalink)  
Antiguo 12/02/2008, 11:29
 
Fecha de Ingreso: septiembre-2006
Mensajes: 116
Antigüedad: 17 años, 8 meses
Puntos: 1
Re: Carrito de Compra no almacena valores

ok entiendo lo que dices pero no deberia crearme sesiones distintas si son usuarios distintos???????
Porque sino como distingo uno de otro.
  #12 (permalink)  
Antiguo 12/02/2008, 12:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Carrito de Compra no almacena valores

Como te digo, son sesiones por instancia de explorador, ya que ese es el comportamiento natural de las sesiones.

Si tu quieres realmente tener usuarios y sesiones así de independientes vas a tener que usar otro sistema en lugar de las sesiones como una base de datos y tu implementar tu propio código de rastreo.

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 02:45.