Volledige versie bekijken : Foutmelding php mailscript



JanE
8 January 2008, 17:20
Is er iemand die mijn een tip kan geven waar ik moet gaan zoeken?


Ik gebruik een standard (php) mail script voor al mijn sites.
Het werkt overal goed behalve op een reseller account dat ik voor enkele sites gebruik.

Het php script wordt aangeroepen vanuit een formulier pagina. Na het succesvol versturen moet er een html bedank/bevestigings pagina openen.

Als ik een bericht verstuur volgen de volgende foutmeldingen:

Notice : Undefined index: ORIG_PATH_INFO in /home/gebruikersnaam/domains/domein.nl/public_html/map/scriptnaam.php on line 69

Warning: Cannot modify header information - headers already sent by (output started at /home/gebruikersnaam/domains/domein.nl/public_html/map/scriptnaam.php:26) in /home/gebruikersnaam/domains/domein.nl/public_html/map/scriptnaam.php on line 77

Het formulier wordt wel verstuurd maar zonder header informatie en er volgt geen bedank pagina.

Bij voorbaat bedank.

Jan.

Jelle
8 January 2008, 18:17
Dat het op de ene host werkt zonder errors en op de andere niet, ligt aan de php.ini (PHP configuratie) waarin de error_reporting van PHP staat ingesteld. Deze reseller host heeft dus een instelling waarbij zelfs notices getoond worden. Standaard worden normaal gezien alleen fatale errors getoond.

Je hebt twee mogelijkheden:

Een .htaccess in de root van je host plaatsen met daarin deze code:

php_flag display_errors Off
Zo worden de PHP errors onderdrukt, maar blijft het probleem wel.
De kleine foutjes echt oplossen. Het zou handig zijn dat je daarvoor even je PHP code hier post :)

Al spreken de foutmeldingen wel voor zich: op lijn 69 gebruik je een index die ongedefinieerd is. Dit is bv.
if ($_GET['id']) wat je dan moet vervangen door
if (isset($_GET['id']))

Bij de andere fout stuur je meerdere twee keer headers naar de browser. Een typisch voorbeeld is het feit dat je al content geëcho'ed hebt (en dus al automatisch HTML headers zijn verstuurd) en dan nog een redirect header stuurt naar de browser. Hij moet dan content serveren én een redirect doen, wat uiteraard niet samen gaat (twee verschillende type headers immers).

JanE
8 January 2008, 19:20
Jelle bedankt voor je reactie.

Omdat het script bij de ene host wel en bij de andere niet werkt dacht ik niet direct aan een fout in de code.

Hieronder staat de code die ik gebruik:


<?PHP
error_reporting(E_ALL);

$to = "eigen_mail";
$urlbedankt = "bedankt.html";
$email = trim($_POST['email']);
// Plaats op 1 regel
if (eregi("\r",$email) || eregi("\n",$email)
|| eregi("%0A",$email) || eregi("%0D",$email) ) {
exit();
}
$naam = trim($_POST['naam']);
// Plaats op 1 regel
if (eregi("\r",$naam) || eregi("\n",$naam)
|| eregi("%0A",$naam) || eregi("%0D",$naam) ) {
exit();
}
$subject = trim($_POST['subject']);
// Plaats op 1 regel
if (eregi("\r",$subject) || eregi("\n",$subject)
|| eregi("%0A",$subject) || eregi("%0D",$subject) ) {
exit();
}
$body = "Afzender: " .$_POST['naam'];
$body .= "\r\n";
$body .= "E-mailadres: " .$_POST['email'];
$body .= "\r\n";
$body .= "Betreft: " .$_POST['subject'];
$body .= "\r\n";
$body .= "\r\n";
$body .= $_POST['veld01'];
$body .= $_POST['invoer01'];
$body .= "\r\n";
$body .= $_POST['veld02'];
$body .= $_POST['invoer02'];
$body .="\r\n";
$body .= $_POST['veld03'];
$body .= $_POST['invoer03'];
$orig_path_info = "X-Orig-Path-Info: " .$_SERVER["ORIG_PATH_INFO"] ."\r\n";
$remote_addr = "X-Remote-Addr: " .$_SERVER["REMOTE_ADDR"] ."\r\n";
$xsender = "X-Sender: " .$to ."\r\n";
$xmailer = "X-Mailer: PHP/" .phpversion() ."\r\n";

if (mail( $to, $subject, $body,
"From: $naam <$email>\r\n"
.$orig_path_info .$remote_addr .$xsender .$xmailer)) {
header("Location: ". $urlbedankt);
exit;
}
else {
echo "
<br />Het bericht is niet verstuurd.
<br /><a href=\"javascript:history.back(-1)\">terug</a>
</body>
</html>
";
exit;
}

?>
?>

Hopelijk kun je mij helpen de foutjes eruit te halen.

Mvg,

Jan.

Jelle
9 January 2008, 23:20
Bovenaan staat

error_reporting(E_ALL);
die de error_reporting (http://www.php.net/error_reporting) wijzigt naar de op één na strengste foutmeldingsvariant. Verwijder dat en je zit weer op het standaard niveau.


E_ALL: All errors and warnings, as supported, except of level E_STRICT in PHP < 6.

JanE
12 January 2008, 11:19
Jelle bedankt.

Zal de code en de instellingen nog eens goed bekijken.

Een paar (kleine) wijzigingen van het script hebben de problemen helaas nog niet verholpen.

Jan.