LORETTA B. forum

Linguaggi di programmazione => Javascript => Topic aperto da: micdas - Luglio 07, 2011, 00:02:32

Titolo: messaggio a tempo usando $_SESSION[] con JS
Inserito da: micdas - Luglio 07, 2011, 00:02:32
Chiedo qui perchè penso che in PHP non sia fattibile.
Per semplicità le pagine le chiamo pag1, pag2, pag3 (tutte PHP)
La situazione è questa.
Da pag1 chiamo un form che si trova in pag2
Il processo al form lo eseguo in pag3 che con una redirect (header("location: pag1.php"); ) ritorna a pag1
Durante il processo possono verificarsi diversi eventi:
Esito positivo
Esito negativo
Esito positivo solo in parte
ecc
questi eventi li memorizzo nella variabile di sessione:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$_SESSION['sess_messaggio'] .= "inserimento eseguito con successo: ";
$_SESSION['sess_messaggio'] .= "Errore nell'esecuzione di inserimento: ";
ed altro
Ritornando  a pag1 scrivo il messaggio, però se la variabile di sessione non viene in qualche modo cancellata, anche compiendo altre operazioni, il messaggio rimane sempre visibile.

Esiste un modo per poter cancellare (magari da JS) dopo un breve periodo di tempo la variabile del messaggio?

Ti ringrazio in anticipo  :Party133:.

 :ciao:

PS:
Dimenticavo che non posso, non debbo cancellare tutte le session perchè ci sono alcune sue variabili che mi servono sino alla fine dei lavori, ma solo quella del messaggio.
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: HellDevil - Luglio 07, 2011, 09:54:57
Ovviamente non puoi modificare le variabili di sessione direttamente da javascript in quanto queste risiedono sul server mentre il javascript funziona lato client.

