Foros del Web » Programando para Internet » PHP »

Problemas con variables de sesion

Estas en el tema de Problemas con variables de sesion en el foro de PHP en Foros del Web. Hola chicos/as!! Tengo un pequeño problema en la pagina web q estoy haciendo. Envio un array (codBorrar) a un script php mediante un formulario. Mi ...
  #1 (permalink)  
Antiguo 15/03/2005, 04:38
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Problemas con variables de sesion

Hola chicos/as!!
Tengo un pequeño problema en la pagina web q estoy haciendo.

Envio un array (codBorrar) a un script php mediante un formulario. Mi problema es que quiero volver a enviar este array desde ese script php (script1) a otro script (script2), para ello lo guardo en una variable de session, para posteriormente en el otro script recuperarla. El problema en si, es que cuando guardo la session, contiene datos, pero cuando voy a mostrarla en el segundo script esta vacío. Adjunto codigo por si hago algo mal:

* script1:

session_start();
$SESSION["cod"] = $codBorrar;
session_register("SESSION");


o tambien lo hago: $_SESSION["cod"] = $codBorrar;

* script2

session_start();
$lista = $SESSION["cod"]; o $lista = $_SESSION["cod"];

for($i=0;$i<count($lista);$i++){
echo $lista[$i];
}

Como digo anteriormente, en el script2 me sale vacío. Cuento los elemento que tiene el array y tambien me dice 0, es como sino guardara los datos.

Un saludo a todos, y muchas gracias antemano.

Última edición por g_aceituna; 15/03/2005 a las 05:07
  #2 (permalink)  
Antiguo 15/03/2005, 04:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 120
Antigüedad: 13 años
Puntos: 0
Hola.
¿podrias poner el codigo que usas para recibir y enviar el array?
Si no, es muy difícil saber donde puede estar el error.
  #3 (permalink)  
Antiguo 15/03/2005, 05:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Chicos/as ya teneis el código subido, muchas gracias!!!
  #4 (permalink)  
Antiguo 15/03/2005, 06:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 120
Antigüedad: 13 años
Puntos: 0
Si cuando salvas la variable tiene datos y luego no aparecen, se me ocurre que puede ser que se te este iniciando una sesion distinta. Prueba a mostrar el session_id en los dos scripts, y si son distintos, es que no se te esta pasando bien el valor de la session. Esto puede ser problema de la configuración de las cookies, y usando GET se evitaria. Si no es esto, no se me ocurre nada
  #5 (permalink)  
Antiguo 15/03/2005, 09:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Muchas gracias Flopy, mañana lo probare y ya dire si ese era el problema. Que vaya bien
  #6 (permalink)  
Antiguo 15/03/2005, 11:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No mezcles cosas ...

En script1:
QUITA el uso de session_register() si ya usas el método $_SESSION que por lo demás es lo que debes usar (si usas PHP 4.1.0 en adelante) por su seguridad y compatibilidad de tus aplicaciones.

Y define una variable de sesión:
$_SESSION["cod"] = $codBorrar;


En script2:
$lista = $_SESSION["cod"];

Y para verificar lo que pueda traerte $_SESSION .. tan sólo usa:

Código PHP:
echo "<pre>";
print_r($_SESSION);
echo 
"</pre>"
así veras exactamente que contiene esa variable (superglobal de sesión ...)

Si $codBorrar es un array .. lo puedes recorrer con:

