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

tengo problemillas con objetos y sesiones, ayudemme pls

Estas en el tema de tengo problemillas con objetos y sesiones, ayudemme pls en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos: Tengo una clase q conecta con la BD, el objeto que instancio de la clase lo paso como variable de sesion pq ...
  #1 (permalink)  
Antiguo 23/02/2005, 13:57
 
Fecha de Ingreso: noviembre-2003
Mensajes: 96
Antigüedad: 20 años, 5 meses
Puntos: 0
tengo problemillas con objetos y sesiones, ayudemme pls

Hola a todos:

Tengo una clase q conecta con la BD, el objeto que instancio de la clase lo paso como variable de sesion pq voy a usarlo en la mayoria de las paginas, bueno la cosa es q en la primera pagina trabaja pero cuando lo llamo en otras paginas me sale este error:

Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>conexion</b> of the object you are trying to operate on was loaded _before_ the session was started

La definicion de la clase y donde instancio el objeto de la misma es la siguiente:

CONEXIONBD.PHP
<?
class conexion{
//el constructor inicializa las variables de conexion
//la funcion conectar() hace la coneccion con la BD
}
session_start();

if (!isset($_SESSION['oconexion'])){

$_SESSION['oconexion'] = new conexion() ;
$_SESSION['oconexion']->conectar();
}
?>

y por ultimo en la pagina donde si funciona lo uso de la siguiente manera:

<?
include('conexionBD.php');
$_SESSION['oconexion']->conectar();
$r=$_SESSION['oconexion']->ejecutar('SELECT * FROM Categoria');

?>

y cuando trato de usar lo mismo en otras paginas sale el error que les mencione anteriormente.

Espero sus respuestas
Gracias
  #2 (permalink)  
Antiguo 23/02/2005, 15:27
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 22 años, 7 meses
Puntos: 6
Cita:
Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>conexion</b> of the object you are trying to operate on was loaded _before_ the session was started
Te respondi en el subforo de php orientado a objetos. Pero te agrego el error que te devuelve php, lo que te esta diciendo es que te asegures de cargar la definicio de la clase que quieres que persista, antes de iniciar una sesion y esto es para todas y cada una de las paginas que vayan a usar esta clase.
Te reomiendo que le des una vuelat al manual donde esta documentado esto que te acaba de pasar. http://www.php.net/manual/es/languag...ialization.php
  #3 (permalink)  
Antiguo 23/02/2005, 15:40
 
Fecha de Ingreso: febrero-2004
Ubicación: Bogotá, Colombia
Mensajes: 191
Antigüedad: 20 años, 2 meses
Puntos: 1
Bueno, en cada pagina donde vaya a utilizar la conexion a la BD debe instanciar a la clase conexionDB, yo no lo haria con sesiones sino en cada haria esto:

require("conexionDB.php")
$conexion=new conexion();
$conexion -> ejecutar(......);............etc
y luego si utilizo los metodos de la clase
  #4 (permalink)  
Antiguo 23/02/2005, 19:47
 
Fecha de Ingreso: noviembre-2003
Mensajes: 96
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias por su respuesta, pero aun no puedo resolver el problema, he intentado muchas cosas pero nada.

Pasa q ademas del objeto de conexion tengo otro objeto que guarda el pedido q se realiza, este ultimo objeto es de la clase Carrito . . . lo q pasa es q cuando uso uno de estos en un pagina funciona pero cuando uso los dos ahi viene el error.

Las clases son asi:
<?
class Carrito(){

}
session_start();

if (!isset($_SESSION['ocarrito'])){
$_SESSION['ocarrito']=new carrito;
$_SESSION['ocarrito']->carrito();
}

?>

<?
class conexion(){

}
session_start();
if (!isset($_SESSION['oconexion'])){
$_SESSION['oconexion'] = new conexion() ;
$_SESSION['oconexion']->conectar();
}
?>

Los uso asi:
require('conexionBD.php');
$_SESSION['oconexion']->conectar();
require('carrito.php');
$_SESSION['ocarrito']->compras_hechas();
en esta ultima linea sale el error:
Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>carrito</b> of the object you are trying to operate on was loaded _before_ the session