Puoi ovviare facendo una pag4 con solo lo svuotamento di quella variabile di sessione (es. mettendola a "" o a null) e chiami quella pagina con javascript dopo un tot di tempo (ovviamente se il tot di tempo è troppo lungo rischi che prima l'utente ti chiuda la pagina).

Come di consueto di seguito un esempio:

Codice: Non sei autorizzato a vedere i links. Registrati o Login
function openpag4(){
var w = 0;
var h = 0;
newwindow=window.open("pag4.php","pag4","width=" + w + ",height=" + h) ;
window.opener=self;
}

function closepag4(){
if(false == pag4.closed){
pag4.close ();
}else{
alert('Popup già chiuso!');
}
}

function pag4(){
window.setTimeout('openpag4()',10000); //apri la pag4 dopo 10 sec quindi la variabile di sessione si svuoterà dopo 10 sec
window.setTimeout('closepag4()',1000); //chiudi il popup un secondo dopo
}

poi

Codice: Non sei autorizzato a vedere i links. Registrati o Login
<body onload="pag4();">
e nella pag4

Codice: Non sei autorizzato a vedere i links. Registrati o Login
$_SESSION['sess_messaggio'] .= "";
Altrimenti puoi fare un frame invisibile che richiami sempre da js se non ti piace il popup con lo stesso sistema (richiama la pagina pag4.php).

Fammi sapere se ti serve altro.

Ciao
HellDevil
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: micdas - Luglio 07, 2011, 17:37:01
 :ciao: Devil e grazie per la risposta.
Ho appena applicato lo script alla pagina che mi interessa
Ho creato la pag4.php con questo codice:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
session_start
();
$_SESSION['sess_messaggio'] = "";
?>


Ovviamente la variabile viene svuotata, però succedono anche alcune cose:
la pagina viene aperta in _blank coprendomi la pagina di lavoro (la pag1) e rimane aperta fino a quando non la chiudo manualmente.
Ho provato a cambiare l'istruzione
Codice: Non sei autorizzato a vedere i links. Registrati o Login
window.opener=self;in
Codice: Non sei autorizzato a vedere i links. Registrati o Login
window.opener=_self;ma non cambia nulla: la pagina continua ad aprirsi in "_blank" e così rimane fino a quando non la chiudo manualmente.
Altra cosa vien sempre fuori l'alert dello script.

Ti ringrazio per l'attenzione e ti chiedo scusa per i grattacapi che ti procuro  :Amore52:

 :ciao:
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: micdas - Luglio 07, 2011, 23:22:38
Per facilitare la comprensione di quanto ho detto qui sopra ho preparato le 4 pagine simulando la vera situazione in cui mi trovo.
La prova si trova qui a questo indirizzo (http://ilquadernodimike.altervista.org/prove/messaggio_a_tempo/pag1.php)
Nel mio browser ho il blocco delle popup per cui prima di aprire la popup mi viene il messaggio di FF: "Firefox ha impedito a questo sito una finestra popup".
Se la lascio bloccata la variabile non si azzera.
Se dico "permetti......" la variabile si azzera ma la popup si apre e resta aperta.
A parte il contenuto delle prime 2 pagine nella 3 e nella 4 ci sono queste istruzioni:
Pag3:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
session_start
();
$_SESSION['sess_messaggio'] = "Ritorno dal futuro";
header("location: pag1.php");
?>

Pag4:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
session_start
();
$_SESSION['sess_messaggio'] = "";
?>


Spero che l'esempio possa chiarire il problema.

 :ciao:
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: micdas - Luglio 08, 2011, 09:28:15
Ho trovato  :n045:
Nella funzione openpag4()
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function openpag4(){
var w = 0;
var h = 0;
newwindow=window.open("pag4.php","pag4","width=" + w + ",height=" + h) ;
window.opener=_self;
}
viene creata la variabile "newwindow".
Nella funzione closepag4()
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function closepag4(){
if(false == pag4.closed){
pag4.close ();
} else {
alert('Popup chiuso!');
}
}
viene usata la variabile "pag4"
Provando a modificare in questo modo la funzione closepag4()
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function closepag4(){
if(false == newwindow.closed){
newwindow.close ();
} else {
alert('Popup chiuso!');
}
}
la popup viene chiusa regolarmente.

 :Banane27:

Grazie per l'utile script   :Party133:
 :ciao: e alla prossima

PS
Macchè, sembrava, all'inizo, ma mi sono accorto che la popup continua a rimanere aperta  :testate:
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: HellDevil - Luglio 08, 2011, 19:26:03
Per evitare i problemi di popup puoi sempre optare per la seconda soluzione che ti ho dato, i frame.
Crea un frame di dimensioni 0 che carica la pag4 da js in questo modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<iframe id="frame_pag4" width="0" height="0" scrolling="no" border="0" style="visibility:hidden" src="" />e nel js:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function cambiaFrame(){
  var myFrame = document.getElementById("frame_pag4");
  myFrame.src = "pag4.php";
}
poi nel body:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<body onload="window.setTimeout('cambiaFrame()',10000);">
e nella pag4.php:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
session_start
();
$_SESSION['sess_messaggio'] = "";
?>


Fammi sapere se va

Ciao
HellDevil
Titolo: Re:messaggio a tempo usando $_SESSION[] con JS
Inserito da: micdas - Luglio 08, 2011, 21:09:49
Grazie Devil  :Party133:
ora sembra funzionare bene, evitando anche il fastidioso sfarfallio di prima dovuto al cambio pagina.
Ovviamente farò ancora alcuni test e  se tutto continua a procedere bene la storia si può chiudere qui. Ovviamente ho rmandato la pagina modificata on line.

Per mantenere la validazione alla pagina nell'iframe metto di default una pag5 completamente vuota. Sembra non creare problemi. Allo scadere del tempo prefissato ho notato che viene regolarmente sostituita
Anche alla pag4, anzichè lasciarla vuota, ho dato, dopo la session, il minimo di tag html, sempre per non perdere la validazione.

 :ciao:    :Cartelli36:

PS: il link è sempre lo stesso e si trova sempre qui (http://ilquadernodimike.altervista.org/prove/messaggio_a_tempo/pag1.php)