Foros del Web » Programando para Internet » PHP »

Problemas con las variables de las sesiones

Estas en el tema de Problemas con las variables de las sesiones en el foro de PHP en Foros del Web. Hola a todos, os comento: tengo un formulario (creado dinámicamente), que dependiendo de la opción llama a una acción u otra. Para que conserve los ...
  #1 (permalink)  
Antiguo 17/04/2008, 05:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 119
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Problemas con las variables de las sesiones

Hola a todos,

os comento:

tengo un formulario (creado dinámicamente), que dependiendo de la opción llama a una acción u otra. Para que conserve los datos, utilizo sesiones. Hasta aquí todo bién.

Tengo objetos llamados "Tutoria" y vectores de objetos "TutoriasRes".

Cuando inserto una tutoria por primera vez hago esto:
Código PHP:
$tutoriasRes[0]=$tutoria;
                    
$tutoriasRes[1]=$tutoria;
                    
$_SESSION['tutorias2']=$tutoriasRes;
                    echo
"ENtro por primera vez 1: ".$_SESSION['tutorias2'][0]->getDia()."</br>";
                    echo
"ENtro por primera vez 2: ".$_SESSION['tutorias2'][1]->getDia()."</br>";
                    echo 
"nº de elementos de la sesión: ".count($_SESSION['tutorias2'])."</br>";
                    echo 
"nº de elementos del vector: ".count($tutoriasRes)."</br>"
donde $tutoriasRes, ya esta inicializado previamente y $_SESSION['tutorias2'] es la primera vez que se crea. Esto me funciona.

Pero cuando quiero añadir otra, hago esto:

Código PHP:
if (isset($_SESSION['tutorias2']))
                {echo 
"Entro en el segundo cambio</br>";
                    echo
"Nº de elementos de Tutorias2: ".count($_SESSION['tutorias2'])."</br>";
                    echo 
"Muestro lo que tiene: ".$_SESSION['tutorias2'][0]->getDia()."</br>";
                    echo 
"Meto lo de la sesión</br>";
                    
$tutoriasRes=$_SESSION['tutorias2'];
                    
                    echo
"Tengo un cambio, C1: ".$tutoriasRes[0]->getDia()."</br>";
                    
//Añadir el cambio
                    
$tutoriasRes[count($tutoriasRes)]=$tutoria;
                    
$_SESSION['tutorias2']=$tutoriasRes;
                    echo
"Tengo un cambio, C2: ".$tutoriasRes[1]->getDia()."</br>";
                    
                } 
A partir de esto:
Código PHP:
echo "Muestro lo que tiene: ".$_SESSION['tutorias2'][0]->getDia()."</br>"
me da error. Pero me muestra que efectivamente tiene 2 elementos(que he metido adrede, para ver si lo hacía).

Nota: Los comandos echo, estan puestos porque estoy haciendo la traza del error.

El Error es el siguiente:

Código PHP:
Fatal errormain() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete objectPlease ensure that the class definition &quot;Tutoria&quotof 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:xampphtdocsServicioTutoriasActualizarTutoriasinsertar2.php on line 107 
No sé si es que los vectores hay que pasarlos de alguna forma especial a las sesiones, o qué es lo que pasa.
  #2 (permalink)  
Antiguo 17/04/2008, 09:18
 
Fecha de Ingreso: marzo-2008
Mensajes: 119
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Problemas con las variables de las sesiones

Tras revisar mensajes parecidos en el foro he encontrado la solución. Parece ser que todo lo relacionado con objetos, incluidos los vectores de objetos hay que aplicar serialize() y unserialize().

Esta es la solución:

Código PHP:
//Si antes no había tutorias iniciales, se ha hecho un cambio y luego otro
                
if (isset($_SESSION['tutorias2']))
                {
                    
//unserialize() toma una variable sencilla seriada y la convierte de vuelta a su valor PHP
                    
$tutoriasRes=unserialize($_SESSION['tutorias2']);
                    
//Añadir el cambio
                    
$tutoriasRes[count($tutoriasRes)]=$tutoria;
                    
//"Serializar" el vector de objetos y luego pasarlo, serialize devuelve un String
                    
$tutorias2=serialize($tutoriasRes);
                    
$_SESSION['tutorias2']=$tutorias2;
                    
                }
                else
                {
                    
//Si antes no había tutorias iniciales, y se ha hecho el primer cambio
                    
$tutoriasRes[0]=$tutoria;
                    
//"Serializar" el vector de objetos y luego pasarlo, serialize devuelve un String
                    
$tutorias2=serialize($tutoriasRes);
                    
$_SESSION['tutorias2']=$tutorias2;
                } 
Pido disculpas, por no haber buscado mejor, pero es que hay dias y dias
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 07:32.