Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 03-jun-2005, 03:01   #1 (permalink)
Legolas_Bilbao está en el buen camino
 
Fecha de Ingreso: mayo-2005
Mensajes: 330
Problemilla con sesion

tengo guardada una sesion , y cuadno accedo a un php y kiero ver los valores de la session los veo perfectos :D xo en esa misma venta tengo un form q cuando le doy al boton me va al mismo php xa actualizar ls datos y los datos que quiero actualizar ls algunos que estan dentro de la sesion ademas de introducirlos luego en la base de datos xo todos los valores de la sesion me son nulos :S no me sale ningun valor

bueno lo he arreglado pero no entiendo pq hay veces q puedo hacer

<p><? $_SESSION['a']->getNombre() ?></p> y otras no y tengo q hacerlo con echo

pq puede ser

saludos
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
Legolas_Bilbao está desconectado   Responder Citando
Antiguo 03-jun-2005, 03:53   #2 (permalink)
Legolas_Bilbao está en el buen camino
 
Fecha de Ingreso: mayo-2005
Mensajes: 330
Otra cosa mas cuadno en una sesion guardo un objeto y luego actualizar un atributo de ese objeto como lo hago lo intento con metodos get y set y no lo hace :(
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
Legolas_Bilbao está desconectado   Responder Citando
Antiguo 03-jun-2005, 08:32   #3 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.436
Si no indicas el código de tu objeto .. es complicado ver como funciona para ver si lo estás usando bien o no ...

Se supone que tu usaras tu sesion (variable) como "transporte" .. nada más ..

Así que (por mi parte yo hago):

Código PHP:
<?
// llamo a la classe que contiene el objeto ..
include ("mi_objeto.php");
// inicio uso sesiones
session_start();
// comprobación "continuar con el objeto de la sesión .. o instanciarlo nuevamente".
if (isset($_SESSION['a']){
   
// si está definida mi variable de sesión .. el objeto trae ya sus variables .. 
   
$mi_objeto=$_SESSION['a'];
} else {
   
// si no está creada la variable de sesión .. instancio el objeto ...
   
$mi_objeto=new mi_objeto();
}

// Luego uso los metodos de este .. por ejemplo:
echo $mi_objeto->getName();

$mi_objeto->setName(); 
// realmente no sé lo que hace tu método .... pero por si acaso ..
// una vez trabajado el objeto .. al final .. lo llevo a la variable de sesión:
// lo puedes hacer así .. o te creas algún método para gestionarlo integrado en tu classe.
$_SESSION['a']=$mi_objeto;
?>

Pero, .. en resumen .. sólo te puedo indicar que las sesiones (los valores que des a las variables que crees) sólo quedan disponibles en la próxima iteracción con el servidor .. es decir .. si tu defines en un mismo flujo de un script un dato para tu variable de sesión "a" .. dicho dato no estará completamente disponible hasta que recargues la página o lo leas en otra (la sesión).

Un saludo,
Cluster está desconectado   Responder Citando
Antiguo 03-jun-2005, 08:57   #4 (permalink)
Legolas_Bilbao está en el buen camino
 
Fecha de Ingreso: mayo-2005
Mensajes: 330
los metodos set y gtet q te he comentado tienen la misma funcion q ls set y get de java voy a probar con eso q no se me habia ocurrido un saludo
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
Legolas_Bilbao está desconectado   Responder Citando
Antiguo 03-jun-2005, 09:02   #5 (permalink)
Legolas_Bilbao está en el buen camino
 
Fecha de Ingreso: mayo-2005
Mensajes: 330
Código PHP:
$medico->setDirec($_POST['dir']);
    echo
"<br>Actualizacion Realizada<br>";
    echo
"<a href=\"MenuMedico.php\">Volver a Menu</a><br>";
    
$gbm->cerrarConexion();
    echo 
$medico->getDir();
    
$_SESSION['medico']=$medico;
    }else if(
$_POST['mod']!=null){ 
pero sigue sin actualizarme :S

el metodo setDir es este
Código PHP:
function setDirec($dni)
            {
            
$this->direct$dni;
            } 
y el resutlado es este

zugazarte 56 BV 1B
Actualizacion Realizada
Volver a Menu
zugazarte 56
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
Legolas_Bilbao está desconectado   Responder Citando
Antiguo 03-jun-2005, 10:59   #6 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.436
Ya te decía que no puedes ver el valor de una variable de sesión en el mismo flujo del script .. debes recargar tu página o redireccionar para que la sesión quede con sus nuevos valores (tus variables) ..

Un saludo,
Cluster está desconectado   Responder Citando
Antiguo 03-jun-2005, 12:37   #7 (permalink)
Legolas_Bilbao está en el buen camino
 
Fecha de Ingreso: mayo-2005
Mensajes: 330
vamos q tras hacer eso tengo q hacer un refresco ???

un saludo
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
Legolas_Bilbao está desconectado   Responder Citando
Antiguo 03-jun-2005, 12:53   #8 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.748
Cita:
Iniciado por Legolas_Bilbao
bueno lo he arreglado pero no entiendo pq hay veces q puedo hacer
<p><? $_SESSION['a']->getNombre() ?></p> y otras no y tengo q hacerlo con echo
pq puede ser
Siempre tienes que utilizar "echo" (o similar). De otra manera no imprimirá nada. La única manera de que eso imprima algo es si el método getNombre() contiene un "echo". También existe la forma abreviada <?=$variable ?> (nota el signo "=") que es como hacer un "echo".
-----------------------------------------

Sobre el otro tema:
No entiendo del todo qué es lo que debería imprimir. sería bueno que pongas un poco más de código y algo como: "debería imprimir ESTO, pero imprime ESTO OTRO".

Aunque, como dice Cluster, las variables no se registran verdaderamente en la sesión hasta que finaliza el script (por eso lo de la redirección o recarga). Pero eso casi nunca tiene una influencia directa durante el flujo de un script si utilizas el superglobal $_SESSION. Supongo que pasará si utilizas funciones como session_register() y luego tratas de verificar con session_is_registered()... pero esas funciones van cayendo en el desuso. Y no es tu caso.

Tal vez lo que esté pasando es que no asignas $medico y $_SESSION['medico'] por referencia y estás trabajando con dos objetos distintos. Entonces actualizas uno, pero no tiene por qué verse reflejado en el otro.
Para pasar por referencia utiliza el operador "&":
Código PHP:
$_SESSION['medico'] =& $medico
Pero si no es esto, entonces por favor trata de explicar mejor el problema.
Saludos

Última edición por jpinedo; 03-jun-2005 a las 13:55.
jpinedo está desconectado   Responder Citando
Antiguo 03-jun-2005, 15:00   #9 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.436
Cita:
Iniciado por Legolas_Bilbao
vamos q tras hacer eso tengo q hacer un refresco ???

un saludo
No es necesario un refresco a la misma página .. pero ahí mismo no vas a obtener su valor real modificado (el de tu objeto que llevas en tu sesión) ... pero si que podrías ver sus nuevos valores donde linkeas:

echo"<a href=\"MenuMedico.php\">Volver a Menu</a><br>";

es decir .. en "MenuMedico.php" puedes ver el valor de tu variable de sesión con el método que corresponda para extraer ese dato e instanaciando el objeto como te he comentado en el código anterior sobre ver si existe tu variable de sesión .. se continua su usu y si no está se instancia nuevamente (en tal caso . .comprueba que realmente quedó registrada tu varaible de sesión .. sino, el problema lo tienes con las sesiones y su propagación del SID más que con tu própio objeto ...)

Un saludo,
Cluster está desconectado   Responder Citando
Antiguo 03-jun-2005, 17:37   #10 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.748
Cluster... no estoy de acuerdo con lo que propones. O, en todo caso, no te he entendido.
Me gustaría que pongas un ejemplo donde no se pueda leer el valor de una variable de sesión que se ha definido en el misma ejecución del script (para ilustrar mejor lo que dices). Es que no se me ocurre ninguno.
O sea, para mí el hecho de que la variable no se registre en la sesión hasta que finaliza el script no es un impedimento para acceder a a su valor. Te pongo un ejemplo.
Código PHP:
<?php
class Medico{
    var 
$nombre "Nombre por defecto";
    function 
setNombre($nombre){
        
$this->nombre $nombre;
    }
    function 
getNombre(){
        return 
$this->nombre;
    }
}

session_start();
if(!isset(
$_SESSION['medico']))
    
$_SESSION['medico'] = & new Medico();

if(isset(
$_GET['nombre']))
    
$_SESSION['medico']->setNombre($_GET['nombre']);// Variable actualizada en esta ejecución

echo "Valor de \$_SESSION['nombre'] guardado :: ".$_SESSION['medico']->getNombre();// imprime el valor actualizado en esta ejecución
echo "<hr />";
echo 
"Cambiar el nombre a:<br />";
echo 
"<a href=\"?nombre=Pepe\">Pepe</a><br />";
echo 
"<a href=\"?nombre=Juan\">Juan</a><br />";
?>
Saludos
jpinedo está desconectado   Responder Citando
Antiguo 06-jun-2005, 06:45   #11 (permalink)
Moderador
Cluster llegará a ser famoso muy prontoCluster llegará a ser famoso muy pronto
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago - Chile
Mensajes: 34.436
Pues .. no, no es un impedimento .. pero ese no es el valor real de la variable de sesión (el valor que tiene actualmente), sino el que le vas a dar y que no quedará registrado hasta que termine la ejecución de tu script y PHP la almacene en el servidor .. Si ese es la teoría de como funciona PHP .. por claridad del código nunca accedo a esa variable en esa situación:

Si tenemos:

Código PHP:
<?
session_start
();
// damos un valor a una variable de sesión
$_SESSION['variable_sesion']=$_GET['variable'];

// no hago:
echo $_SESSION['variable_variable'];

// sino:
echo $_GET['variable'];
// que es la variable que realmente está trabajando este script en este momento.

// o a lo sumo hago la propuesta anterior: (al principio del script)
if (isset($_SESSION['variable_sesion']){
   
$objeto=$_SESSION['variable_sesion'];
} else {
   
$objeto=new objeto();
}

//uso objeto:
$objeto->metodo();
// altero objeto (variables):
$objeto->altera_valores($_GET['variable']);
// vuelco objeto a sesión nuevamente al terminar el uso del objeto .. sea así o con un método de la própia classe.
// antigüamente con hacer session_register($objeto) al principio del código podíamos trabajar para leer/dar valor a dicha variable de sesión en cualquier punto del código .. ahora:
$_SESSION['variable_sesion']=$objeto;
// si no usamos médodos que alteren las variables del mismo .. podríamos omitir este punto. También depende como se trabaje el objeto .. si el mismo registra ya sus variable en la sesión o no ...
?>
Lo que propongo sobre "recargar" la página o bien leer dicha variable de sesión en la próxima petición al servidor simplemente es para obtener el valor real de la sesión en curso, de esta forma también se vé si se llegó a crear en caso de algún fallo tipo: falla de propagación del SID, de creación de la sesión en sí .. etc.

Un saludo,
Cluster está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 21:55.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93