Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Come far fare redirect al form mail in php
Forum - PHP - Come far fare redirect al form mail in php

Avatar
Pammachio (Normal User)
Rookie


Messaggi: 56
Iscritto: 16/04/2008

Segnala al moderatore
Postato alle 19:22
Giovedì, 01/05/2008
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=http://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


__________________
http://www.idee-regalo.biz/regali-aziendali.html - http://www.ideasgift.eu/wedding-gifts.html

Ultima modifica effettuata da Pammachio il 31/07/2014 alle 18:34
PM Quote
Avatar
radio (Ex-Member)
Expert


Messaggi: 327
Iscritto: 03/03/2005

Segnala al moderatore
Postato alle 21:37
Giovedì, 01/05/2008
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
Codice sorgente - presumibilmente Php

  1. <?php
  2. $nome_mittente = $_POST['nome_mittente'];
  3. $mail_mittente = $_POST['mail_mittente'];
  4. $mail_destinatario = "info@xxx.it";
  5. $messaggio = $_POST['messaggio'];
  6.  
  7. $inviato=true;
  8. // non si può scrivere direttamente
  9. // l'errore in echo perchè se errore
  10. // prima bisogna mandare un meta tag per il refresh
  11. // che deve stare nel head dell'html, mentre
  12. // il messaggio di errore starà nel body
  13.  
  14. if ($nome_mittente=="")
  15.  {
  16.  $inviato=false;
  17.  $err="Devi inserire il tuo nome.";
  18.  }
  19. elseif(!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail_mittente))
  20.  {
  21.  $inviato=false;
  22.  $err="Devi inserire un formato di e-mail valido per il mittente.";
  23.  }
  24. elseif ($messaggio=="")
  25.  {
  26.  $err="Hai dimenticato il messaggio.";
  27.  $inviato=false;
  28.  }
  29. else
  30.  {
  31.  if (mail($mail_destinatario, "Richiesta informazioni  da $nome_mittente", $messaggio, "From:<$mail_mittente>\n"))
  32.  $txt="Mail inviata con successo, le risponderemo nel più breve tempo possibile.";
  33. else
  34.  {
  35.  $err= "Si è verificato un errore durante l'invio.";
  36.  $inviato=false;
  37.  }
  38.  }
  39.  
  40. if ($inviato)
  41.  echo $txt;
  42. else
  43.  {
  44. // INIZIO HTML
  45.  echo "<meta etc etc.."
  46. // LA TUA PAGINA
  47.  echo $err;
  48. // CHIUSURA HTML
  49.  }
  50.  
  51. ?>



PM Quote
Avatar
Pammachio (Normal User)
Rookie


Messaggi: 56
Iscritto: 16/04/2008

Segnala al moderatore
Postato alle 23:46
Giovedì, 01/05/2008
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

PM Quote
Avatar
Thejsuter (Normal User)
Rookie


Messaggi: 27
Iscritto: 12/04/2008

Segnala al moderatore
Postato alle 10:50
Venerdì, 02/05/2008
<meta http-equiv="refresh" content="2; URL=tuapagina.php">

PM Quote
Avatar
Pammachio (Normal User)
Rookie


Messaggi: 56
Iscritto: 16/04/2008

Segnala al moderatore
Postato alle 15:25
Venerdì, 02/05/2008
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=http://www.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

PM Quote