Newsgroup: it.lavoro.professioni.webmaster
Titolo: Un aiutino: redirect su condizione if

Ciao a tutti,
io non sono un webmaster, ma per una serie di motivi mi trovo a dover 
mettere mano a del codice.
Avrei un problema con l'invio mail da un form html con uno script php.
L'email viene inviata, ma alla fine, ancziche una bruttissima pagina bianca 
con scritto "email inviata", vorrei fare un redirect automatico ad una 
pagina del sito nel solito dominio.
Ho provato a sostiture il print con header, a cambiare la sintassi, ad usare 
il tag meta, ho cercato su google e nei forum, ma tutto senza successo.
Ho questo codice php, come potrei fare?
Grazie
<?PHP
// Processo di recupero dei dati
$nome = $_POST['nome'];
$email = $_POST['email'];
$messaggio = nl2br($_POST['messaggio']);
// Processo di controllo [Opzionale]
if ($nome == null)
{
print "Errore: &egrave; necessario compilare il campo 'Nome e cognome'";
}
else
{
if ($email == null)
{
print "Errore: &egrave; necessario compilare il campo 'Indirizzo e-mail'";
}
else
{
if ($messaggio == null)
{
print "Errore: &egrave; necessario compilare il campo 'Messaggio'";
}
else
{
// Processo di configurazione dell'email
// [Destinatario, mittente, ecc]
$mail_to = "
fabio...@me.com
";
$mail_from = $email;
$mail_subject = "Contatto dal web da parte di $nome";
$mail_body = "<p><font color=#000000>$messaggio</font></p>";
// Intestazioni HTML
$mail_in_html = "MIME-Version: 1.0
";
$mail_in_html .= "Content-type: text/html; charset=iso-8859-1
";
$mail_in_html .= "From: <$mail_from>";
// Processo di invio
if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
{
print "Email inviata con successo!";
}
else
{
print "Errore";
}
}
}
}
?>

hai provato il seguente:
header ("Location: $url");
al posto di
print "Email inviata con successo!";
?


Purtroppo cercando su google questa � la prima cosa che si trova, ma non va.
Viene inviata la mail e poi il tutto si ferma su una pagina bianca con nella 
barra degli indirizzi il percorsp dello script php.

 
Sicuro che non stampi nulla prima dell'header?
Ma ti ritorna qualche errore o solo non esegue l'header?
J.

 Ma ti ritorna qualche errore o solo non esegue l'header?
Nessun errore, solo pagina bianca.
Ecco il codice:

print "Email inviata con successo!";
}
else
{
print "Errore";
}
}
}
}
?> 


La funzione mail() restituisce true se l'email � stata inviata con successo, 
altrimenti restituisce false in caso contrario.
Quindi, puoi fare:
$status = mail ( ............ )
if $status {
     // codice invio ok
} else {
     // codice invio fallito
}
riguardo all'invio ok, stampi il messaggio come ti piace con un print, 
riguardo invece all'invio fallito usa un redirect mediante header ();
Tieni presente che se usi header () quando hai gi� inviato dell'output 
ottieni un errore. Per ovviare a questo errore c'� una funzione apposita che 
adesso non ricordo ma che puoi trovare sul sito di php o attraverso la 
risposta di altri.

 Nessun errore, solo pagina bianca.
Evidentemente l'interprete PHP � impostato per non riportare le 
notifiche di errore. Per riattivarla nello script imposta:
	ini_set('display_errors',1);
	error_reporting(E_ALL);
Probabilmente l'errore che ti ritorna � un Cannot Modify Header Information.
Uno dei trick a cui si riferisce Marcello � forzare il buffering dell'output:
	ini_set('output_buffering', 'On');
Prova cos�.
-- 
C-K


No, il print mi stampa la pagina bianca con scritto "email inviata con 
successo".
Io vorrei far reindirizzare il tutto ad una pagina creata ad-hok con tutta 
la grafica del sito e la scritta "email inviata con successo"
Alternativamente andrebbe bene una finestrella di quelle dove c'� solo da 
digitare "ok" (perdonatemi il linguaggio) con scritto che l'email � stata 
inviata. Ovviamente alla pressione di OK la pagina sotto deve rimanere 
quella precedente, od al massimo essere ricaricata.

 Prova cos�.
Non capisco una cosa:
Ma l'errore sull'header quando si ha gi� stampato, c'� a prescindere o no?
Mi spiego meglio: se ho del codiche che "stampa su condizione" come nel mio 
caso, e si arriva alla fine del codice senza che nessuna condizione si � 
verificata, non vi � alcun output, quindi l'header non dovrebbe andare in 
errore.
Oppure basta che ci sia presente nel codice un "print" ed anche se non viene 
eseguito manda in errore l'header?

 andare in errore.
Se la condizione non viene verificata, il blocco condizionale non viene 
eseguito.
La butto lì, non è elegante e non è molto pratico:
if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html)) {
	print "Email inviata con successo!";
} else {
	print "<script 
type=\"text/javascript\">location.replace('
http://tuapagina.ext
');</script>";
}
-- 
C-K