Web4Web.IT - Community Forums
Modulo da sito - Versione stampabile

+- Web4Web.IT - Community Forums (https://www.web4web.it/forum)
+-- Forum: Supporto Tecnico (/forum-21.html)
+--- Forum: Programmazione & Design (/forum-23.html)
+---- Forum: PHP (/forum-24.html)
+---- Discussione: Modulo da sito (/thread-77.html)

1 2 3


Modulo da sito - Elisabetta - 18-11-2009 16:25

Salve a tutti.
Ho un piccolo-grande problema con i moduli inviati su casella email dal mio sito.

L'errore che mi compare è questo:
Citazione:Warning: Cannot modify header information - headers already sent by (output started at /home/[..]/public_html/inviomail.php:8) in /home/[..]/public_html/inviomail.php on line 75

Il mio problema è che i moduli hanno sempre funzionato.. ma su un altro server.

Mi rendo conto benissimo che da server a server cambiano molti parametri e quindi l'errore è del codice, ma io non ho riesco proprio a capire DOVE devo andare ad agire!
Ho visto la linea 75 del file inviomail.php... ma non riesco.

Qualcuno riesce ad aiutarmi?

Il codice intero della pagina sopra descritta è:
Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<
title>Documento senza titolo</title>
</
head>

<
body><?php

// $mail_to and $mail_from must be set.

$mail_to '[email protected]'// Who is the E-Mail going to?
$mail_from '[email protected]'// Where does the E-Mail appear to be from?

// OPTIONAL SETTING
$redirect_url 'http://www.ilmiosito.it/grazie.php'// Example: http://domain.com/thankyou.html - must be a FULL URL.

############################
# DO NOT EDIT BELOW THIS #
############################

// Fail if _POST and _GET are empty. Nothing to process.
if(count($_POST) == AND count($_GET) == 0):
echo 
'This form handler does nothing if visited directly. You must submit form data to this script.';
exit;
endif;

// Fail if $mail_to or $mail_from are not set.
if(empty($mail_to) OR empty($mail_from)):
echo 
'You must edit this script and set the appropriate values for $mail_to and $mail_from.';
exit;
endif;


// Set $fields to whichever method is being used.
$fields = (count($_POST) > ) ? $_POST $_GET;

$message_body "Modulo 2010 \n\n";

foreach (
$fields as $field => $value):
switch(
strtolower($field)):
case 
'redirect':
$redirect $value;
break;
case 
'subject':
$subject $value;
break;
endswitch;
if (
strtolower($field) != 'redirect' AND strtolower($field) != 'submit' AND strtolower($field) != 'subject'):
$message_body .= strtoupper($field) . ": " $value "\r\n";
endif;
endforeach;

// Set the redirect URL from the form (if set). $host_url is a default action if $redirect isn't set
$redirect = (empty($redirect_url)) ? $redirect $redirect_url;
$host_url $_SERVER['HTTP_HOST'];

// Set the message subject based upon a subject field being set or not.

$message_subject = (!empty($subject)) ? $subject 'Modulo 2010 ';

$headers 'From: '.$_POST['email']."\r\n";
'Reply-To: ' .$_POST['email']. "\r\n";
'X-Mailer: PHP/' phpversion();

// Remove potentially injected headers from the body

if (!mail($mail_to$message_subject$message_body$headers)):
echo 
"Message Send Failed.";
endif;

if(empty(
$redirect)):
header("Location: http://{$host_url}");
else:
header("Location: {$redirect}");
endif;
?>
</body>
</html> 

...ripeto, prima di essere fraintesa, che dicendo "prima funzionava" NON sto dando la colpa al server!!!
Voglio solo dire che è un codice che nel bene o nel male funzionava, e quindi sono consapevole che adattandolo ai nuovi parametri dovrebbe continuare a fare il suo lavoro!

Grazie ancora a tutti.

PS. Aggiungo che il modulo è inviato correttamente, ma la pagina mostra l'errore. Quindi l'invio del modulo funziona!


RE: Modulo da sito - 1Dan - 18-11-2009 16:43

Il problema è il redirect in fondo.

Codice PHP:
if(empty($redirect)):
header("Location: http://{$host_url}");
else:
header("Location: {$redirect}");
endif; 

La funzione header() deve essere inviata prima di qualsiasi altro output.
Puoi provare a far precedere la funzione header con "@"

Codice PHP:
if(empty($redirect)):
@
header("Location: http://{$host_url}");
else:
@
header("Location: {$redirect}");
endif; 



RE: Modulo da sito - Elisabetta - 18-11-2009 16:55

Ciao Dan!
Grazie mille per la risposta.

Ho provato e il risultato è il caricamento di una pagina bianca... che è "inviomail.php".
Infatti se leggo il codice sorgente mi appare l'intestazione:

Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Documento senza titolo</title>
</head>

<body></body>
</html>

Capisco che è già un grosso passo avanti.. ma non viene caricata la pagina di ringraziamento! Huh

Cosa posso modificare ancora?


RE: Modulo da sito - 1Dan - 18-11-2009 17:06

Ho provato anche io a fare come suggerito, ma il redirect comunque non funziona. Il problema è quello che ti ho detto. La funzione deve stare prima di qualsiasi altra cosa, perfino dei tag di intestazione.

Un altra prova che puoi fare, è inserire ob_start(); in cima allo script e ob_end_flush(); in fondo.


RE: Modulo da sito - Elisabetta - 18-11-2009 17:18

Ho provato a metterli:

CASO 1)
Prima di ogni cosa
Dopo ogni cosa
Risultato-> Viene stampato su pagina bianca ob_start e l'altro anche

