PHP-Formmailer

Ich sehe ungefähr 3 Mal pro Tag die Frage nach einem PHP-Formmailer. Deswegen hier die Info wie es geht.

Was ist wichtig für HTML?:
Du fängst ja immer an mit einem Tag an, gefolgt von einem Tag.
Nun der erste wichtig Teil:
Der input MUSS einen name=„“ und eine id=„“ haben.
Beispiel:
[HTML][/HTML]
required fügst du ein, wenn man das Feld ausfüllen MUSS (spart dir java-script).

Beispiel:
[HTML]

[/HTML] Wenn du willst kannst du deine Eingabefelder mit CSS verschönern. Nun zum wichtigen Teil. Dem PHP. Ich poste dir jetzt einen kompletten Code. Aber ich würde mir wünschen, dass du es in meiner folgenden Erklärung verstehst. Hier der PHP-Code:

[PHP]<?php
{

$name = $_POST[‚name‘];
$email = $_POST[‚email‘];
$to = ‚deine@e-mail.de‘;
$subject = „Support-Anfrage“;
$message = $_POST[‚message‘];
$betreff = $_POST[‚betreff‘];
$urlDankeSeite = ‚HIER KOMMT DEIN CODE IN HTML REIN, auf welche der Nutzer nach dem klicken geleitet wird‘;

$body = ’
Name: ‚.$name.‘

E-Mail: ‚.$email.‘


Nachricht: ‚.$message.‘

';

$headers = „From: „.$name.“ <“.$email.„>\r\n“;
$headers .= „Reply-To: „.$email.“\r\n“;
$headers .= „Content-type: text/html; charset=utf-8“;

$send = mail($to, $subject, $body, $headers);

if ($send) {
die($urlDankeSeite);
}
else {
echo ‚Ein Fehler ist aufgetreten!‘;
}
exit;
}
?>[/PHP]

So wir fangen oben an.
[PHP]$name = $_POST[‚name‘];
$email = $_POST[‚email‘];
$to = ‚deine@e-mail.de‘;
$subject = „Support-Anfrage“;
$message = $_POST[‚message‘];
$betreff = $_POST[‚betreff‘];
$unternehmen = $_POST[‚unternehmen‘];[/PHP]

Du siehst schon, warum wir die IDs aus dem html code brauchen.
Denn wir legen ja einen Wert für $irgendwas fest (das irgendwas muss nicht die ID aus dem html sein)
[PHP]$irgendwas = …[/PHP]
nun ziehen wir uns die ID aus dem html-code, indem wir Array $POST[‚HTML-ID‘] anwenden:
[PHP]$irgendwas = $POST
[‚name‘][/PHP]

das machen wir nun für jede ID in unserem Form.
[PHP]$name = $_POST[‚name‘];
$email = $_POST[‚email‘];
$to = ‚deine@e-mail.de‘;
$subject = „Support-Anfrage“;
$message = $_POST[‚message‘];
$betreff = $_POST[‚betreff‘];[/PHP]

Dir müsste aufgefallen sein, dass wir nicht nur dir IDs aus dem HTML als $… stehen haben.
Wir haben nun noch 2 weitere $… stehen.
[PHP]$to = ‚deine@e-mail.de‘;
$subject = „Support-Anfrage“;[/PHP]
das $to habe ich als beispiel für den Empfänger des Forms genommen. Du kannst es aber beliebig nennen.
Also geben wir $to direkt einen festen Wert. Nämlich deine E-Mail.

$Subject habe ich als Betreff genommen. Diesen Wert kannst du auch umbenennen.
WICHTIG:
$Subject hat in diesem Beispiel einen festen Wert. Du kannst ihn allerdings auch nicht fest machen, sondern das $Subject wieder durch eine ID im html Code eingeben lassen:
[HTML] [/HTML]
[PHP]$subject = $_POST[‚subject‘];[/PHP]