Porfis ayudemme
no se donde estoy haciendo mal o quiza asi no se usan las sesiones
Gracias
  #5 (permalink)  
Antiguo 24/02/2005, 20:58
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
(...)Please ensure that the class definition <b>carrito</b> of the object you are trying to operate on was loaded _before_ the session
El mensaje te lo está diciendo:
Tienes que cargar la definición de las clases ANTES de hacer el session_start().
Eso también está en el enlace al manual que te puso Herminio (y que también te había puesto yo en el otro hilo).

Saludos
  #6 (permalink)  
Antiguo 02/05/2005, 01:09
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
Hola,
tengo el mismo problemilla que Jeka con el carrito, y no lo soluciono declarando la classe antes del session_start(). Me da el siguiente error cuando intento acceder a la funcion get_class($_SESSION["CARRITO"])
__PHP_Incomplete_Class

o sea, cuando creo la session, funciona el get_class, pero en la siguiente pagina (que ya esta creada la session, y ya tengo creada la variable del carrito) me da este error. La classe de momento esta declarada así:
class carro {
carro_items;
}
y nada mas!

PD. las classes deben estar en un fichero .inc? o en un .php (es indiferente no?)
PD2. el php (4.3.11) corre en un w2000 con iis5...
  #7 (permalink)  
Antiguo 02/05/2005, 08:54
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 22 años, 7 meses
Puntos: 6
La definicion de tu clase la puedes guardar en un archivo .php, y este archivo debe de incluirse antes de que hagas un session_start(). Este archivo debe de ser agregado en todas las paginas que van a usar la clase y esto debe de hacerse en cada una de ellas antes del session_start() ando corto de tiempo en este momento asi que no puedo agregarte un ejemplo. pero espero haber sido claro.
  #8 (permalink)  
Antiguo 02/05/2005, 10:49
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Un archivo: carrito.php.
Que contenga SOLO la definición de la clase Carrito:
Código PHP:
<?php
class Carrito{
   
// todo el código de la clase Carrito.
}
?>
Luego en donde la quieras utilizar tendrás que hacerlo en este orden
Código PHP:
<?php
require_once(carrito.php); // incluyes la definición de la clase
session_start(); // recién inicias sesión.

// Ya puedes acceder a los objetos guardados en la variable de sesión.
?>
Sobre lo de los archivos .inc, claro que se pueden utilizar también, pero no es recomendable pues puede quedar tu código al descubierto, mientras que con archivos .php no pasará.

Saludos
  #9 (permalink)  
Antiguo 03/05/2005, 01:02
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
Hola compañeros,

siguiendo vuestras indicaciones, el __PHP_Incomplete_Class persiste. Puede ser por problemas de configuración en el php.ini?
Aqui os pongo el codigo...
el index.php:
require_once("classes/carro.php");
session_start();
if (!isset($_SESSION["ID"])) {
$_SESSION["ID"]=session_id();
$_SESSION["CARRO"]=new carro();
}

echo "classe: ".get_class($_SESSION["CARRO"]);

y el archivo "classes/carro.php" (de momento solo tiene esto):
class carro {
var $carro_items;
}

veis algun error????
  #10 (permalink)  
Antiguo 03/05/2005, 07:17
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Pues tu código debería funcionar sin problemas (yo acabo de hacer un copy>paste y funcionó correctamente).
Asegúrate de que no estás leyendo del caché de tu navegador.

También es posible que tengas problemas por tener la directiva session.auto_start activada (no estoy seguro) en el php.ini.

Saludos
  #11 (permalink)  
Antiguo 05/05/2005, 01:05
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
Hola de nuevo,

pues no se que puede pasar... Aqui pongo mi configuracion del php.ini de las sessions... Es posible que no se puedan declarar clases con el auto_start=1?

--------------------------------------------------------------------------
[Session]
session.save_handler = files

session.save_path =c:\PHP\sessions\

session.use_cookies = 1

session.name = PHPSESSID

session.auto_start = 1

session.cookie_lifetime = 0

session.cookie_path = /

session.cookie_domain =

session.serialize_handler = php

session.gc_probability = 1
session.gc_divisor = 100

session.gc_maxlifetime = 1440


session.bug_compat_42 = 1
session.bug_compat_warn = 1

session.referer_check =

