online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon coros vom 15.09.2022, 10:01 Options

Lösung

Bestätigungsmail aus PHP-Script an Mailadresse aus einem E-Mailfeld senden

Hallo an Alle!

Ich habe im Netz einen Code gefunden, mit dem ein User mir von meiner Homepage aus eine Nachricht zukommen lassen kann. Dieser funktioniert auch super. Nun möchte ich aber noch, dass der User an die Mailadresse, die er in einem Pflichtfeld „Mail“ eingetragen hat, eine Bestätigungsmail mit der Anrede des Namens, den er im Feld „Name“ eingetragen hat und dann mit einem vordefinierten Text zugesandt bekommt. Allerdings fehlen mir hierzu die entsprechenden PHP- Kenntnisse und daher baue ich auf Euch. Kann mir jemand sagen kann, was ich wo noch ergänzen muss, damit obig beschriebenes beim Betätigen des Buttons ausgeführt wird?

Nachfolgend mal der PHP-Code:
<?php
define ('MAILTO', "mail@example.org"); // Empfänger hier eintragen
define ('MAILFROM', "Kontaktformular"); // ggfls. Absender hier eintragen
define ('CHARSET', "ISO-8859-15"); // Zeichenkodierung ggfls. anpassen
$Pflichtfelder = array('Nachricht', 'Mail'); // ggfls. weitere Pflichtfelder angeben

$AddHeader = 'Content-Type: text/plain; charset='.CHARSET;
if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;

if($Formular_abgeschickt = !empty($_POST)) {
  $Formular_leer = true; set_magic_quotes_runtime(0);
  $_POST = array_map('Formular_Daten', $_POST);
}
function Formular_Daten($val) {
  global $Formular_leer;
  if(is_array($val)) return array_map('Formular_Daten', $val);
  if(get_magic_quotes_gpc()) $val = stripslashes($val);
  if($val = trim($val)) $Formular_leer = false;
  return $val;
}

function Formular_Pflichtfelder() {
  global $Pflichtfelder;
  $Fehler = '';
  foreach ($Pflichtfelder as $Feld) {
    $key = str_replace(' ','_',$Feld);
    if(!(isset($_POST[$key]) && trim($_POST[$key]))) {
      if($Fehler) $Fehler .= '<br />';
      $Fehler .= 'Pflichtfeld "' . $Feld . '" nicht ausgefüllt.';
    }
  }
  return $Fehler;
}

function Formular_neu($log='.htPOSTdata.txt') {
  if(file_exists($log) && is_readable($log)
   && file_get_contents($log) == print_r($_POST,true))
  return false;
  if($handle=@fopen($log, 'w')) {
    fwrite($handle, print_r($_POST,true)); fclose($handle);
  }
  return true;
}

function Formular_Check() {
  global $Formular_leer;
  if($Formular_leer) $Fehler = 'Keine Daten eingetragen.';
  elseif(!$Fehler = Formular_Pflichtfelder()) {
    if(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.';
  }
  return $Fehler;
}

function Formular_Eingabe($Feldname, $def='') {
  if(!empty($_POST[$Feldname])) echo htmlspecialchars($_POST[$Feldname]);
  else echo $def;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
  <title>Kontaktformular</title>
  <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>" />
</head>
<body>
<h1>Kontakt</h1>

<?php
if($Formular_abgeschickt) {
  if($Formular_Fehler = Formular_Check())
    echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';
  elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';
  else echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';
}
?>

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"
 enctype="multipart/form-data" accept-charset="<?php echo CHARSET; ?>">
  <fieldset><legend>Kontaktformular</legend>
    <p>
      <label for="Name">Name:</label>
      <input name="Name" id="Name" size="66"
       value="<?php Formular_Eingabe('Name'); ?>" />
    </p>
    <p>
      <label for="Mail">Mail:</label>
      <input name="Mail" id="Mail" size="66"
       value="<?php Formular_Eingabe('Mail'); ?>" />
    </p>
	<p>
      &nbsp;</p>
    <p>
      <label for="Nachricht">Nachricht:</label>
      <textarea name="Nachricht" id="Nachricht" rows="5" cols="50"><?php
       Formular_Eingabe('Nachricht'); ?></textarea>
    </p>
    <p><input type="submit" value="abschicken" /></p>
  </fieldset>
</form>

</body>
</html>
Ich hoffe auf viel Unterstützung und danke euch schon mal vorab für die Hilfe.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.


Antwort schreiben

Antwort 1 von supporter2010 vom 15.09.2022, 11:28 Options

Ganz schön umfangreich...aber ohne Dein Skript jetzt haarklein zu analysieren sendet diese Zeile die Email ab:

@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader)

Du könntest eine zweite Zeile dahinterbauen die so modifiziert ist, dass nicht Du sondern der Formularsbschicker eine mail bekommt. Dazu müsstest Du MAILTO in die Empfängeradresse umwandeln. Also ungefähr so:

@mail($_POST['MAIL'], "Nachricht", print_r($_POST,true), $AddHeader)

($_POST['MAIL'] enthält die im Formular angegebene Emailadresse)...

Antwort 2 von supporter2010 vom 15.09.2022, 11:44 Options

@mail($_POST['MAIL'], "Nachricht", print_r($_POST,true), $AddHeader)

Du musst naytürlich noch das fettgedruckte verändern,sonst bekommt der User die gleiche Nachricht wie Du bzw der MAILTO-Empfänger.

Also zb. so:

$usernachricht = "" Hier steht die Nachricht an den User...";

@mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader)