Nächster Teil:
[PHP]$urlDankeSeite = ‚HIER KOMMT DEIN CODE IN HTML REIN, auf welche der Nutzer nach dem klicken geleitet wird‘;

$body = ’
Name: ‚.$name.‘

E-Mail: ‚.$email.‘


Nachricht: ‚.$message.‘

';[/PHP]
Als erstes gucken wir uns die $urlDankeSeite an:
Es ist ein fest angelegter Wert, auf den der Nutzer nach dem klicken des Submit-buttons weitergeleitet wird.
WICHTIG:
Das kann auch in html geschrieben werden. Also zum Beispiel:
[PHP]$urlDankeSeite = ’

Das ist die Seite '; [/PHP]

Der $body =‚‘ ist, was in deiner E-Mail die DU bekommst drin steht.
[PHP]$body = ’
Name: ‚.$name.‘

E-Mail: ‚.$email.‘


Nachricht: ‚.$message.‘

';[/PHP]
Also in deiner E-Mail die du bekommst, steht dann die Eingabe des input-felds mit der ID:
name, email, message (im HTML Code).
Wenn du das $Subject auch haben willst, einfach den Code ergänzen:
[PHP]$body = ’
Name: ‚.$name.‘

E-Mail: ‚.$email.‘


Nachricht: ‚.$message.‘

Betreff: ‚.$Subject.‘

‚;[/PHP]
Man fügt eine Variable in einer Variable folgendermaßen hinzu:
[PHP]
$irgendwas =‘
‚.$blabla.‘
‚;
[/PHP]
Also ganz normal $irgendwas=‘';
Dann fügt man in die Klammern
‚.$blabla.‘ ein un fertig.

Nächster Teil:
[PHP]$headers = „From: „.$name.“ <“.$email.„>\r\n“;
$headers .= „Reply-To: „.$email.“\r\n“;
$headers .= „Content-type: text/html; charset=utf-8“;[/PHP]
Hier werden einfache Header gesetzt, um dem MUA (mail user agent, z.B. ein E-Mail-Programm) die From- und die Reply-To-Adressen mitzuteilen. (+die utf=8 encodierung) Der Teil ist wichtig! Ansonsten funktioniert es nicht.

Nächster und letzter Teil:
[PHP]$send = mail($to, $subject, $body, $headers);

if ($send) {
die($urlDankeSeite);
}
else {
echo ‚Ein Fehler ist aufgetreten!‘;
}
exit;
}[/PHP]
So nun die nächste Variable. $send kann auch umbenannt werden.
Aber der wichtige Teil ist mail();
mail steht im PHP für das senden einer e-mail.
Kann also auch nicht anders heißen.
In die Klammer von mail schreibst du nun rein, welche Variablen geschickt werden sollen.
Wir wollen den Empfänger ($to), den Betreff ($subject), den Körper der E-Mail ($body) und die $headers.

[PHP]if ($send) {
die($urlDankeSeite);
}
else {
echo ‚Ein Fehler ist aufgetreten!‘;
}
exit;[/PHP]

also die if und else Befehle sagen nur, dass wenn $send ausgeführt wurde, soll er auf die $urlDankeSeite weitergeleitet werden.