session.entropy_length = 0

session.entropy_file =

session.cache_limiter = nocache

session.cache_expire = 180

session.use_trans_sid = 0

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fields et="
---------------------------------------------------------------------------
  #12 (permalink)  
Antiguo 05/05/2005, 07:22
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Es justamente lo que te dije.
Si la directiva session.auto_start está activada, la sesión se iniciará automáticamente en cada script que llames.
Pero lo que quieres es que la sesión no se inicie automáticamente, sino que se inicie después de haber cargado la definición de tus clases serializadas... por eso el error.
Prueba a desactivar (poner a CERO) esa directiva y nos cuentas.

Saludos
  #13 (permalink)  
Antiguo 05/05/2005, 13:07
 
Fecha de Ingreso: mayo-2005
Mensajes: 2
Antigüedad: 19 años
Puntos: 0
Cuando ejecuto este codigo e mssqlserver


$con = mssql_connect("localhost","tsername","tu_passwo rd") or die (mssql_error());
mssql_select_db("tu_base",$con) or die (mysql_error());

$sql = "SELECT nombre FROM clientes WHERE sexo='m' ORDER BY edad";
$result = mssql_query($sql) or die (mssql_error());

while($row = mssql_fetch_array($result)){
echo $row['nombre']."<br />";
}
$con = mssql_connect("localhost","tsername","tu_passwo rd") or die (mssql_error());
mssql_select_db("tu_base",$con) or die (mssql_error());
$_pagi_sql = "SELECT * FROM clientes WHERE sexo='m' ORDER BY edad";
$_pagi_cuantos = 10;

include("paginator.inc.php");

while($row = mssql_fetch_array($_pagi_result)){
echo $row['nombre']."<br />";
}

echo"<p>".$_pagi_navegacion."</p>";


ME muestra el siguiente mensaje requiero de configurar algo

Warning: main(./class.paginado.php) [function.main]: failed to open stream:

Warning: main() [function.include]: Failed opening './class.paginado.php' for inclusion (include_path='.;C:\php5\pear')

  #14 (permalink)  
Antiguo 05/05/2005, 13:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
fenix1975:
Haz tu pregunta en un tema nuevo en el foro de PHP y NO en el de Oirentado a objetos.
Saludos
  #15 (permalink)  
Antiguo 06/05/2005, 00:47
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
EIIIIIII

que ya funciona!!!!!
Poniendo el auto_start a 0 ya va!!!!
Bueno, gracias, he aprendido mucho con este tema!!!!

hasta pronto!
  #16 (permalink)  
Antiguo 07/05/2005, 00:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Qué bueno.. en realidad este tema ha quedado bastante completo y didáctico... (si así fueran todos...)
Saludos
  #17 (permalink)  
Antiguo 27/05/2005, 02:31
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
eii hola!!

vuelvo a arrancar este tedioso tema.... (despues de unas vacaciones vuelvo a la carrga...)
Resulta que no estava del todo resuelto.... al poner el session.auto_start=0, cada vez que hago un session_start() empieza una nueva session (con un id distinto...) con lo cual no me conserva el estado del objeto carro....

Estoy a punto de implementar el carro mediante una tabla de la base de datos!!! que les parece???
  #18 (permalink)  
Antiguo 27/05/2005, 06:10
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 19 años
Puntos: 0
Creo que te equivocas... cada vez que pones session_start recupera la sessión de ese usuario. Si no se te propaga la id puede que tengas las cookies desactivadas y necesites propagarlas por url.

Mirate el tema porque la sesión se debe conservar excepto que tu la elimines con session_destroy();
  #19 (permalink)  
Antiguo 27/05/2005, 06:22
 
Fecha de Ingreso: agosto-2002
Ubicación: Encamp
Mensajes: 185
Antigüedad: 21 años, 8 meses
Puntos: 0
hola elmasvital!

a ver... yo en el php.ini tengo estas directivas:
session.save_handler = files
session.use_cookies = 1
; session.use_only_cookies = 1 (desactivado!!!!)
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = / (uso windows2000, tengo que cambiar el path???)
session.cookie_domain =
session.serialize_handler = php

como se propagan las cookies por url???

gracias!

PD. No he puesto ningun session_destroy()...
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:08.