PHP - Problemas con isset

 
Vista:
Imágen de perfil de Pablo

Problemas con isset

Publicado por Pablo (42 intervenciones) el 30/10/2013 18:27:17
Hola, he creado un objeto que se almacena en $_SESSION, anda perfectamente, excepto, que cuando creo el objeto automáticamente con isset no lo crea, pero si lo creo a mano en el código anda, para que entiendan mejor:

aqui inicializo la variable:

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

si lo hago así NO funciona, si hago esto:

1
2
3
4
5
6
7
8
$_SESSION["ocarrito"] = new carrito();
 
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
	$_SESSION["ocarrito"] = new carrito();
 
}

y luego borro el primer session fuera del if, me anda perfectamente, mientras mantenga esa session activa.
Yo supongo es porque en primera instancia no crea la variable.

el error que me tira es este: Fatal error: Call to a member function imprime_carrito() on a non-object in......
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problemas con isset

Publicado por Jesus Gabriel (12 intervenciones) el 30/10/2013 19:36:30
Hola Pablo lo que sucede es que la funcion session_start debe estar arriba de todo, sin espacios etc

para que te funcione lo que quieres hacer deberias ponerlo asi
session_start();

$_SESSION["ocarrito"] = new carrito();
//si no esta creado el objeto carrito en la sesion, lo creo if (!isset($_SESSION["ocarrito"])){ $_SESSION["ocarrito"] = new carrito(); }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo

Problemas con isset

Publicado por Pablo (42 intervenciones) el 30/10/2013 21:59:40
Jesus Gabriel gracias. Pero sigue sin funcionar, el problema de dejar el session fuera del isset, es q cada vez q entra a ejecutar el script ..me vuelve a crear ese objeto. si yo dejo q lo cree de esa forma, y dps lo borro, con el isset me anda perfectamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con isset

Publicado por Mari Carmen (145 intervenciones) el 30/10/2013 23:18:45
Puede que te suceda, como comenta en la documentación de PHP, que el objeto ha perdido su referencia de objeto carrito y ahora sea un "objeto_roto" y por eso no se evalua bien el código.

http://www.php.net/manual/es/language.oop5.serialization.php
Fíjate en la parte final donde comenta lo de las clases y objetos.(session_register() es como hacer un $_SESSION["loquesea"]="loquesea")

Para usar las variables de sesión debes abrir primero session_start().

Un saludo y crucemos los dedos para que sea lo que comento!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas con isset

Publicado por Elier (92 intervenciones) el 31/10/2013 14:32:46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$carrito = new Carrito();
session_start();
$_SESSION['carrito'] = serialize($carrito);
 
// Si exite accedemos a la session, deserializamos y accedemos al objeto
if(array_key_exists('carrito',$_SESSION) && !empty($_SESSION['carrito'])) {
    $carrito = unserialize($_SESSION['carrito'];
    echo $carrito->getCantidadProductos();
}
 
//Eliminar de la SESSION 
unset($_SESSION['carrito']);
 
// Si no existe lo creamos
if(!array_key_exists('carrito',$_SESSION) && empty($_SESSION['carrito'])) {
    $carrito = new Carrito();
    $_SESSION['carrito'] = serialize($carrito);
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo

Problemas con isset

Publicado por Pablo (42 intervenciones) el 31/10/2013 15:42:30
muchas gracias elier como siempre...es necesario esto?

1
echo $carrito->getCantidadProductos();

-porque yo al no tenerlo definido me produce un error. igual lo saque y no funciona..no se porque...se carga pero no almacena en las variables de la clase.
Ahi envio el archivo donde esto declarando, y que es donde tengo el conflicto...

Otro detalle, es que yo uso la variable session para almacenar los datos de logueo del usuario, asi que vacia no va estar nunca, o no deberia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas con isset

Publicado por Elier (92 intervenciones) el 01/11/2013 17:29:29
Pablo,

echo $carrito->getCantidadProductos(); es solo un ejemplo para que vieras que después de deserializar un objeto puedes acceder a sus métodos y propiedades, en tu caso los métodos que tu declaraste dentro de tu clase Carrito.

isset devuelve TRUE si la variable existe y su valor no es NULL, es decir que si en algún momento el valor de una variable de session se setea a NULL entonces isset devolverá FALSE.

Lo otro que tienes que tener en cuenta es que $_SESSION es un array, es decir, por ejemplo $_SESSION['carrito'] sería para ti una variable, y $_SESSION['usuario'] otra variable distinta.

Lo más importante es que en tus aplicaciones debes separar las responsabilidades, es decir cada parte del código debe ocuparse sólo de lo que le concierne. Por ejemplo la clase carrito no debería imprimir todo ese código html, esa es una responsabilidad que le concierne a la vista.

Te adjunto un ejemplo de como podrías implementarlo separando las responsabilidades
copia el código que te adjunto para tu servidor web y accede a carrito_controlador.php de la siguiente manera

http://localhost/carrito_controlador.php?action=insertar
http://localhost/carrito_controlador.php?action=mostrar

para poder insertar tienes que el crear el formulario en el archivo carrito_vista_insertar.php
en el action del form poner /carrito_controlador.php?action=insertar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar