Antworten zu häufig gestellten Homepage-Fragen
 Alle Anleitungen
Einige Anleitungen
Intern
Kostenl. Partnerlinks
[,__,] Druckversion

Hinweis: Die Website Homepage-FAQs.de befindet sich seit 2012 im Archivmodus, d.h. sie wird nicht mehr aktualisiert.
FAQS zu HP&Co.
Formmailerscripte (PHP) - 2 Beispiele mit Anleitung (eines mit Danke-Seite und eines mit "Affenformular")

Inhalte:


Hinweis: Wird ein Formmailer mit Dateianhang / Dateiupload gebraucht, dann mal in meiner Linkliste hier schauen

PHP - Formmailer mit Dateianhang (Mail Attachment) - Formularscript mit Dateiupload

A) Webspacevoraussetzungen

Der Webspace muss natürlich mitspielen, wenn ein PHP-Formmailer auf dem eigenen Webspace genutzt werden soll, also er muss PHP generell und dazu auch die PHP-Mailfunktion unterstützen.

B) PHP-Formmailerscripte
1) Formmailer von 1ngo.de >> http://www.1ngo.de/web/formmailer.html

Anmerkung: Etwa 2/3 nach unten scrollen, dort steht der komplette Code. Darüber und auch darunter gibt es Erklärungen zu den einzelnen Codeabschnitten, die auch übersprungen werden können. Dieser Formmailer verwender das Prinzip "Affenformular", d.h. bei fehlerhafter Eingabe startet das Formular zwar neu, aber die bereits gemachten Eingaben bleiben erhalten.

2) Formmailer bei selfhtml.org >> http://aktuell.de.selfhtml.org/artikel/php/form-mail/

Anmerkung: Mit Danke-Seite bei erfolgreichem Mailversand. Aber ohne "Affenformular", d.h. die gemachten Eingaben sind bei einer Fehleingabe weg.
C) Anleitung zum Ändern der Einstellungen

Beide haben oben den Bereich für Einstellungen
1) Formmailer von 1ngo.de

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'); // ggfls. weitere Pflichtfelder angeben

Anmerkungen:

1.Zeile - eigene Mailadresse eintragen!
2. und 4.Zeile bei Bedarf anpassen.
3.Zeile normalerweise so lassen.

2) Formmailer bei selfhtml.org

# An welche Adresse sollen die Mails gesendet werden?
$strEmpfaenger = 'IhrName@provider.xy';

# Welche Adresse soll als Absender angegeben werden?
# (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$strFrom       = '"Formmailer" <IhrAndererName@provider.xy>';

# Welchen Betreff sollen die Mails erhalten?
$strSubject    = 'Feedback';

# Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
# Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://www.provider.xy/IhrName/IhreSeite.htm'; 

Anmerkungen:

a) Bei diese Zeilen
$strEmpfaenger
$strFrom
$strReturnhtml
die Angaben innerhalb von ' und ' anpassen.

b) Hier
$strSubject
bei Bedarf.
D) Hinweise zu den vorgegebenen Formularfelder

1) bei 1ngo.de

a) Einzeilige Formularfelder

<p>
      <label for="Name">Ihr Name:</label>
      <input name="Name" id="Name" size="66"
       value="<?php Formular_Eingabe('Name'); ?>" />
    </p>

b) Mehrzeilige Formularfelder

p>
      <label for="Nachricht">Nachricht:</label>
      <textarea name="Nachricht" id="Nachricht" rows="5" cols="50"><?php
       Formular_Eingabe('Nachricht'); ?></textarea>
    </p>

Anmerkungen:

Innerhalb von <p>...</p> müssen alle Namen, die innerhalb von  "..." und '...' (z.B. "Nachricht" und 'Nachricht') stehen, gleich sein. Aber von Eingebefeld zu Eingabefeld unterschiedlich.

Die Angaben bei Ihr Name: und Nachricht: können beliebig angepasst werden.

Bei 
size="66" die Länge von einzeiligen sowie bei cols="50" die Länge und bei rows="5" die Höhe von mehrzeiligen Eingabefeldern festlegen.

c) Auswahllisten, Radio-Buttons und Checkboxen u.a., siehe

http://de.selfhtml.org/html/formulare/index.htm

2) bei selfhtml.org

a) Einzeilige Formularfelder

<dt>Ihr Name:</dt>
<dd><input type="text" name="Versender" /></dd>

b) Mehrzeilige Formularfelder

<dt>Bemerkungen:</dt>
<dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>

Anmerkungen:

Die Angabe bei name="..." (z.B. name="Versender") muss von Eingabefeld zu Eingabefeld sowie zu Auswahllisten, Radio-Buttons und Checkboxen unterschiedlich sein.

Die Angaben bei <dt>...</dt>  kann beliebig angepasst werden.

Bei Textarea kann ein Text (als Hinweis, Vorgabe o.ä., z.B. <textarea ...>Bemerkungen</textarea>) angegeben werden, der dann schon im Eingabefeld steht.

Bei cols="20" die Länge und bei rows="3" die Höhe von mehrzeiligen Eingabefeldern festlegen.

c) Es gibt auch noch Auswahllisten, Radio-Buttons und Checkboxen u.a., siehe

http://de.selfhtml.org/html/formulare/index.htm

E) Hinweise zu Checkboxen oder Auswahllisten mit Mehrfachauswahl

Zitat aus Selfhtml:

Wenn Sie in Ihrem Formular Checkboxen oder Auswahllisten mit Mehrfachauswahl einbauen wollen, muss der Name dieser Felder mit einem [] (Anm.: 2 eckige Klammern) enden, damit PHP weiß, dass es die Daten als Array behandeln soll. Im Beispielformular wird dies anhand der Checkboxen demonstriert.

<dt>Sie k&ouml;nnen:</dt>
<dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>


(Quelle: http://aktuell.de.selfhtml.org/artikel/php/form-mail/)

F) Anleitung zum Erweitern


1) bei 1ngo.de

Einfach den Abschnitt bei <p>...</p> kopieren und darunter einfügen.

Anmerkung: Innerhalb von <p>...</p> müssen alle Namen, die innerhalb von  "..." und '...' (z.B. "Nachricht" und 'Nachricht') stehen, gleich sein, aber von Eingebefeld zu Eingabefeld unterschiedlich.

Sonderfall Pflichtfelder:

Um auch andere Eingabefelder zu Pflichtfeldern zu machen, einfach diesen Teil des Einstellungsabschnittes erweitern, z.B. so


$Pflichtfelder = array('Nachricht','Name'); // Nachricht und Name sind Pflichtfelder

$Pflichtfelder = array('Nachricht','Name','Email'); // Nachricht, Name und Email sind Pflichtfelder

Anmerkung: Angabe aus name="..." (z.B.
name="Name") in '...' setzen und mit Komma trennen.

2) bei selfhtml.org

Einfach die Abschnitte (siehe D)2)) kopieren und darunter einfügen.

Anmerkung: Die Angabe bei name="..." (z.B. name="Versender") muss von Eingabefeld zu Eingabe feld unterschiedlich sein.

Hinweis: Bei selfhtml.org ist auch das Prinzip der Auswahllisten, Radio-Buttons und Checkboxen sehr schön zu sehen.

G) Dateiendung

Nachdem das Formular erstellt ist, kann es auf den Webspace hochgeladen werden. Als Dateiendung .php vergeben (anstatt .html), also Datei z.B. kontakt.php nennen.

Ergänzungen

H) Ingos Formmailer um Dankeseite erweitern

1) Diesen Teil vor dem Form-Tag

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

ersetzen durch

<?php
echo $meldung;
?>

2) Diesen Teil direkt vor den <Doctype...> setzen

<?php
if($Formular_abgeschickt){
if($Formular_Fehler = Formular_Check()){
$meldung='<p class="Meldung" id="Fehler">'.$Formular_Fehler.'</p>';
}else{
if(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader)){
header("Location: $strReturnhtml");
exit;
} else { $meldung='<p class="Meldung" id="Fehler">Server-Fehler !</p>'; }
}
}
?>

Anmerkung: Wenn die Fehlermeldung "Cannot modify header information - headers already sent by..." kommt, dann könnte es z.B. auch an Leerzeichen im PHP-Code liegen, die vor dem Befehl "header(...) drin sind. Nach dem Header-Befehl stören Leerzeichen nicht mehr.

3) Unterhalb von

$Pflichtfelder = array('Nachricht'); // ggfls. weitere Pflichtfelder angeben

noch diesen Teil (aus dem PHP-Formmailer bei selfhtml.org) dazusetzen

# Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
# Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://www.provider.xy/IhrName/IhreSeite.htm';

Anmerkung: Hier die komplette HTTP-Adresse zur Dankeseite eintragen.

I) Formmailer in bestehende eigene Formulare einbauen

1) 1ngo.de

a) Den 1.PHP-Abschnitt

<?php
define ('MAILTO', "mail@example.org"); // Empfänger hier eintragen
...
...gekürzt...
...
?>

ganz an den Anfang (vor Doctype) setzen und...

b) ...den 2.Abschnitt

<?php
if($Formular_abgeschickt) {
...gekürzt...
?>

vor den Form-Tag <form... setzen.

c) Den Form-Tag so ändern


<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"
 enctype="multipart/form-data" accept-charset="<?php echo CHARSET; ?>">

d)
Nun noch die eigenen Eingabefelder um den PHP-Code (Rot markiert von <php...bis...?>) erweitern, dabei müssen die Angaben bei name="..." (rot markiert) auch im PHP-Code gleich sein, siehe Schema


<input name="Name" id="Name" size="66" value="<?php Formular_Eingabe('Name'); ?>" />

<textarea name="Nachricht" id="Nachricht" rows="5" cols="50"><?php Formular_Eingabe('Nachricht'); ?></textarea>

e) Zum Schluss die eigene Formulardatei mit der Endung .php speichern.

2) selfhtml.org

a) Den PHP-Abschnitt

<?php

### Konfiguration ###

# Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
...
...gekürzt...
...
?>

ganz an den Anfang setzen.

b) Den Form-Tag ändern

<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">


J) Formmailer für Fragen, Umfragen u.ä.: (Nur Mailversand, keine Verarbeitung / Auswertung der Eingaben)

Formmailer können nicht nur als normales Kontaktformular genutzt werden. Auch andere Dinge sind denkbar, bei denen Besucher Texte 
dem Seitenbetreiber per Mail zuschicken sollen, z.B. Antworten auf Umfragen u.ä., wenn es keine Verarbeitung der Eingabe und Anzeige auf der Internetseite geben soll.

1) bei 1ngo.de

a) Einzeilige Formularfelder

<p>
      <label for="Frage1">Frage 1: Wie wieviele Planeten hat unser Sonnensystem?</label>
      <input name="Frage1" id="Frage1" size="66"
       value="<?php Formular_Eingabe('Frage1'); ?>" />
    </p>
<p>
      <label for="Frage2">Frage 2: Wie lange braucht das Licht von der Sonne zur Erde?</label>
      <input name="Frage2" id="Frage2" size="66"
       value="<?php Formular_Eingabe('Frage2'); ?>" />
    </p>
<p>
      <label for="Frage3">Frage 3: Wie heisst der äusserste Planet unseres Sonnensystems?</label>
      <input name="Frage3" id="Frage3" size="66"
       value="<?php Formular_Eingabe('Frage3'); ?>" />
    </p>

Sonderfall Pflichtfelder:

Um Eingabefelder zu Pflichtfeldern zu machen, einfach diesen Teil des Einstellungsabschnittes erweitern / ändern, z.B. so


$Pflichtfelder = array('Frage1','Frage2','Frage3'); // Frage 1, 2 und 3 sind Pflichtfelder

Anmerkung: Angabe aus name="..." (z.B. name="Frage1") in '...' setzen und mit Komma trennen.

2) bei selfhtml.org


a) Einzeilige Formularfelder

<dt>Frage 1: Wie wieviele Planeten hat unser Sonnensystem?</dt>
<dd><input type="text" name="Frage1" /></dd>

<dt>Frage 2: Wie lange braucht das Licht von der Sonne zur Erde?</dt>
<dd><input type="text" name="Frage2" /></dd>

<dt>Frage 3: Wie heisst der äusserste Planet unseres Sonnensystems?</dt>
<dd><input type="text" name="Frage3" /></dd>

Anmerkung:
Bei name="..." (z.B.
name="Frage1") keine Leerzeichen verwenden.

K) Erklärungen zum Form-Tag

1) 1ngo.de

Form-Tag:

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"
 enctype="multipart/form-data" accept-charset="<?php echo CHARSET; ?>">

und dazu eine einfache Erklärung der einzelnen Bestandteile:

a) Dieser PHP-Teil

<?php echo $_SERVER['SCRIPT_NAME']; ?>

ermittelt den Dateinamen der Datei, in der das Formmailerscript ist, damit man das Formmailerscript sozusagen unter beliebigen Dateinamen (mit der Endung .php) speichern bzw. diesen Dateinamen einfach ändern kann.

Ansonsten müsste man bei action="..." den Dateinamen der Datei angeben, in der das Formmailerscript ist.

Der Browser sendet die Formulareingaben an die dort angegebene Datei, also das Formmailerscript, wo sie dann verarbeitet und als Mail verschickt werden.

b) Die Formulareingaben werden mit

method="post"

versendet, also vereinfacht gesagt Daten aus einem Formular im Gegensatz zu "get", bei dem Daten mit der Adresse gesendet werden.

c) Der Zusatz

enctype="multipart/form-data"

dient dazu, dass bei Bedarf auch ein Datei-Upload über das Formular gemacht werden kann.

d) Bei

accept-charset="..."

wird angeben, mit welcher Zeichenkodierung der Browser die eingegebenen Formulardaten an den Web-Server senden soll. Und

accept-charset="<?php echo CHARSET; ?>"

bedeutet, dass hier die bei

define ('CHARSET', "ISO-8859-15"); // Zeichenkodierung ggfls. anpassen

definierte Zeichenkodierung angewendet werden soll.


L) Probleme

Damit die Mail ankommt, muss...

...der Webspace neben PHP selbst auch den PHP-Befehl mail(...) unterstützen

...die eigene Mailadresse fehlerfrei drin stehen

...evtl. im Spamordner gesucht werden, da scriptgenerierte Mails leichter dort landen


M) Besonderheiten bei bestimmten Webspaces

A) Goneo

mal hier lesen >> Mailversand über den goneo Webserver mit PHP

Zitat:
Wenn Sie z.B. in Ihrem Script oder Ihrer Anwendung als Absender "mail@ihre-domain-bei-goneo.de" angegeben haben, dann muss diese E-Mail Adresse oder Alias bei goneo in Ihrem Kundencenter auch angelegt sein. Ansonsten wird die Mail von unserem Mailsystem abgelehnt und kann nicht zugestellt werden.

wichtig ist der 5.Parameter bei mail(...), siehe -f mit der eigenen Goneo-Mail-Andresse

1) 1ngo.de

a) Hier (rot markiert) eine Goneo-Mailadresse eintragen

define ('MAILTO', "muss-existieren@ihre-domain-bei-goneo.de"); // Empfänger hier eintragen

b) Die Zeile mit elseif(@mail(...)) anpassen und zwar so

elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader, "f- ".MAILTO))

2) bei selfhtml.org

a) Hier (rot markiert) eine Goneo-Mailadresse eintragen

# An welche Adresse sollen die Mails gesendet werden?
$strEmpfaenger = 'muss-existieren@ihre-domain-bei-goneo.de';

b) Die Zeile mit mail(...) anpassen und zwar so

mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom, "-f ".$strEmpfaenger)


Anleitung (C) 2009, 2010 Daniel Wurst - http://www.homepage-faqs.de