Foros del Web » Programando para Internet » PHP »

Enviar consulta (SELECT) por session de una página a otra.

Estas en el tema de Enviar consulta (SELECT) por session de una página a otra. en el foro de PHP en Foros del Web. Les comento lo que me esta sucediendo. Si: 1- Realizo un SELECT a una determinada tabla de mi base de datos. 2- Luego almaceno el ...
  #1 (permalink)  
Antiguo 17/03/2011, 11:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Enviar consulta (SELECT) por session de una página a otra.

Les comento lo que me esta sucediendo.

Si:

1- Realizo un SELECT a una determinada tabla de mi base de datos.
2- Luego almaceno el resultado en un SESSION.
3- Hago un include() de un archivo php (este archivo tiene el papel de vista).
4- En dicho archivo copio en una array lo que hay en la SESSION.

Puedo recorrer la consulta perfectamente a partir del array. Por ejemplo:

controlador.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $this->modObjEmpresa = new modEmpresa();
  4.  
  5. $this->returns = $this->modObjEmpresa->seleccionar($arr=array("todo",0,0));
  6.  
  7.  
  8. $_SESSION['getCont'] = $this->returns;         
  9.  
  10. include("../vistas/empresas/vista.php");
  11.  
  12. ?>

vista.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $resultado = $_SESSION['getCont'];
  4.  
  5. while ($row=mysql_fetch_array($resultado))
  6.  
  7. {
  8.  
  9.     echo $row['razon_soc'];
  10.  
  11. }
  12.  
  13. ?>

Como ven, incluyo la vista dentro del controlador, por tanto, si bien son dos paginas distintas, uso la SESSION como si estuviera siempre en la misma página.

Ahora bien, si trato de hacer exactamente los mismo, pero en vez de incluir la vista redirecciono a la misma, el contenido de SESSION se pierde. Por ejemplo:

controlador.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $this->modObjEmpresa = new modEmpresa();
  4.  
  5. $this->returns = $this->modObjEmpresa->seleccionar($arr=array("todo",0,0));
  6.  
  7.  
  8. $_SESSION['getCont'] = $this->returns;         
  9.  
  10. ?><script type="text/javascript">
  11.     location.href='../vistas/empresas/mostrar.php';
  12. </script><?php
  13.    
  14. ?>

vista.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $resultado = $_SESSION['getCont'];
  4.  
  5. while ($row=mysql_fetch_array($resultado))
  6.  
  7. {
  8.  
  9.     echo $row['razon_soc'];
  10.  
  11. }
  12.  
  13. ?>

Por tanto, lo que sucede es que si uso el SESSION, el cual contiene la consulta, desde la misma página todo funciona perfecto, pero si trato de usar el SESSION desde otra página, pierdo su contenido.

Aclaro que si en el SESSION almaceno una palabra o número cualquiera, en vez de una consulta, por ejemplo $_SESSION['getCont'] = 'HOLA', todo funciona perfecto, es decir, la SESSION se puede utilizar, tanto en la misma página, como en cualquier otra.

Con esto estimo que el problema es al trata de pasar una consulta a través de un SESSION de una página a otra.

Gracias.
  #2 (permalink)  
Antiguo 17/03/2011, 15:05
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Necesito que por lo menos me digan si es posible pasar el resultado de una consulta de una página a otra, a través de un SESSION y como.

Gracias.
  #3 (permalink)  
Antiguo 17/03/2011, 15:09
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Claro que se puede man:

$resultado = mysql_fetch_array($consulta);

$_SESSION['miVariable'] = $resultado;
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #4 (permalink)  
Antiguo 17/03/2011, 16:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por jotaincubus Ver Mensaje
Claro que se puede man:

$resultado = mysql_fetch_array($consulta);

$_SESSION['miVariable'] = $resultado;
En ese ejemplo lo que estas pasando por SESSION es solo un registro de la consulta, pero lo que yo necesito hacer es pasar la consulta completa y es ahí en donde tengo problemas. Si paso una palabra o un número por SESSION no tengo problemas, o sea que las SESSION funcionan, pero no logro pasar una consulta completa (varios registros).
  #5 (permalink)  
Antiguo 17/03/2011, 16:23
 
Fecha de Ingreso: marzo-2011
Mensajes: 30
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

no olvides session_start() al principio del archivo si no luego no se ven las sesiones!!
  #6 (permalink)  