WICHTIG: die (); kann nicht geändert werden, da ‚die‘ ein fester Befehl steht für:
Druckt eine Nachricht und verlässt das aktuelle Skript.
Also if ($send) ist ausgeführt, dann {die($urlDankeSeite};

Wenn nicht (else), dann {echo’Ein Fehler ist aufgetreten!';}

am ende das exit; nicht vergessen.

Das wirst du auch weiterhin sehen, denn für viele scheint die Suchfunktion in Foren nicht bekannt zu sein und google scheint auch nicht jeder füttern zu können.

Leider geht das nur oberflächlich, du hast da einige Macken drin. Nur mal das, was mir auf die Schnelle aufgefallen ist:

Falsch, die ID muss nicht sein.

Style-Angaben im HTML-Code ist nicht dein Ernst, oder?

Das erspart aber never ever die Überprüfung per PHP

Der ist leider nicht komplett, keinerlei Überprüfungen drin

Was soll die Klammer da?

Wie schon erwähnt, keinerlei Überprüfung, ob alle Pflichtfelder wirklich befüllt sind und auch nicht, ob das Script eventuell per URL aufgerufen wurde.

Sehr schlecht. Damit drücke ich dann 5 mal die F5 Taste und dann hast du 5 Mails. Eine Weiterleitung auf eine Dankes-Seite ist deutlich sinnvoller.

Auf die mail()-Funktion sollte man besser verzichten und besser eine Mailer-Klasse w.z.B. den phpMailer einsetzen.

Alles in allem würde ich dieses Script niemandem empfehlen!

Ich lasse mich immer eines besseren Belehren :wink:
2 Sachen allerdings zum Anmerken:

Ja mein ernst, da dass hier:
[HTML][/HTML]
im Beispiel deutlich kürzer war, als das:
[HTML]
input {
float: right;
}

[/HTML]

  1. Die Klammer hab ich übersehen

Aber ja, ich stimme dir zu.
Du hast ja offensichtlich mehr Ahnung (und das meine ich ohne Ironie) als ich.
Könntest du dann vllt. mal zeigen wie der beste Weg ist?

Ob meine Version unbedingt der beste Weg ist, will ich nicht behaupten, kann dir aber gerne zeigen, wie ich soetwas mache, nur nicht heute, muss jetzt erst andere Dinge erledigen. Morgen im Laufe des Tages kann ich aber mal ein Muster posten.

Es gibt doch schon reichlich Tutorials zu diesem Thema

Ich gebe dir Recht - es gibt viele Anleitungen, die Schritt für Schritt das Zusammensetzen eines Kontaktformulars und das Zusammenspiel mit PHP auflisten aber ich kenne nicht ein Komplett-Tutorial, in dem wirklich mal Alles Schritt für Schritt erklärt wird (welche Bestandteile habe ich und was genau machen die) - weder kostenfrei noch kostenpflichtig.

nun ziehen wir uns die ID aus dem html-code, indem wir Array $_POST[‚HTML-ID‘] anwenden:
…der PHP-Beginner fragt sich an der Stelle, WAS GENAU mit „array $_POST…“ passiert. Bei Nachfragen wird in vielen Tutorials dann auf andere Quellen verwiesen - was einen Anfänger der sich versucht Schritt für Schritt einzulesen dann (grade auf dem Gebiet) komplett verwirren kann.

Trotzdem ein gut gemeinter Versuch von Aaron3219!

Vielleicht kommt nu.tella ja noch dazu, seine Version zu posten…

Wie der Zufall es so will, habe ich vor kurzem erst noch ein einfaches Beispiel gepostet:

https://www.html.de/threads/formular-script.57798/#post-390102

Keine Ahnung, ob eine Version von nu.tella besser oder schlechter sein wird, man wird sehen, wenn man was von ihr/ihm hört

Naja nu.tella meinte ja vor allem, dass ich keine Abfragen gemacht habe (also ob die Felder z.B leer sind oder ob die mail wirklich verschickt wurde). Aber m.scatello hat ja schon eins gepostet.
Wenn auch ohne Schritt für Schritt Anleitung

Habe ich in dem Beispiel auch nicht gemacht, aber ein trim und ein isEmpty einzubauen, sollte ja kein Problem sein.

Was will man da auch für eine großartige Anleitung schreiben? Mein Beispiel ist auf das minimum reduziert und so schwer zu lesen ist der Quellcode ja nicht. Außerdem gibt es je nach Mail-Account unterschiedliche Einstellungen bzgl. Port und SSL, das muss jeder für sich selber herausfinden.

Ich habe mich darauf bezogen. Er meinte ja, es war gut eine Schritt für Schritt-Anleitung zu haben, um zu wissen was alles genau macht und warum es da steht. Die hat dein Beispiel nun mal nicht. Ist aber keine Kritik an dich gewesen.