Código PHP:
foreach ($_SESSION['cod'] as $codigo){
   echo 
$codigo."<br>";

No se trata de "probar" por probar .. si no conoces la documentación oficial de PHP al respecto aquí te la menciono: www.php.net/session

Por lo demás .. no vemos como pasas de script1 al script2 ..¿un link? .. un redireccionamiento? .. que?

Además .. "asumes" que vas a propagar el SID en cookies, esto requiere de un navegador que acepte dichas cookies y que PHP esté configurado para el uso de sesiones (www.php.net/session).

Un saludo,
  #7 (permalink)  
Antiguo 16/03/2005, 02:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Cluster gracias por tu aclaración, pero has pasado por alto que he puesto "o", es decir que he probado los dos métodos. Sobre las cookies, las tengo activadas, porque en la misma variable de session guardo datos como login..., y estos si que se me propagan a otros scripts.

Por lo de la documentación, antes de preguntar, suelo documentarme bastante bien, e intentarlo por mi parte.

Para la comunicación del script1 al script2, lo que hago es que en el script 1 tengo un formulario con 2 opciones, y en el script 2 trato esas 2 opciones, el problema que tengo, es que el script 1 ya recibe un array (codBorrar : contiene un array de codigos a borrar), y la única manera que he pensado de propagarlo, es meterlo en una variable de sessión, porque lo he probado en un campo oculto (hidden), y no me lo guarda bien.

Un saludo a todos, y muchas gracias por las molestias.
  #8 (permalink)  
Antiguo 16/03/2005, 02:27
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Acabo de probar el comentario de Flopi y resulta que los dos scripts tienen la misma id de sesión, por lo tanto pasa bien los valores de sesión.
  #9 (permalink)  
Antiguo 16/03/2005, 02:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Haz un print_r($codBorrar) en script1, no vaya a ser que el problema sea que script1 no recibe los valores del formulario por culpa del register_globals y no usar los arrays superglobales $_GET o $_POST. O directamente, usa $_GET o $_POST.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 16/03/2005, 03:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
*SCRIPT 1

session_start();

//asignación por el método nuevo del array codBorrar
$_SESSION["codigo"] = $codBorrar;

//en una cadena se introducen los valores del array separados por comas
//y se envia por el método viejo
$cadenaBorrar = "";
$long = count($codBorrar)-1;
for($i=0;$i<count($codBorrar);$i++){
$cadenaBorrar .= $codBorrar[$i];
if($i != $long){
$cadenaBorrar .= ",";
}
}
$SESSION["codigoNuevo"] = $cadenaBorrar;
session_register("SESSION");

//Mostramos lo que contiene $_SESSION
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

//Mostramos lo que contiene el array $codBorrar
echo "<pre>";
print_r($codBorrar);
echo "</pre>";

*SCRIPT 2

//Mostramos lo que contiene $_SESSION
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

*RESULTADO SCRIPT 1
//Resultado de lo que contiene $_SESSION
Array
(
[SESSION] => Array
(
[id] => 4
[login] => admin
[codigoNuevo] => 4,5,6,7
)

[codigo] => Array
(
[0] => 4
[1] => 5
[2] => 6
[3] => 7
)
)

//Resultado de lo que contiene $codBorrar
Array
(
[0] => 4
[1] => 5
[2] => 6
[3] => 7
)

*RESULTADO SCRIPT 2

//Resultado de lo que contiene $_SESSION
Array
(
[SESSION] => Array
(
[id] => 4
[login] => admin
[codigoNuevo] =>
)

[codigo] =>
)

Como se puede ver en los resultados, tanto por el metodo nuevo, como por el viejo, e incluso metiendo los datos de codBorrar en una variable concatenado por comas. no los pasa al script2.

alguien sabe que es lo que esta pasando?

Un saludo a todos.
  #11 (permalink)  
Antiguo 16/03/2005, 03:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
¿Es ese el unico codigo que tienen los scripts? Es mejor que los simplifiques al maximo, para poder verlos al detalle.

¿Como pasas de script1 a script2: enlace, redireccion, ...? Porque si te fijas si crea las entradas en el array $_SESSION, pero parece que pierde o pisa los valores. Podria ser que en el camino de script1 a script2 pises los valores o hagas algo que modifique esos valores.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 16/03/2005, 03:22
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Lo hago a partir de un formulario en el cual envió una opción que elijo ademas del array para tratarlo en el script 2. El último mensaje comento diversos métodos que he utilizado para enviar el array.

Muchas gracias!!
  #13 (permalink)  
Antiguo 16/03/2005, 03:31
 
Fecha de Ingreso: diciembre-2004
Mensajes: 120
Antigüedad: 13 años
Puntos: 0
Hola. Ojeando mi manual de PHP me he encontrado esto:

"If you are using $HTTP_SESSION_VARS/$_SESSION, do not use
session_register(), session_is_registered() and session_unregister()."

Se supone que si defines tu array como una cadena global, podras usarlo sin mas llamandol a $codborrar. La verdad es que no lo he probado nunca, pero igual te sirve de algo la información.
  #14 (permalink)  
Antiguo 16/03/2005, 03:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Sabriaís decirme como crear una variable global?¿ Todos los ejemplos que he encontrado trabajan con variables globales definidas por el entorno.

Muchas gracias!!
  #15 (permalink)  
Antiguo 16/03/2005, 04:43
 
Fecha de Ingreso: diciembre-2004
Mensajes: 120
Antigüedad: 13 años
Puntos: 0
Pues creo que era simplemente poner global $variable
Tambien se podia acceder con $Globals["variable"] , pero en este caso te lo trata como un array y no se si no daria problemas al querer meter un array dentro de un array.
De todas maneras, has escrito que mandas un formulario. Que problema te dan los campos hidden? Yo los uso casi siempre que quiero mandar info y no me han dado nunca problemas.
  #16 (permalink)  
Antiguo 16/03/2005, 04:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Como queria poner un array dentro del hidden lo que realmente me hacia el codigo era poner "Array" en vez de los valores del array y por lo tanto llegaba sin valores optimos al script 2.
Muchas gracias!!
P.D.: Me acabas de dar una idea que ahora mismo voy a probar. Ya dire si surge o no.
  #17 (permalink)  
Antiguo 16/03/2005, 05:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 78
Antigüedad: 12 años, 9 meses
Puntos: 0
Al final lo he conseguido!!!
En el script1 converti el array en una cadena separada por comas y lo envie como un campo oculto (hidden).


//Convierto el array en una cadena
$cadenaBorrar = "";
$long = count($codBorrar)-1;
for($i=0;$i<count($codBorrar);$i++){
$cadenaBorrar .= $codBorrar[$i];
if($i != $long){
$cadenaBorrar .= ",";
}
}

//Lo envio como campo oculto
<input type="hidden" name="laCadena" value=<?= $cadenaBorrar ?>>

En el script2 hize un split y pase de cadena a array:
$lista = split(",",$laCadena);

Y a trabajar con los datos!!!

Muchas gracias a todos y espero que esta información le pueda servir a otro que este en mi misma situación.

P.D.: Aun sigo sin entender porque no me funcionaba con $_SESSION
  #18 (permalink)  
Antiguo 03/06/2005, 09:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por qué el array debes recorrerlo:

No sé si será tu "codigo" variable u otra .. justamente las pruebas de "print_r()" es para que veas eso mismo .. que es lo que estás generando realmente. Un array puede ser de "varias dimiensiones" como por ejemplo ya lo es $_SESSION (y $_POST .. etc) donde pueden ser "asociativas" a su vez y contenter valores simples o array's (y hasta objetos):

Código PHP:
foreach ($_SESSION['tu_Dato_que_es_un_array'] as $elemento){
    echo 
$elemento."<br>";

Un saludo,
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 11:01.