PDA

View Full Version : [PHP] - Ho perso la sessione (ma forse è lei che perde me :D)


80phoenix
08-02-2008, 11:51
Ho questa situazione

La pagina A:
-interroga un db
-memorizza il resultset in una variabile $pippo
-ne fa una copia in una var di sessione $_SESSION['pluto']
-mostra il risultato utilizzando $pippo
-mostra un link per andare alla pagina B

La pagina B:
-dovrebbe (utilizzando la copia del recordset in $_SESSION['pluto']) mandarmi il risultato in una griglia excel visto che ho messo nelle prime righe del codice di questa pagina (ovviamente c'è tutto un codice che fa questa cosa...)

header("Content-type:application/vnd.ms-excel");
header('content-disposition: inline; filename=result.xls');


In realtà sembra che la sessione non contenga + nulla, anche se ho verificato che gli ID della sessione sono identici in entrambe le pagine (quindi la sessione è la stessa)

Che dite???

grazieeeeeeeeeeeeeee

80phoenix
08-02-2008, 11:53
dimenticavo...

ho provato a fare il displaying nella pagina A usando la $_SESSION['pluto'], in maniera tale da escludere che una variabile di session non potesse contenere un resultset

MEMon
08-02-2008, 12:23
Se posti un pò di codice è meglio.

80phoenix
08-02-2008, 13:12
Se posti un pò di codice è meglio.


purtroppo non posso...

cmq volevo cercare di capire se commettevo qualche errore grossolano...tipo che non si può passare un recordset ad una variabile di session o cose del genere

aggiungo qualche dettaglio:

il motivo per cui mi serve fare questa cosa è che voglio esportare il risultato di queries verso un file excel, quindi ho un link sulla pagina A che mi carica la pagina B con gli header di excel messi prima. Volevo evitare di fare rieseguire la query sulla pagina B, passandogli una copia del recordset.

80phoenix
08-02-2008, 14:15
non è che una volta fetchato il recordset una volta questo viene cancellato, oppure devo riportare il puntatore alla riga all'inizio del risultato???

io infatti faccio:

$pippo = eseguo query;
$_SESSION['pluto'] = $pippo;

le variabili sono puntatori al recordset (che ha un suo cursore)?

ho provato a riportare l'ipotetico cursore del recordset all'inizio con

mysqli_data_seek($_SESSION['pippo'], 0);

ma non sembra funzionare :mc:

cionci
08-02-2008, 14:52
Non credo che si possano mettere quel tipo di variabili in sessione, imho al cambio di pagina i riferimenti al recordset vengono persi.

80phoenix
08-02-2008, 15:03
Non credo che si possano mettere quel tipo di variabili in sessione, imho al cambio di pagina i riferimenti al recordset vengono persi.

se nella pagina A io uso per il displaying la variabile di session va tutto bene, quindi $_SESSION['pluto'] può contenere il recordset.

concordo invece con te sulla seconda affermazione...probabilmente al cambio di pagina i riferimenti vengono persi. Non c'è modo di mantenere il recordset senza dover tirare in ballo una struttura dati ad hoc? un modo semplice e veloce per passare un recordset da una pagina all'altra???

cionci
08-02-2008, 15:10
Infatti...intendevo dire che non lo puoi mettere in sessione per utilizzarlo in un'altra pagina ;)
E' chiaro che fino a quando sei nella stessa pagina funzionano.

Nota che la sessione non è altro che un file di testo (lo puoi anche visualizzare a mano volendo), se nella sessione non vengono inseriti tutti i dati del recordset lo puoi benissimo vedere.

Se non sbaglio ci sono le connessioni persistenti...ora mi informo.

80phoenix
08-02-2008, 15:51
Infatti...intendevo dire che non lo puoi mettere in sessione per utilizzarlo in un'altra pagina ;)
E' chiaro che fino a quando sei nella stessa pagina funzionano.

Nota che la sessione non è altro che un file di testo (lo puoi anche visualizzare a mano volendo), se nella sessione non vengono inseriti tutti i dati del recordset lo puoi benissimo vedere.

Se non sbaglio ci sono le connessioni persistenti...ora mi informo.

ok quindi l'errore concettuale è che una volta chiusa la connessione (a fine pagina A) perdo i riferimenti al recordset, nonostante magari nella sessione il dato sia ancora presente. Lascia stare, per vari motivi non posso usare le connessioni persistenti.

piuttosto non ti viene in mente un modo per passare un recordset, al di là di scriverlo su un .txt quando faccio il displaying sulla pagina A da interpretare sulla B?


tnx ciaoooo

cionci
08-02-2008, 16:33
Puoi scriverlo nella sessione invece di scriverlo in un file txt. Con implode ed explode dovrebbe essere relativamente semplice. Ti scorri il recordset e vai a mettere i dati in un vettore che sta nella sessione.
Oppure vai a mettere direttamente i vari vettori recuperati da ogni record in un vettore di vettori nella sessione.

80phoenix
08-02-2008, 16:42
Puoi scriverlo nella sessione invece di scriverlo in un file txt. Con implode ed explode dovrebbe essere relativamente semplice. Ti scorri il recordset e vai a mettere i dati in un vettore che sta nella sessione.
Oppure vai a mettere direttamente i vari vettori recuperati da ogni record in un vettore di vettori nella sessione.

azz detto così mi sembra un casino...

cionci
08-02-2008, 17:38
azz detto così mi sembra un casino...
E più facile di quello che sembri ;)

Scorri il recordset, recuperi il vettore associativo di ogni record e lo schiaffi in un vettore creato nella sessione.