Antwort 3 von supporter2010 vom 15.09.2022, 11:45 Options

edit : ein Anführungszeichen zuviel...


$usernachricht = "Hier steht die Nachricht an den User...";

Antwort 4 von coros vom 15.09.2022, 11:46 Options

Hallo supporter2010,

danke Dir für Deine Antwort. Ich werde mich dann mal an Deinem Vorschlag versuchen. Melde mich dann mit entweder weiteren Nachfragen oder aber mit der Fertigmeldung.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 5 von coros vom 15.09.2022, 12:08 Options

Hallo Hallo supporter2010,

also ich habe es nun mal versucht. Ich bekomme es aber nur hin, dass die Mail entweder an mich oder an den User aus dem Feld Mail versandt wird.
Könntest Du mir mal die Kombination der Zeile

elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
und

@mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader) 
hier aufführen. ich komme nämlich nicht so ganz damit klar, was Du mit

Zitat:
Du könntest eine zweite Zeile dahinterbauen


meinst.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von supporter2010 vom 15.09.2022, 12:16 Options

Tausche dies
Zitat:
<?php
if($Formular_abgeschickt) {
  if($Formular_Fehler = Formular_Check())
    echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';
  elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';
  else echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';
}
?>


gegen folgendes aus:

Zitat:
<?php
if($Formular_abgeschickt) 
{
  if($Formular_Fehler = Formular_Check())
  {
      echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';
  }
    elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
  {
    mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader)
    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';
  }
    else
  {
    echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';
  }
}
?>


so zb.

Antwort 7 von coros vom 15.09.2022, 12:26 Options

Hallo supporter2010,

wenn ich Deinen Code aus AW6 austausche erhalte ich den Fehler

Parse error: syntax error, unexpected T_ECHO in ......

in der Zeile

 echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 8 von supporter2010 vom 15.09.2022, 12:34 OptionsLösung

Lösung
Dann füge hinter mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader)
noch ein Semikolon ein...sorry ;-)

also so:
mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader);

Antwort 9 von coros vom 15.09.2022, 13:03 Options

Hallo ,

danke ir für die Hilfe. Es werden nun ohne Fehlermeldungen Mails an mich und den User versandt. Prima!!

Eine Frage hätte ich nun noch zu dem Text der Mail an den User. Wie kann ich folgendes realisieren:

$usernachricht = "Vielen Dank für Ihr Interesse
es wurden mir folgende Daten übermittelt:
>hier nun untereinander die Daten aus den Feldern<
Name
Mail
Nachricht

>Hier dann wieder statischen Text<
Mit freundliche Grüßen
Oliver .........";

Könntest Du mir da auch noch kurz auf die Sprüng helfen?

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 10 von supporter2010 vom 15.09.2022, 13:13 Options

Das sollte so gehen:
Zitat:

<?php
if($Formular_abgeschickt) 
{
  if($Formular_Fehler = Formular_Check())
  {
	echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';
  }
  elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
  {

$usernachricht =<<<_USERMAIL_
Vielen Dank für Ihr Interesse
es wurden mir folgende Daten übermittelt:

$_POST['Name']
$_POST['Mail']
$_POST['Nachricht']


Mit freundliche Grüßen
Oliver 
_USERMAIL_;

    mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader)
    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';
  }
   else
  {
    echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';
  }
}
?>

Antwort 11 von supporter2010 vom 15.09.2022, 13:14 Options

verdammt... das Semikolon hinter Zeile 9 von unten nicht vergessen!

Antwort 12 von coros vom 15.09.2022, 13:31 Options

Hallo supporter2010,

danke Dir für Deine Antwort. Wenn ich den Code aus der letzten Antwort einfüge erhalte ich die Fehlermeldung

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING .......

und es betriefft die Zeile

$_POST['Name']

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 13 von supporter2010 vom 15.09.2022, 13:56 Options

Habs fast befürchtet..

dann probiers mal so:

Zitat:


