Foros del Web » Programando para Internet » PHP »

problemas con clases en sesiones

Estas en el tema de problemas con clases en sesiones en el foro de PHP en Foros del Web. Tengo problema para realizar un carrito de compro, la clase es la siguiente: <?php class articulo{ var $nombre, $cantidad, $precio; function articulo($nombre, $cantidad, $precio) { ...
  #1 (permalink)  
Antiguo 04/05/2004, 02:36
 
Fecha de Ingreso: abril-2004
Ubicación: los palacios (Sevilla)
Mensajes: 42
Antigüedad: 20 años
Puntos: 0
problemas con clases en sesiones

Tengo problema para realizar un carrito de compro, la clase es la siguiente:

<?php
class articulo{
var $nombre, $cantidad, $precio;
function articulo($nombre, $cantidad, $precio)
{
$this->nombre = $nombre;
$this->cantidad = $cantidad;
$this->precio = $precio;
}
};
?>

---------------------------------------------------------------------------------

El codigo de la pagina es el siguiente:

<?php
session_start();
include('clase.php');

if(isset($_SESSION['productos'])){
$producto = $_SESSION['productos'];
}

$nombre=$_GET['idproducto'];
$cantidad=$_GET["cantidad"];
$usuario=session_id();

$producto[] = new articulo($nombre,$cantidad,55);
foreach($producto as $puntero)
{
echo "<br><b>Producto:</b> ".$puntero->nombre;

//aki si pongo $puntero, no me da error, me dice que
//que es un objeto


}
$_SESSION['productos'] = $producto;
?>



El error que me da es el siguiente:

Notice: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition articulo of the object you are trying to operate on was loaded _before_ the session was started in c:\archivos de programa\apache group\apache\htdocs\carrito\comprado2.php on line 16




---------------------------------------------------------------------------------

Creo que el error me da por la clase, si lo utilizo sin la clase, solamente con una variable simple me funciona correctamente.



Muchas Gracias.

__________________
ponce

Última edición por ponce; 04/05/2004 a las 02:49
  #2 (permalink)  
Antiguo 04/05/2004, 02:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Yo no haria uso de referencias (que no son punteros). No las suelo usar, pero:
Código PHP:
 $producto = &$_SESSION['productos'];
....
 
$_SESSION['productos'] = &$producto
me parece que es equivalente a pisar el array $_SESSION['productos'] con la referencia a la variable $producto.

En teoria (ya te digo que no uso mucho las referencias), la asignacion final:
Código PHP:
 $_SESSION['productos'] = &$producto
no es necesaria. Podrias comprobarlo sustituyendolo por:
Código PHP:
 foreach($_SESSION['productos'] as $puntero)
{
echo 
"<br><b>Producto:</b> ".$puntero->nombre;

//aki si pongo $puntero, no me da error, me dice que
//que es un objeto


para ver si añade el nuevo articulo a $_SESSION. O al menos es lo que pasaria con los punteros de C.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 04/05/2004, 02:57
 
Fecha de Ingreso: abril-2004
Ubicación: los palacios (Sevilla)
Mensajes: 42
Antigüedad: 20 años
Puntos: 0
Ya perdona pero las referencias las puese al ultima hora, pero mi intencion no era poner las referencias. No va de todas maneras.

A que puede ser debido el error??????


Muchas Gracias
__________________
ponce
  #4 (permalink)  
Antiguo 04/05/2004, 03:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Ups, ahora me doy cuenta. No es:
Código PHP:
session_start();
include(
'clase.php'); 
es al reves:
Código PHP:
include('clase.php');
session_start(); 
Antes de todos los session_start() de todas tus paginas debes poner el include('clase.php'); para que este definida la clase a la hora de crearse las variables de sesion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 04/05/2004, 03:35
 
Fecha de Ingreso: abril-2004
Ubicación: los palacios (Sevilla)
Mensajes: 42
Antigüedad: 20 años
Puntos: 0
Al poner include ('clases.php') o require('clase.php'), antes de session_start(), me da un warning y dice que la cabecera ya se ha enviado.

Si defino la clase directamente antes del session_start() me funciona correctamente.

Como puedo arreglarlo para no tener que definir la clase en todas las paginas.



Muchas gracios
__________________
ponce
  #6 (permalink)  
Antiguo 04/05/2004, 05:02
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 22 años, 3 meses
Puntos: 1
La clase la tienes que incluir en todas las páginas, ya que de otro modo el interprete de php no sabra como tratar los objetos
  #7 (permalink)  
Antiguo 04/05/2004, 05:10
 
Fecha de Ingreso: abril-2004
Ubicación: los palacios (Sevilla)
Mensajes: 42
Antigüedad: 20 años
Puntos: 0
Ya.
Lo de incluirlo ya lo tengo claro.
El problema es que lo tengo que incluir directamente y no puedo utilizar include o require.
Al utilizar include o require, envia la cabecera antes de utilizar session_start() y me da error.
Como se puede arreglar esto?
__________________
ponce
  #8 (permalink)  
Antiguo 04/05/2004, 07:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, eso es que tu include esta generando salida al navegador. Y antes de un session_start(), header() o set_cookie() no se puede enviar salida. En el mismo mensaje de error te dice en que linea y en que fichero enviaste salida por primera vez. Simplemente tienes que eliminarla.

Si la linea es la ultima del fichero a incluir, posiblemente sea que despues del ?> de cierre haya espacios o lineas en blanco. Elimina todo caracter despues del ?>.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 05/05/2004, 01:22
 
Fecha de Ingreso: abril-2004
Ubicación: los palacios (Sevilla)
Mensajes: 42
Antigüedad: 20 años
Puntos: 0
Muchisimas gracias a todos, el problema estaba en los espacios en blanco.

Muchisimas gracias.


Un saludo a todos.


__________________
ponce
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 10:42.