Antiguo 17/03/2011, 16:25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por ppLu1Gui Ver Mensaje
no olvides session_start() al principio del archivo si no luego no se ven las sesiones!!
Si, el session_start() se encuentra en las dos páginas.
  #7 (permalink)  
Antiguo 17/03/2011, 16:27
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por GNULinux Ver Mensaje
En ese ejemplo lo que estas pasando por SESSION es solo un registro de la consulta, pero lo que yo necesito hacer es pasar la consulta completa y es ahí en donde tengo problemas. Si paso una palabra o un número por SESSION no tengo problemas, o sea que las SESSION funcionan, pero no logro pasar una consulta completa (varios registros).
Que yo sepa ahi estas pasando el ARRAY completo de lo que te entrego MySql... si te fijas estas pasando el mysql_fetch_array de una consulta... y mysql_fetch_array genera una matriz completa con todos los recultados que entrego MySql
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #8 (permalink)  
Antiguo 17/03/2011, 16:39
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Se necesita saber que regresa tu metodo

Código PHP:
this->modObjEmpresa->seleccionar() 
Si es un objeto primero tienes que serializarlo para poder enviarlo a través de la sessión y luego deserializarlo donde lo recibes.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #9 (permalink)  
Antiguo 17/03/2011, 17:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Busqueda Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por jotaincubus Ver Mensaje
Que yo sepa ahi estas pasando el ARRAY completo de lo que te entrego MySql... si te fijas estas pasando el mysql_fetch_array de una consulta... y mysql_fetch_array genera una matriz completa con todos los recultados que entrego MySql
mysql_fetch_array — Recupera una fila de resultado como un array asociativo, un array numérico o como ambos

Fuente: http://php.net/manual/es/function.mysql-fetch-array.php

Cita:
Iniciado por _ssx Ver Mensaje
Se necesita saber que regresa tu metodo

Código PHP:
this->modObjEmpresa->seleccionar() 
Si es un objeto primero tienes que serializarlo para poder enviarlo a través de la sessión y luego deserializarlo donde lo recibes.
El método devuelve la consulta, no un objeto:

