Der Martin: Per Checkbox Kopie an Absender - Problem

Beitrag lesen

Hallo,

Parse error: parse error, unexpected T_VARIABLE in /homepages/36/d190080444/htdocs/Kontakt3.php on line 57
Das ist die Zeile, wo der erste additional header steht (siehe unten).

welche genau? Ich blick bei deinem Gewurschtl nämlich nicht mehr durch.

elseif(str_replace($from_name)==";". ",". "cc". "bcc") $err_text.="Bitte gib Deinen Namen <b>ohne Komma</b> an.<br>";

Spätestens hier müsste der PHP-Parser schon ganz böse schimpfen, wenn er nicht schon vorher wegen des erwähnten Parse Error abgebrochen hätte. Die Funktion str_replace() erwartet mindestens drei Paramter! Was du von str_replace() erwartest, wenn du nur einen Parameter übergibst, ist mir schleierhaft; ebenso, warum du diesen ominösen Rückgabewert dann mit dem String ";,ccbcc" vergleichen willst.

elseif(str_replace($from_mail)==";". ",". "cc". "bcc") $err_text.="Bitte gib nur <b>eine</b> E-Mail-Adresse an.<br>";

Siehe oben.

if(strlen($mail_text)>1000) {
  $mail_text=substr($mail_text,0,1000)."... (Text wurde gek&uuml;rzt!)";

Das &uuml; macht sich nachher bestimmt prima in der fertigen Nachricht. Immerhin willst du die Nachricht als text/plain verschicken, was ja auch vernünftig ist.

$from_name=str_replace(chr(34),"''",$from_name);
$mail_subject=str_replace(chr(34),"''",$mail_subject);
$from_name=stripslashes($from_name);
$from_mail=stripslashes($from_mail);
$mail_subject=stripslashes($mail_subject);
$mail_text=stripslashes($mail_text);

Über Sinn und Unsinn dieser Anweisungen lässt sich streiten - ich halte sie für Unsinn.

$header = '';
    if(!empty($from_name)) $header .= "From: $from_name <$from_mail>\n" . str_replace(";", ",", "cc", "bcc") . "\n";
    if(!empty($from_mail)) $header .= "Reply-to: $from_mail\n" . str_replace(";", ",", "cc", "bcc") . "\n";

Du hast doch weiter oben schon ausgeschlossen, dass $from_name und $from_mail leere Strings sind. Das bräuchtest du hier nicht nochmal zu prüfen. Abgesehen davon hast du nochmal dieselbe falsche Verwendung von str_replace() drin. Und der korekte Zeilenumbruch in Mail-Headern ist \r\n.
Da du $from_name und $from_mail nicht ausreichend überprüft hast, kann ich hier mühelos zusätzliche Headerzeilen einschleusen und die Nachricht damit an Hunderte von Empfängern verschicken.

$header.="X-Mailer: PHP-FormMailer\n";

Wenn du diese Angabe für wichtig hältst ... ;-)

$header.="Content-Type: text/plain";
  $mail_date=gmdate("D, d M Y H:i:s")." +0000";

Wo verwendest du $mail_date wieder? Ah, gar nicht. Okay, das ist zumindest nicht schädlich. ;-)

$send=0;
  if(@mail($mail_to,$mail_subject,$mail_text,$header[ 1]))

Hoppla - eben war $header noch ein String, wieso ist es jetzt plötzlich ein Array?

if($_POST['kopie'] == "1");
  {
  $text="Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\nFolgende Nachricht ist bei mir eingegangen:\n---------------------------------------------\nIhr Name:       $from_name\nIhre Email:     $from_mail\nIhr Betreff:    $mail_subject\nNachricht: $mail_text\n---------------------------------------------\nSo bald ich kann, werde ich sie beantworten.\n\nMit freundlichem Gruß,\nBernhard"

Hier fehlt das abschließende Semikolon. Ist das die Stelle, die du eingangs gemeint hast (der Parse Error in Zeile 57)?

$additional_headers="From: Bernhard jesus.en.el.centro@web.de\r\n";
  $additional_headers.="Reply-To: jesus.en.el.centro@web.de\r\n";
  $additional_headers.="X-Mailer: PHP-FormMailer\n";
  $additional_headers.="Content-Type: text/plain";
  mail($from_mail, "Re: $mail_subject", $text, $additional_headers)

Alles in allem scheint mir, dass dir auch noch eine Menge Grundlagenwissen fehlt, und dass du eher zufällig zu funktionierenden Scriptlösungen kommst. Warum gibst du dir nicht einen Ruck und beschäftigst dich mal ein wenig mit den Basics, bevor du dich an anspruchsvolle Aufgaben heranwagst?

So long,
 Martin

--
Der Mensch denkt, Gott lenkt.
Der Mensch dachte, Gott lachte.