6.2k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von coros Experte (4k Punkte)
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
[sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]

21 Antworten

0 Punkte
Beantwortet von Experte (6.4k Punkte)
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)...
0 Punkte
Beantwortet von Experte (6.4k Punkte)
@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)
0 Punkte
Beantwortet von Experte (6.4k Punkte)
edit : ein Anführungszeichen zuviel...


$usernachricht = "Hier steht die Nachricht an den User...";
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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

Du könntest eine zweite Zeile dahinterbauen


meinst.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Tausche dies
<?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:

<?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.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Dann füge hinter mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader)
noch ein Semikolon ein...sorry ;-)

also so:
mail($_POST['MAIL'], "Nachricht", $usernachricht, $AddHeader);
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Das sollte so gehen:

<?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>';
}
}
?>
...