Código PHP:
function seleccionar()
{

              
$this->consulta "SELECT * FROM empresa"
              
$this->resultado mysql_query($this->consulta);

                  return 
$this->resultado;

  #10 (permalink)  
Antiguo 17/03/2011, 18:40
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Hola

guarda en un array cada array generado por mysql_fetch_array
a cada vuelta del bucle y segun veo lo estas guardando en la variable $row y no $resultado

<?php


while ($row=mysql_fetch_array($resultado)) {

echo $row['razon_soc'];
$row = $_SESSION['getCont'];

}



?>


Un saludo
  #11 (permalink)  
Antiguo 17/03/2011, 19:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por jaronu Ver Mensaje
Hola

guarda en un array cada array generado por mysql_fetch_array
a cada vuelta del bucle y segun veo lo estas guardando en la variable $row y no $resultado

<?php


while ($row=mysql_fetch_array($resultado)) {

echo $row['razon_soc'];
$row = $_SESSION['getCont'];

}


?>


Un saludo
Disculpá, pero no entendí lo que me quisiste decir.
  #12 (permalink)  
Antiguo 17/03/2011, 20:05
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Hola

una cosa asi:

Código PHP:
$array = array (); 

while (
$row mysql_fetch_array($resultado)) { 

$array [] = $row;
$_SESSION['uno'] = $array;

echo 
$row['razon_soc']; 



y en la otra pagina ya estar la variable de sesion con todos los datos de la consulta en el array

Un saludo

Última edición por jaronu; 17/03/2011 a las 20:16
  #13 (permalink)  
Antiguo 18/03/2011, 06:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por jaronu Ver Mensaje
Hola

una cosa asi:

Código PHP:
$array = array (); 

while (
$row mysql_fetch_array($resultado)) { 

$array [] = $row;
$_SESSION['uno'] = $array;

echo 
$row['razon_soc']; 



y en la otra pagina ya estar la variable de sesion con todos los datos de la consulta en el array

Un saludo
Efectivamente, tenía que pasar la consulta a un array y luego guardar el mismo en el SESSION. El array que devuelve una consulta es de tipo Resource y este no puede ser serializado, por tanto, hay que pasar el mismo a un array de datos y enviar éste último por el SESSION.

Gracias por las respuestas y su tiempo.
  #14 (permalink)  
Antiguo 18/03/2011, 07:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por GNULinux Ver Mensaje
mysql_fetch_array — Recupera una fila de resultado como un array asociativo, un array numérico o como ambos

Fuente: http://php.net/manual/es/function.mysql-fetch-array.php



El método devuelve la consulta, no un objeto:

Código PHP:
function seleccionar()
{

              
$this->consulta "SELECT * FROM empresa"
              
$this->resultado mysql_query($this->consulta);

                  return 
$this->resultado;

Hola,
Pregunta sobre otra pregunta,
En este método te devuelve el resultado "un resource", este no se puede almacenar en una variable $_SESSION['datos'] = $resource; y enviarlo a la otra página?
  #15 (permalink)  
Antiguo 18/03/2011, 09:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por tonysanrusso Ver Mensaje
Hola,
Pregunta sobre otra pregunta,
En este método te devuelve el resultado "un resource", este no se puede almacenar en una variable $_SESSION['datos'] = $resource; y enviarlo a la otra página?
El método te devuelve el resultado de una consulta, es decir, la respuesta de mysql_query($consulta), pero ese resultado, el cual es de tipo Resource (array especial, no común), no puede ser serializado, algo que es obligatorio si se lo quiere pasar por SESSION. Por tanto, lo que hay que hacer es pasar el "array especial" que te devuelve el método (el resultado de la consulta) a un array común (miArr = array()) y luego ser éste último el que se envía por SESSION, ya que éste al ser un array común si puede ser serializado.
  #16 (permalink)  
Antiguo 18/03/2011, 10:14
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Aunque tal vez sería mejor decirte que tu implementación de MVC es realmente mala :p
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #17 (permalink)  
Antiguo 18/03/2011, 17:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por _ssx Ver Mensaje
Aunque tal vez sería mejor decirte que tu implementación de MVC es realmente mala :p
El orden de los factores no altera el producto...


Por otro lado, yo he pasado objetos por sesiones y no es necesario serializar, pero sí es necesario incluir la clase en la otra página antes de realizar el session_start().

Saludos.
  #18 (permalink)  
Antiguo 18/03/2011, 18:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Iniciado por _ssx Ver Mensaje
Aunque tal vez sería mejor decirte que tu implementación de MVC es realmente mala :p
Si lo decís porque paso array de consultas por SESSION, es cierto que no es lo mejor ya que esto implica una serie de procesos que le quitan rendimiento a la aplicación, pero solo paso arrays de consulta por SESSION cuando necesito hacer un export a excel y lo hago así por razones que no voy a explicar.

Ahora, si es por otra cuestión que no te gusta mi implementación MVC, poco me importa, ya que lo que he logro con mi "pseudo-framework" es mucho, por lo que estoy más que conforme con él. No existe una sola forma de implementar MVC y no creo que la tuya sea la mejor.

Por otro lado, no se porque opinas si no tenes idea ni del 10% de como implemento MVC porque nunca lo expuse.

Cita:
Iniciado por tonysanrusso Ver Mensaje
El orden de los factores no altera el producto...


Por otro lado, yo he pasado objetos por sesiones y no es necesario serializar, pero sí es necesario incluir la clase en la otra página antes de realizar el session_start().

Saludos.
Todo lo que se pasa por SESSION, de una página a otra, es serializado automáticamente. Mientras lo que haya en SESSION no se pase de página a página, no se serializa, solo al pasarlo.

Por eso es que si guardas una consulta pura en una SESSION y luego usas esa SESSION en la misma página, todo funciona perfecto, ahora si querés pasar la consulta que hay en el SESSION de una página a otra, la SESSION se pierde porque no puede ser serializada.

Al menos eso tengo entendido y como verás lo he comprobado.

Saludos.
  #19 (permalink)  
Antiguo 18/03/2011, 19:27
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Enviar consulta (SELECT) por session de una página a otra.

Cita:
Por otro lado, no se porque opinas si no tenes idea ni del 10% de como implemento MVC porque nunca lo expuse.
:) no me hace falta ver todo tu código para poder deducir eso, sin embargo con tu actitud de que todo lo sabes no creo que avances rapidamente, me basta ver esto, para notar que eres un principiante y a parte soberbio..

Código PHP:
$_SESSION['getCont'] = $this->returns;          
 
?><script type="text/javascript">
    location.href='../vistas/empresas/mostrar.php';
</script><?php
    
?>
En fin si te gusta hacer cochinadas por mi esta bien :) al fin yo no utilizo tus códigos.

http://www.developerdotstar.com/mag/...g_espanol.html
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Etiquetas: select, session
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 08:16.