CASO 2)
Ho inserito appena dopo <?php
e appena prima di ?>
Risultato -> Pagina bianca senza redirect

Huh
Se li eliminassi e inserissi un redirect html nell'header di inviomail.php?


RE: Modulo da sito - Gandalf - 18-11-2009 17:19

Ciao Elisabetta.
Controlla che nella pagina "inviomail.php" non ci sia nemmeno una riga vuota.

Fai uno screenshot magari.


RE: Modulo da sito - Elisabetta - 18-11-2009 17:21

(18-11-2009 17:19)Gandalf Ha scritto:  : https://www.web4web.it/forum/post-439.html#pid439Ciao Elisabetta.
Controlla che nella pagina "inviomail.php" non ci sia nemmeno una riga vuota.

Fai uno screenshot magari.

Qualche riga vuota credo ci sia.
Corro a cancellarle tutte.
Grazie anche a te Gandalf


RE: Modulo da sito - Elisabetta - 18-11-2009 17:30

Fatto.. non va.

Allego lo screenshot....

ps. Ovviamente il "nero" non è per voi (che siete amministratori e sapete tutto di tutti, ma per evitare che qualche visitatore venga a giocare con il mio modulo che non funziona)


pps. Riattacco tra un paio d'ore.


RE: Modulo da sito - Might - 18-11-2009 17:37

Ciao, anche questo è output
Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Documento senza titolo</title>
</head>

<body>
pertanto, il redirect va inserito prima di esso.


RE: Modulo da sito - Elisabetta - 18-11-2009 19:09

Dunque, sembra funzionare così facendo...
(mi rendo conto che non è una soluzione pulita, ma almeno funziona)

Ho eliminato il blocco
Codice:
if(empty($redirect)):
@header("Location: http://{$host_url}");
else:
@header("Location: {$redirect}");
endif;

E inserito nell'head questo
Codice:
<meta http-equiv="Refresh" content="1;URL=grazie.php" />

Compare per 1 secondo la pagina bianca e poi si refresha nella pagina di ringraziamento.

Ciò non toglie che continuerò a cercare di migliorare la versione precedente!