Oppure

Loading
01/05/08 17:22
Pammachio
Ciao a tutti.
Ho un sito con una form mail in php usata per i contatti che ogni volta che si spedisce un messaggio, rilascia un messaggio di conferma. Io vorrei che oltre al messaggio, facesse un redirect verso la home page dopo 5 secondi, e nel caso vi fossero errori, facesse un indietro del browser dopo 5 secondi in modo da permettere di fare delle correzioni nel form compilato, ovviamente dopo il messaggio di errore.
Il codice php è questo:

<?php
$nome_mittente = $_POST['nome_mittente'];
$mail_mittente = $_POST['mail_mittente'];
$mail_destinatario = "info@xxx.it";
$messaggio = $_POST['messaggio'];
if ($nome_mittente=="";)
echo "Devi inserire il tuo nome.";
elseif(!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail_mittente))
echo "Devi inserire un formato di e-mail valido per il mittente.";
else if ($messaggio=="";)
echo "Hai dimenticato il messaggio.";
else
if(mail($mail_destinatario, "Richiesta informazioni da $nome_mittente", $messaggio, "From:<$mail_mittente>\n";))
echo "Mail inviata con successo, le risponderemo nel più breve tempo possibile.";
else
echo "Si è verificato un errore durante l'invio.";
?>

Ho provato ad inserire dopo"Mail inviata con successo ecc." la frase "header("Refresh: 5; URL=xxx.com/…;);" ma mi da un errore "Parse error: syntax error, unexpected T_ELSE" e allora mi sono fermato, dal momento che di php so quasi nulla.
Qualcuno mi può aiutare a fare queste due modifiche al codice?
Grazie


__________________
idee-regalo.biz/… - ideasgift.eu/…
Ultima modifica effettuata da Pammachio 31/07/14 16:34
aaa
01/05/08 19:37
radio
Be, l'header per ovvi motivi lo devi spedire prima di qualsiasi altro carattere html, quindi, ipotizzando che lo scrip inizi nel punto da te riportato (ma dubito, ci sarà l'intestazione html...)

Comunque per un redirect "temporizzato" puoi usare il tag "<meta http-equiv="refresh"content="...,5"> mentre con l'header del php dubito, perchè cambia proprio il response header della pagina, che non è più 200 e segue il testo..

Ad ogni modo, segue un esempio (non collaudato, non ottimizzato ma il più chiaro possibile) da cui puoi prendere spunto
<?php
$nome_mittente = $_POST['nome_mittente'];
$mail_mittente = $_POST['mail_mittente'];
$mail_destinatario = "info@xxx.it";
$messaggio = $_POST['messaggio'];

$inviato=true;
// non si può scrivere direttamente
// l'errore in echo perchè se errore
// prima bisogna mandare un meta tag per il refresh
// che deve stare nel head dell'html, mentre
// il messaggio di errore starà nel body

if ($nome_mittente=="")
 {
 $inviato=false;
 $err="Devi inserire il tuo nome.";
 }
elseif(!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail_mittente))
 { 
 $inviato=false;
 $err="Devi inserire un formato di e-mail valido per il mittente.";
 }
elseif ($messaggio=="")
 {
 $err="Hai dimenticato il messaggio.";
 $inviato=false;
 }
else
 {
 if (mail($mail_destinatario, "Richiesta informazioni  da $nome_mittente", $messaggio, "From:<$mail_mittente>\n"))
 $txt="Mail inviata con successo, le risponderemo nel più breve tempo possibile.";
else 
 {
 $err= "Si è verificato un errore durante l'invio.";
 $inviato=false;
 }
 }

if ($inviato)
 echo $txt;
else
 {
// INIZIO HTML
 echo "<meta etc etc.."
// LA TUA PAGINA
 echo $err;
// CHIUSURA HTML
 }

?>

aaa
01/05/08 21:46
Pammachio
ho provato, ma:

Parse error: syntax error, unexpected T_STRING, expecting '(' in /home/xxx/domains/xxx.com/public_html/cg_form_to_mail.php on line 49

boh!?
grazie lo stesso
aaa
02/05/08 8:50
Thejsuter
<meta http-equiv="refresh" content="2; URL=tuapagina.php">
aaa
02/05/08 13:25
Pammachio
Alla fine ho risolto così:

<?php
$nome_mittente = $_POST['nome_mittente'];
$mail_mittente = $_POST['mail_mittente'];
$mail_destinatario = "info@xxx.it";
$messaggio = $_POST['messaggio'];
if (($nome_mittente == "";) || ($messaggio == "";) || (!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail_mittente))){
header("Refresh: 5; URL=javascript:history.back();";);
echo "Dati non corretti!<br>";
echo "Tra 5 secondi sarai riportato al modulo dei contatti.";
}
else {
if(mail($mail_destinatario, "Richiesta informazioni su xxx.net da $nome_mittente", $messaggio, "From:<$mail_mittente>\n";)){
header("Refresh: 5; URL=xxx.net/…;);
echo "Mail inviata con successo, ti risponderemo nel più breve tempo possibile.<br>";
echo "Tra 5 secondi sarai reindirizzato al sito.";
}
else {
header("Refresh: 5; URL=javascript:history.back();";);
echo "Si è verificato un errore durante l'invio.<br>";
echo "Tra 5 secondi sarai riportato al modulo dei contatti.";
}
}

grazie
ciao
aaa