<?php
if($Formular_abgeschickt) 
{
  if($Formular_Fehler = Formular_Check())
  {
    echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';
  }
  elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))
  {

        $usernachricht =
        "Vielen Dank für Ihr Interesse!\n
        Es wurden mir folgende Daten übermittelt:\n
        \n
        $_POST['Name']\n
        $_POST['Mail']\n
        $_POST['Nachricht']\n
        \n
        \n
        Mit freundliche Grüßen\n
        Oliver ";

    mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader);
    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';
  }
   else
  {
    echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';
  }
}
?>


Auf die Art und Weise wie in A10 soll die Formatierung beibehalten werden, das funktioniert auch manchmal, ichweiss allerdings nicht warum nur manchmal.
Bei der Variante hier soll \n für eine neue Zeile sorgen, Bin noch nicht sicher obs funktioniert, da mein mailserver gerade rumzickt... wenn Du \n weglässt geht es zwar, aber der Text wird wild in der email verstreut...

probiers mal aus...

Antwort 14 von coros vom 15.09.2022, 14:12 Options

Hallo ,

auch dann erhalte ich die Fehlermeldung

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING .....

und zwar solange, wie ich

$_POST['Name']\n
$_POST['Mail']\n
$_POST['Nachricht']\n
in dem Code belasse.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 15 von supporter2010 vom 15.09.2022, 14:22 Options

Okay...

Das funktioniert nicht mit $_POST['Name']

Das schon:

$_POST[Name]
$_POST[Mail]
$_POST[Nachricht]

(ohne infache Anführungszeichen in den eckigen Klammern).

Was auch nicht funktioniert und sich nur auf den Quelltext auswirkt ist "\n"

Deshalb probiere nochmal A10, nur dass Du

$_POST['Name'] in $_POST[Name]
$_POST['Mail'] in $_POST[Mail] und
$_POST['Nachricht'] in $_POST[Nachricht] änderst...

Antwort 16 von coros vom 15.09.2022, 14:31 Options

Hallo supporter2010,

jep, so funktioniert's. Danke Dir für die geduldige Hilfe.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 17 von supporter2010 vom 15.09.2022, 14:34 Options

Na also... war ja ne schwere Zangengeburt...lerne halt auch noch...;-)

Antwort 18 von supporter2010 vom 15.09.2022, 15:55 Options

Nur zur Info, falls es jemanden interessiert, der noch nicht dahinter gekommen sein sollte:

Dieses Konstrukt mit "<<<" wird Heredoc-Syntax genannt.
Beispiel von oben:
Zitat:

$usernachricht =<<<_USERMAIL_
Vielen Dank für Ihr Interesse
es wurden mir folgende Daten übermittelt:

$_POST['Name']
$_POST['Mail']
$_POST['Nachricht']


Mit freundliche Grüßen
Oliver
_USERMAIL_;


Dabei wird der eigentliche String zwischen zwei gleichlautenden Bezeichnern platziert.
Hier im Beispiel ist der Bezeichner "_USERMAIL_".
Wenn man dann der Variablen den String zuweist und dann wie hier in den Email-Body schreibt, dann werden auch die Leerzeilen und Zeilenumbrüche in die Email übernommen.
Dazu sollte aber der Text-String nicht eingerückt werden, sonst siehts schlimm aus.

Wichtig: Der abschliessende Bezeichner (hier das zweite "_USERMAIL_") muss alleine und ganz vorne (also nicht eingerückt) in einer Zeile stehen, sonst funktioniert es nicht.
Bei mir war das Problem, dass ich zwischen dem abschliessenden Bezeichner und dem folgenden Semikolon ein Leerzeichen hatte und es somit nicht funktionierte. Der Bezeichner muss übrigens nicht mit _Unterstrichen_ geschrieben werden.

Info Ende.

Antwort 19 von supporter2010 vom 15.09.2022, 15:57 Options

Oh Mann...
Info Edit:

Die einfachen Anführungszeichen in den $_POST-Feldern sind herauszulöschen.

KAFFEEPAUSE!!!

Antwort 20 von coros vom 15.09.2022, 18:42 Options

Hallo supporter2010,

danke Dir nochmal für die abschließende Info. Ich habe das nun mal getestet und es funktioniert nun auch mit dem Code aus AW18. Es lag mit Sicherheit an den Hochkommas in dem $_POST-Anweisungen.

Schönen Abend noch.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Ähnliche Themen

PHP-script killt One.com Server
wurzelpeter  25.03.2009 - 497 Hits - 7 Antworten

unbek. PHP script und seine funktion
spectral  05.05.2009 - 384 Hits - 6 Antworten

(PHP) einen PHP-Parser mit PHP programmieren
skribbtkiddie  17.07.2009 - 354 Hits - 1 Antwort

PHP-Script läuft nicht - Denkfehler
CoderWorm  26.09.2009 - 265 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026