Redirect Doppio (si può chiamare così?)

  • Creatore Discussione Creatore Discussione Jonn
  • Data di inizio Data di inizio

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Salve, proprio ieri leggendo un post sul forum mi è venuto in mente di creare un redirect sul mio sito web dopo l'invio dell'email, provo a spiegare:

- La form viene compilata
- Quando l'utente clicca invia la form spedisce la mail e tramite la funzione HEADER rimanda alla pagina confermamessaggio.php dove c'è scritto:
"Messaggio spedito, sarai reindirizzato alla pagina di proveniente entro 5 secondi, se non vieni reindirizzato clicca Qui."

Qui mi sorge il problema, io vorrei che questa pagina venga mostrata per l'appunto per 5 secondi e poi venisse fatto un refresh rimandando il browser alla pagina ?pagina=contatti.

Premetto che ho fatto alcune prove ma con insuccesso e non riesco a capire dove sbaglio:

Ho provato con Header in PHP:
PHP:
					<?php 
					echo "<h1>/Contatti</h1>
					<div class='boxcelestenote' style='text-align: center; margin-top: 80px;'>
						<b>Risposta:</b>
						Messaggio inviato! tra 5 secondi sarai reindirizzato alla pagina di provenienza. Se non vieni reindirizzato clicca
						<a href='http://www.johnnyferrari.it/?pagina=contatti'>Qui</a>
					</div>";
					?>
					<?php
    header("Refresh: 5; url=www.johnnyferrari.it/?pagina=contatti");
?>
Con Header funzionare funziona, il problema è che (per supposizione) il server esegue solo Header perchè nel momento in qui passano i 5 secondi la pagina mostrata è vuota, invece vorrei che prima mi venisse mostrato quello che ho messo nell'echo e poi dopo 5 secondi venissi reindirizzato sulla pagina contatti di nuovo.

Ho provato anche con il tag META che però ho visto che molti lo considerano il redirect dei poveri (il perchè non lo so):
PHP:
<?php
		if (isset($_GET['pagina'])) 
				{
				switch($_GET['pagina'])
					{
			case "progetti":
			case "galleria":
			case "tron_legacy_template":
			case "viola_e_arancio":
			case "concept_boxes_tron_legacy_style":
			echo '		<link rel="stylesheet" href="css/lightbox.css?ver=1" type="text/css" media="screen" />
		<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
		<script type="text/javascript" src="js/lightbox.js"></script>
';break;
			case "profilo":
			case "servizi":
			case "contatti":
			case "infosito":
			echo '		<link rel="stylesheet" href="css/elenchi.css?ver=1" />
';break;
			case "messent":
			echo '		<meta http-equiv="refresh" content="5; url=http://www.johnnyferrari.it/?pagina=contatti">
';break;
					}
				}
				else{echo('');}
?>
Che con questo non ho capito il perchè, ma proprio non va neanche a pedate.

Se dovesse servire posto anche il codice del codice PHP che prende la mail, la invia e fa il redirect sulla pagina confermamessaggio.php:
PHP:
<?php
//Destinatario form mail.
$mailto = "*******@live.it";
//Oggetto della mail mostrato in posta elettronica.
$subject = "Mail da JohnnyFerrari.it";
//Pagina da aprire dopo l'invio della mail.
$redirect = "http://www.johnnyferrari.it/?pagina=messent";

foreach($_POST as $key => $value) {
$message .= $key . ': ' . $value;
$message .= "\n\n";
}
if (empty($_POST[nome]) OR empty($_POST[email]) OR empty($_POST[contenuto])) {  
echo "<script>alert('Non hai compilato uno o più campi obbligatori. Completa tutti i campi e riprova.');</script>";
exit();
} else {
@mail($mailto, $subject, $message);
header("location: $redirect");
}
?>

PS. Se volete provare mandate pure delle mail di prova per vedere cosa ho combinato finora, tanto ieri a forza di provare me ne sono mandate una 30ina nel giro di 5 minuti XD

Grazie in anticipo.
 
PHP:
echo "<script>setTimeout(function () {  window.location.href = \"/?pagina=contatti\"; }, 5000);</script>";
 
A me funziona, devi solo mettere un url corretto quindi anche con http:// oppure dato che fai un redirect al tuo stesso sito basta "?pagina=contatti" nel header

PHP:
echo "<script>setTimeout(function () {  window.location.href = \"/?pagina=contatti\"; }, 5000);</script>";
Non c'è bisogno di mettere mano al js, basta che aggiusta l'url
 
Risolto e spiego il perchè ed il come:

Il codice in effetti come dice Nefyt funzionare funziona! il problema era che siccome io uso quasi sempre e solo Firefox era un problema di Crossbrowsing (penso), questo perchè con Chrome, Internet Explorer ed Opera funziona, mentre Firefox non so il perchè non mi esegue l'header.

Il problema era quindi che non è che non funzionava il codice, ma non funzionava solo con Firefox, non lo avevo notato perchè uso sempre questo.

Ho risolto con la soluzione di FexVrasta che è Crossbrowser quindi.

Risolto, grazie a Nefyt ed a FezVrasta. :)
 

Discussioni simili