Newsgroup: it.comp.www.php
Titolo: Pausa prima di un redirect

Salve a tutti.
Un nuovo piccolo problema mi affligge...
In poche parole, vorrei che l'utente possa leggere la conferma della 
registrazione prima di essere rediretto alla pagina di login.
ho scritto questo codice nel mio script php:
if (mysql_query($query, $db)){
       echo "Utente '".$user."' correttamente registrato\n" ;
       sleep(3);
       header("Location: 
http://localhost//edit/index.htm
");
       }
Ebbene, ci mette 3 secondi ad effettuare il redirect, ma rimanendo nella 
stessa pagina, senza visualizzare il messaggio di conferma :(
Se invece tolgo header(...) ovviamente visualizzo il messaggio e dopo 3 
secondi il browser mi dice "operazione completata" (utilizzo firefox 2.0).
Dove sbaglio??
Grazie a tutti!!

 nella stessa pagina, senza visualizzare il messaggio di conferma :(
Non puoi utilizzare header location per questo. Uilizza il meta tag
refresh oppure javascript.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

Paolo Capasso ha scritto:

Quei tre secondi sono lato-server, non lato client!
Questo significa che php blocca l'esecuzione dello script per tre
secondi, ma la pagina (header incluso) viene comunque mandata
"interamente" al browser.
Come consigliato, devi utilizzate javascript per questo genere di
lavori :-)

 Uilizza il meta tag refresh 
Appoggio la mozione.

Mirko ha scritto:

Infatti, potevo pensarci prima da solo che l'attesa č lato server :D
Alle volte i bicchieri d'acqua sembrano cosě grandi! :)
Ora perň, ho un problema, che secondo me deriva dall'interazione php, 
html... Che evidentemente non ho ancora compreso bene, e me ne scuso con 
tutti voi.
Vorrei realizzare una pagina di login per la quale, se il login va a 
buon fine, si apre la pagina homepage.htm, altrimenti si torna a quella 
di login index.htm.
Ho scritto questo codice, pensando che php e html innestati 
funzionassero in questo modo (non fate caso all'indentazione, l'ho 
ridotta per non pasticciare qui sul ng):
[...]
   $res=mysql_fetch_row($query);
   if ($res[0]==$pass)
    {
    echo "Nome utente e password corretti: login effettuato". "<br />\n";
    echo "Attendere l'accesso alla pagina di gestione";
    $_SESSION['user']=$user;
    mysql_close($connection);
    }
   }
?>
   <html>
   <META http-equiv="REFRESH" content="3;
url=
http://localhost//edit/homepage.htm
">
   </html>
<?php
   if ($res[0]!=$pass)
       echo "Nome utente o password errati: login interrotto";
?>
   <html>
   <META http-equiv="REFRESH" content="3; 
url=
http://localhost//edit/index.htm
">
   </html>
Ma evidentemente non deve funzionare cosě perchč il redirect avviene in 
ogni caso verso index.htm.
Dov'č che sbaglio?? :(

 Dov'č che sbaglio?? :(
Esegui sempre i 2 redirect, con il risultato che atterri sull'ultimo. 
Nel tuo codice l'unica diffenza tra utente valido o no č il messaggio, 
infatti hai questo output html:
Utente valido:
Nome utente e password corretti: login effettuato
Attendere l'accesso alla pagina di gestione
redirect -> edit/homepage.htm
redirect -> 
http://localhost//edit/index.htm
Utente NON valido:
Nome utente o password errati: login interrotto
redirect -> edit/homepage.htm
redirect -> 
http://localhost//edit/index.htm
Dividiamo in due il problema: io toglierei il mex di login effettuato ed 
andrei direttamente alla home ma questi sono gusti personali :-)
##Controllo user-pwd##
if Utente valido then
	#Utente valido
	Mex "login effettuato"
	redirect homepage
else
	#Utente errato
	Mex "Errore login"
	redirect login-page
end if
Se vuoi togliere il messaggio fai direttamente un header location
if(###Utente valido) {
	header("Location: 
http://sito/index.php
");
} else {
	header("Location: 
http://sito/login.php?error
");
}
In login.php
if(isset($_GET['error'])) {
	echo 'Utente non valido, eseguire nuovamente il login!';
}
	Francesco

A me il metodo più semplice sembrerebbe quello di impostare l'url cui
reindirizzare in una variabile. Ovvero.
if(il login è corretto)
   $url = "
http://www./login_corretto.htm
";
else
   $url = "
http://www./login_errato.htm
";
  <html>
   <META http-equiv="REFRESH" content="3;
url=<?php print($url); ?>">
   </html>

 Salve a tutti.
Scusate se intervengo, giusto per segnalare che il metodo refresh html è 
ritenuto non accessibile:
http://en.wikipedia.org/wiki/Meta_refresh
"Using meta refresh for redirection is considered by the W3C to be a 
poor practice, since it does not communicate any information about 
either the original or new resource to the browser (or search engine)."
-- 
should I go back to sleep?

 Paolo Capasso ha scritto:
ah ecco il doc che cercavo originariamente:
http://www.w3.org/QA/Tips/reback


 
http://www.w3.org/QA/Tips/reback
Sì, convincente.


All'infuori di questo, il punto è: ma che senso ha fare un controllo
tramite php e poi fare il redirect tramite javascript?!?!
E' solo un effetto scenico, cioè serve solo per visualizzare per 3
secondi una pseudo-barra progressiva, facendo perdere tempo all'utente
per un effetto scenografico assolutamente inutile?
Se il controllo viene fatto in php, il redirect dovrebbe essere fatto
dal php.
Se il controllo viene fatto in jscript, il redirect dovrebbe essere
fatto da jscript (magari utilizzando location, visto che il refresh
html, come hai fatto notare, non è accessibile).
Opinione assolutamente personale, eh!