Individuelles Kontaktformular mit Captcha in PHP

Kontaktformulare sind das Mittel der Wahl, um es dem Besucher besonders leicht zu machen, direkt mit dem Webmaster zu kommunizieren.

Doch wer sich nicht vertiefte PHP-Kenntnisse, mit Tutorials wie diesem, aneignen möchte, hat ein Problem: Wie soll nun ein Kontaktformular realisiert werden?

In diesem Beitrag biete ich dafür die Lösung. Hier kannst Du mein Skript downloaden, welches Dir mehrere Möglichkeiten bietet. Du kannst selber Pflichtfelder festlegen und selbst entscheiden, welche Felder es überhaupt geben soll.

Außerdem gibt es auf dieser Seite sowohl ein Kontaktformular-Skript mit Captcha als auch eines ohne. Es kann also ausgewählt werden, ob Du mit dem Captcha zusätzliche Sicherheit vor Spam haben möchtest oder es Deinen Besuchern besonders leicht machen möchtest zu Dir Kontakt aufzunehmen – ohne Captcha.

Selbstverständlich können auch die angezeigten Text und das Layout an den Stil deiner Website angepasst werden. Also, worauf wartest Du? Lass uns dein neues Kontaktformular gestalten.

Werbung

Features der Lösung

Hier noch einmal der Überblick, was das Skript leisten kann:

  • eigene Felder festlegen und entscheiden, ob diese Pflichtfelder sein sollen
  • Integration in die eigene Website problemlos möglich
  • Spamschutz mit verstecktem Formular-Feld
  • Optionaler Spamschutz mit einem PHP-Captcha von WWW Coding, welches auf Deinem Server eingerichtet wird
  • Bei falschen Angaben müssen nicht alle Daten erneut eingegeben werden
  • Festlegen individueller Texte, die je nach Fall angezeigt werden können
  • kostenlos und frei verwendbar

Technische Voraussetzungen

Im Regelfall wird der Versand von E-Mails über mail() auf eurem Server konfiguriert sein, das ist auch notwendig.

Daneben benötigt ihr für das Captcha die Grafikbibliothek PHP GD.

Download des Kontaktformular-Skriptes

Wie schon zuvor angedeutet gibt es zwei Versionen dieses PHP-Skriptes.

Download Button
Download: Kontaktformular mit Captcha

Die erste Version beinhaltet sowohl die kontakt.php, das Kontaktformular, als auch den Ordner captcha, indem sich die für das Captcha notwendigen Dateien befinden. Entscheide dich für diese Lösung, wenn Du ein Kontaktformular inklusive Captcha möchtest. Hier, oder per Klick auf den Button links, kannst Du das Kontaktformular-Skript in dieser Version downloaden.

Download Button
Download: Kontaktformular ohne Captcha

Dich stört das Eingeben eines Captchas und Du willst Deine Besucher damit nicht belästigen? Das Kontaktformular verfügt bereits über einen recht einfachen Spamschutz, auch wenn dieser nicht so sicher ist, wie die Verwendung eines Captchas. Klicke hier, oder auf den Button links, um das Kontaktformular in der Ausführung ohne Captcha zu downloaden.

Sobald Du die Dateien gedownloadet hast, können wir mit der Einrichtung beginnen. Diese unterscheidet sich bei den beiden Versionen nicht wesentlich.

Einrichtung des Kontaktformulars

Nach Durchführung der folgenden Schritte ist dein Kontaktformular fertig eingerichtet. Bitte beachte bei der Captcha-Version, dass die so_gehts.php in diesem Fall ignoriert werden kann. Nur die folgenden Schritte sind maßgeblich:

  1. Dateien auf deinen Server laden
    Zuerst solltest Du die ZIP-Datei entpacken und alle enthaltenen Dateien auf den Server laden. Funktioniert es so, wenn Du die kontakt.php im Browser aufrufst? Okay, dann kann es weitergehen.
  2. Zeichensatz
    Verwendest Du UTF-8? Dann musst Du soweit keine Änderungen in der Datei vornehmen. Wenn Du dir nicht sicher bist, durchsuche einfach die anderen Dateien deiner Website nach Stichworten wie „utf8“ oder „utf-8“. Solltest Du kein UTF-8 verwenden, so musst Du die erste Zeile komplett entfernen (Version ohne Captcha) bzw. diese Zeile in der Version mit Captcha:

    header('Content-Type: text/html; charset=utf-8'); /* WENN DU KEIN UTF-8 NUTZT, KANNST DU (NUR) DIESE ZEILE LÖSCHEN! */
  3. Inhalt vor das Kontaktformular einfügen
    In der kontakt.php findest Du folgenden HTML-Kommentar:<!-- Hier kann der Inhalt deiner Seite vor das Kontaktformular platziert werden -->Ersetze diese Zeile durch deinen HTML- und/oder PHP-Code der davor angezeigt werden soll. Das sollte neben DOCTYPE und head-Elementen zum Beispiel auch dein Header sein.
  4. Inhalt hinter das Kontaktformular einfügen
    Bei der Gelegenheit kannst Du auch gleich den zweiten Kommentar in der letzten Zeile der Datei durch den Code ersetzen, der hinter das Formular platziert werden soll.
  5. E-Mail-Adresse festlegen
    Damit Du die E-Mails auch erhältst, solltest Du in der Variable $adminMail deine korrekte E-Mail-Adresse speichern. An diese Adresse werden alle Anfragen geschickt.
  6. Texte anpassen
    Außerdem hast Du die Möglichkeit alle angezeigten Texte anzupassen. Ändere dafür einfach die Inhalte der Variablen für die Überschrift ($formTitle), den Informationstext ($msgInfo), den Fehler-Hinweis ($msgError) und die Erfolgsmeldung ($msgSent).
  7. Captcha einrichten
    Dieser Schritt richtet sich nur an die Nutzer, die die Version mit Captcha heruntergeladen haben. Diese müssen in $captchaPath den Pfad von der aktuellen Datei zu der captcha.php aus dem captcha-Ordner angeben. Wenn Du nichts verändert hast und die Dateien so in das Hauptverzeichnis Deines Servers geladen hast, kannst Du die Variable in der Regel so belassen („captcha/captcha.php“).
  8. Formularfelder anpassen
    In der Variable $fields sind alle Elemente enthalten, die im Formular angezeigt werden soll. Du kannst diese Elemente verändern, entfernen (z.B. durch Auskommentieren wie bei dem Eintrag „Website“), oder neue hinzufügen. Dabei gilt folgendes Schema:'Feldname' => array('TYP', Pflichtfeld?, evtl. Ergänzungen)Der Typ kann entweder select, text oder textarea, checkbox sein. Ist der 2. Wert („Pflichtfeld?“) true, handelt es sich um ein Pflichtfeld, bei false ist das Ausfüllen optional. Bei einem select-Feld muss der 3. Eintrag des Arrays außerdem ein weiteres Array beinhalten mit allen Auswahlmöglichkeiten. Für eine Checkbox kann der daneben angezeigte Text ebenfalls über den 3. Eintrag des Arrays festgelegt werden.
  9. CSS anpassen
    Die einzelnen Bezeichnungen sind bereits mit der CSS-Klasse contactSubject und die Felder mit contactField gekennzeichnet. Damit kannst du dein Kontaktformular mit CSS noch leichter anpassen.
  10. Fertig!
    Sobald Du die Änderungen übernommen hast und die Dateien erneut auf deinen Webspace hochgeladen hast, bist Du in der Regel fertig. Wenn du alles korrekt gemacht hast, kannst Du dein Kontaktformular jetzt im Browser per kontakt.php erreichen. Probiere es doch gleich mal aus.

Ich wünsche Dir viele interessante und hilfreiche Anfragen über Dein neues Kontaktformular. Das, wie Du ja siehst, ganz einfach mit PHP und mit oder ohne Captcha realisiert werden kann.

WICHTIGE Hinweise

Freie Verwendung:

Aufgrund von Nachfragen weise ich gerne darauf hin, dass das Skript kostenfrei auch für gewerbliche Zwecke verwendet werden darf. Ich bitte darum die Kommentarzeilen nicht zu entfernen.

Gern gesehen (aber freiwillig) ist natürlich eine Empfehlung oder ein Link, wenn ihr mit dem Kontaktformular-Skript zufrieden seid 🙂

Kommentare:

Bitte habe Verständnis, dass ich aus Zeitgründen keine individuellen Anfragen per E-Mail oder Kommentar (mehr) beantworten kann. Sofern du einen Fehler z.B. in einer neueren PHP Version feststellst, freue ich mich jedoch über deinen Kommentar.

Changelog

  • 28.04.2014: Erste Version des Skripts wurde veröffentlicht
  • 30.06.2014: Nun ist auch das Einfügen von Checkboxen möglich
  • 21.10.2015: Bugfix, Checkboxen konnten bisher nur in der Version ohne Captcha eingefügt werden
  • 06.02.2016: Aktualisierte Version des Captchas übernommen
  • 17.05.2016: Neue Captcha Version eingebunden (mit Reload-Funktion und neuer Schriftart)
  • 03.03.2017: Betreff und E-Mail-Adresse werden nun als E-Mail-Betreff und Absender übernommen
Individuelles Kontaktformular mit Captcha in PHP
515 Stimme(n)


Werbung

92 Gedanken zu „Individuelles Kontaktformular mit Captcha in PHP“

  1. Hi, erstmal vielen Dank für das tolle Mailformular. Klappt auch alles super – aber wie kann ich zwischen Nachrichtentext und Captcha noch zwei Checkboxen einfügen? Bin da leider etwas unbedarft…

    Und zweite Frage – wie kann ich die Größe des Nachrichtentextfelds bestimmen?

    Danke & Gruß
    Steven

    1. Hallo Steven,

      Das Einfügen einer Checkbox war bisher nicht möglich. Ich habe jetzt aber eine neue Version des Skripts veröffentlicht, die genau das genau kann. Lade dir am besten die Dateien erneut herunter und schau dir den „Newsletter“-Eintrag im Array als Beispiel an.

      Zu deiner zweiten Frage: Ich würde Dir empfehlen über einen CSS-Code wie diesen textarea{width:300px;height:200px;} alle Textareas auf der Seite anzupassen. Alternativ kannst Du im Code bei textarea zusätzlich style="width:300px;height:200px; einfügen. Die Höhen- und Breitenangaben kannst Du natürlich beliebig wählen.

      Schöne Grüße

      1. Hallo Tristan,
        Formular ist ja erstmal TOP.

        Allerdings habe ich drei Fragen:

        1) Wo muss den Code (style=“width:300px;height:200px;) einfügen damit das Textfeld meine Größe nimmt – sobald ich es einfüge funktioniert die Seite nicht mehr

        2) Wie bekomme ich das Formular zentriert ?

        3) Gerne hätte ich auch die Bestätigung für den Versand bzw. Fehlermeldung als Popup oder zumindest das die Seite auf dem Formular bleibt. Aktuell springt es an den Anfang meiner Seite. 🙁

        Kannst Du mir hier kurz helfen ?

        Aktuell liegt das Formular unter folgendem Link:

        musikkontakt.de/kontakt.php

        Danke.

        Gruß Jürgen

  2. Suuuuuuuuuuuuper!!!! Ganz herzlichen Dank für die superschnelle Reaktion – funktioniert einwandfrei. Das einzigste was noch etwas stört sind die nicht richtig dargestellten Umlaute in der versendeten Mail und wenn man zwei Checkboxen hat, werden die in der E-Mail nebeneinander geklatscht. Habe an verschiedenen Stellen versucht, einen Umbruch hinzubekommen, hat aber nicht geklappt…

    Super vielen Dank nochmal und viele Grüße
    Steve

    1. Gerne doch.
      Ich habe die beiden Skripte noch einmal aktualisiert, sodass damit beispielsweise die Umlaute richtig dargestellt werden. Auch die Checkbox-Eingaben sollten wie alle anderen Felder in der E-Mail getrennt werden. Funktioniert denn der Zeilenumbruch bei den anderen Feldern?

  3. Hi, erstmal vielen Dank für super Formular.
    Ich habe es angepasst und es funktioniert tadellos.
    Eine Frage hätte ich aber.
    In meinem Formular wird die E-Mail Adresse abgefragt und diese hätte ich gerne auch als Antwortadresse, so das ich diese nicht rauskopieren muss, sondern direkt auf Antworten im MailClient klicken kann. Ich habe schon selbst versucht den Wert bei E-Mail header zu ändern, aber das hat leider nicht funktioniert.

    Viele Grüße
    Felix

    1. Hallo Felix,

      Es freut mich, dass dir das Skript weiterhilft. Was du suchst, ist der sogenannte Reply-To Header. Füge am besten einfach unter // Inhalt (wenn nicht leer) in die E-Mail schreiben // eine weitere Code-Zeile ein:

      if ($name == 'NAME_DES_EMAILFELDES') { $mailHeader .= "Reply-To: ".$_POST[field2url($name)]."\r\n"; }

      NAME_DES_EMAILFELDES ist dann zum Beispiel „E-Mail-Adresse“, je nachdem, wie du es in $fields angegeben hast.

      Schöne Grüße
      Tristan

  4. Sehr cooles script allerdings würde ich gern den ausgange als html senden und nicht als plain text.. das mit die angekommende mail etwas schicker aus sieht den so sehe ich nur buschstaben in meiner mail ohne zeilenbruch da blickt man überhaupt nicht mehr durch

    1. Hallo Rene,

      Wenn du aus Content-type: text/plain; charset=utf-8 (Zeile 55) ein Content-type: text/html; charset=utf-8 machst, kannst du auch HTML Tags in deiner eMail verwenden. Für die korrekte Darstellung der Umbrüche kannst du dann auch noch ein nl2br hinzufügen:

      // Inhalt (wenn nicht leer) in die E-Mail schreiben //
      $mailText .= $name.": ".nl2br($_POST[field2url($name)])."\r\n";

      Viel Spaß mit der Lösung und
      Schöne Grüße
      Tristan

  5. hm jetzt bekomme ich immer Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent ich benutze zum bearbeiten der dateien den Rapid PHP 2014 Editor. Speichern tute ich es auch als utf8

  6. Hey Tristan,
    auch ich finde dein Formular echt super und möchte mich für deine tolle Arbeit bedanken!
    Ich hab leider das Problem, dass ich die Eingabefelder nicht breiter machen kann, ich kann einfach die Funktion nicht finden (bin im HTML zu Hause :-P).
    Hast du da einen Tip für mich? Google mag mir nicht helfen.
    Vielen Dank schonmal!
    Viele Grüße,
    Ben

    1. Hi Ben,

      Durchsuche die kontakt.php einfach nach „// Felder auslesen //“. In den nachfolgenden Zeilen findest du die jeweiligen HTML-Codes. Mit style/class-Attributen kannst du dort dann per CSS die Breite der Felder verändern.

      Schöne Grüße
      Tristan

      1. Hallo, Danke für das super Formular, einfach spitze.
        Feldlänge konnte ich leider nicht verändern, bin blutiger Anfänger in php. Würde gerne über css die Länge der Felder einheitlich verlängern und bitte um Hilfe.
        Danke im Voraus.
        Rainer

  7. Hallo!

    Kann man irgendwie die Schriftart/Schriftfarbe für „Anrede“, „Vorname“, „Nachname“ etc. ändern?

    Danke für das super Script!

    1. Hi Johannes,

      Ja, das kannst du. Im Script findest du nach „Felder auslesen“ Mehrmals die Angabe:

      ‹td›".$name.":

      Nun kannst entweder per class-Attribut oder per style-Attribut die Eigenschaften verändern. Ein Beispiel:

      ‹td style=\"font-family:Arial;color:blue;\"›".$name.":

      Viel Erfolg dabei wünscht
      Tristan

    1. Hallo Martin,

      Entweder wurde das Captcha nicht korrekt angegeben oder Du solltest Dir noch einmal alle Felder angucken, die als „Pflichtfeld“ gesetzt wurden. Bei mir funktioniert alles, wie es soll.

      Schöne Grüße

  8. Hi Tristan

    erstmal danke für das Script, doch leider funktioniert es nicht, wie es soll.
    Ganz von vorne angefangen habe ich folgendes gemacht:

    1. Ich habe die ersten Zeilen in meine html-Datei integriert und diese in .php umbenannt, damit sie auch ordentlich interpretiert wird, wenn das Framework es nicht ordentlich macht 😉 (ich benutzt Bootstrap)

    Dazu erstmal die Frage: Wenn ich im html-Code: habe, benötige ich dann noch header(‚Content-Type: text/html; charset=utf-8‘);
    Muss ich evtl eines davon entfernen, damit Google es nicht „doppelt“ ließt 😉 ?

    2. Da meine html (jetzt php) Datei schon recht groß ist (1Pager), habe ich den 2ten Teil in eine weitere php-Datei ausgelagert und binde sie mit:


    in meine Seite ein. Die Klasse hab ich gesetzt, damit ich das auch an meine Styles anpassen kann !

    Das Formular wird korrekt dargestellt, meine Styles übernimmt er ordentlich nur abschicken tut er nicht und eine Fehlermeldung bekomme ich auch nicht.

    Muss ich das Script evtl. in die html(php :)-Datei schreiben, damit es funktioniert oder geht das etwas anders. (habs probiert, das ist auch nicht der Fehler )

    3. Ich wollte eine Checkbox integrieren mit folgendem Code:
    ‚Wie haben Sie von mir erfahren‘ => array(‚checkbox‘, true, array(‚Suchmaschine‘, ‚Freunde / Bekannte‘, ‚Visitenkarte / Flyer‘, ‚Sonstiges‘)),
    dieser steht zwischen der ‚E-Mail-Adresse‘- und ‚Betreff‘-Zeile.

    Vielen Dank ;))
    Monti

    1. zu 2

      hat er beim ersten mal nicht richtig übernommen, ich geh davon aus, das tags ignoriert werden damit kein böser code hier unheil stiftet…
      s.o. so habe ich es eingebunden, natürlich ohne die vielen leerzeichen

    2. Hallo Monti,

      es freut mich, dass dir das Skript gefällt. Bitte schreibe mir bei solchen individuellen und umfangreichen Anfragen doch eben eine Email, dann ist der Code auch lesbar.

      Schöne Grüße
      Tristan

  9. Moin Tristan!

    Vielen Dank für Dein tolles Kontaktformular!!!

    Nachdem es mir nun gelungen ist, dieses in meine Website „einzubauen“ stoße ich noch auf kleinere Schwierigkeiten.
    Es ist mir z.B. gelungen die Textboxen und die Textarea in der Breite anzupassen: <textarea style=\"width:400px\" name=\""…usw. usw.

    Aber wie bekomme ich die Hintergründe dieser z.B. Voll-Weiß (#fff)?!? Egal, was ich da anstelle, ich komme zu keiner Lösung.

    —–

    Ich habe noch mehr Formatierungsschwierigkeiten. Das php-Script des Kontaktformulars habe ich in ein DIV gesetzt. In diesem DIV regelt eine CSS-Datei die Formatierungen für Schriftfarbe, -art und -größe. Änder ich hier etwas, wird diese Änderung für die Texte oberhalb der php-Zeile "$fields = array" voll übernommen. Nicht jedoch für die Texte/Wörter (Anrede, Name, Vorname usw.) unterhalb dieser Zeile??? Hier wird NUR(!) die Schriftart übernommen – Farben, Größe, Stil usw. NICHT!

    Woran liegt das?

    Danke Dir ganz herzlich!

    LG
    Lenni

    1. Moin Lenni,

      Den Hintergrund legst du auch ganz einfach per CSS fest, in deinem Fall mit style="width:400px;background:#fff;". Das Textfeld wird in der Regel jedoch bereits einen weißen Hintergrund haben, solltest du den Rahmen setzen, dann nutze das Attribut border.

      Versuche es doch mal, in dem du !important benutzt, damit gibst du vor, dass dieser CSS-Code alles andere überschreiben soll, zB .divKlasse{color:#666 !important;}.

      Für weitere Fragen zu CSS, kannst du dir zum Beispiel dieses Tutorial anschauen.

      Schöne Grüße
      Tristan

  10. Hallo! Super script gefällt mir 🙂 Gibt es die Möglichkeit die Beschriftung des Buttons zu ändern? Ich kann im Code nichts zum Button finden..
    VG
    Phil

    1. Meine Frage hat sich soeben erübrigt, ich hatte die Stelle im Code übersehen.. Kann mir jemand erklären ob und wenn ja, wie es möglich ist, den Button durch einen „eigenen“ Button (Div Container mit Bild) zu ersetzen?
      Vielen Dank!
      VG
      Philipp

  11. Hallo,

    prima Script. Danke!

    Kann man auch eine automatische Weiterleitung nach einigen Sekunden einfügen?

    Wie kann man die eingegebene Mail-Adresse auf richtige Syntax prüfen?

    Vielen Dank vorab

    1. Hallo Karsten,

      das freut mich! Informationen zu Weiterleitungen findest Du hier. PHP-Weiterleitungen können allerdings nicht zeitverzögert erfolgen, das kannst du nur über HTML oder JavaScript realisieren.

      Wenn du dein Skript um eine Email-Syntax-Prüfung erweitern willst, kannst du einfach mal googeln und ein kleines PHP-Skript einbauen.

  12. Zwei Sachen sind mir noch aufgefallen:

    Wie kann man eine Kopie der Mail an den Verfasser senden?

    Wie verhindert man das mehrfache Absenden des Formulars?

    Danke!

    1. Eine (Blind-)Kopie kannst du über den sog. BCC-Header senden. Ergänze dazu einfach den Inhalt der Variable $mailHeader um ."Bcc: email@adresse.de;"."\r\n".

      An einem Codeschnipsel gegen mehrfaches Absenden kannst du dich entweder selbst probieren – mit einem versteckten Feld und zufällig generierten Code, der in der Session gespeichert wird und nur einmal angenommen wird – oder du nutzt die Captcha-Variante, die zumindest einen etwas besseren Schutz dagegen bietet.

  13. Hi erstmal vielen Dank für das Skript es ist eine Wucht.
    Ich bin 67 und erst vor 10 Jahren zum Computer gekommen und damit fast keine Ahnung vom Programmieren und von englisch erst recht nicht.
    Ich habe es bis jetzt fertig gebracht die Schriftfarbe zu ändern den Hintergrund Transparent zumachen und die Textfelder alle zu verlängern.
    Jetzt möchte ich noch wegen der Optik die Schaltfläche „ Formular abschicken „ genau unter die Schaltfläche vom captcha_code verschieben.
    Ich bin komplett ratlos, vielleicht kann mir hier jemand weiter helfen.
    Hier mal mein Code:

    <?php
    (dann kommt das Skript )

    Vielen Dank erstmal an alle

      1. Für alle, die es auch interessiert:

        Einfach die Zeile „“

        in

        „“

        abändern. Die Pixelangabe ist natürlich individuell anzupassen.

  14. Hallo Tristan,

    zunächst mal vielen Dank, macht einen sehr guten Eindruck.
    Ich konnte alles problemlos einbinden, es werden keine Fehler im Code angezeigt, das Captcha scheint zu funktionieren, aber ich bekomme IMMER die Fehlermeldung „Es ist ein Fehler aufgetreten: Es wurden nicht alle Felder korrekt ausgefüllt“. Auch wenn ich alle Felder als Nicht-Pflichtfelder (False) markiere.

    Hab schon verschiedenes ausprobiert, alles „true“, alles „false“, Felder weggelassen, nochmal das Captcha überprüft, aber ich komme nicht dahinter wo der Fehler herkommt. Wahrscheinlich ist es simpel, aber ich sehe es nicht. Für etwas Hilfe wäre ich dankbar.

    Gruß,
    Daniel

    1. Hallo Daniel,

      Dieser Fehler wird dir angezeigt, wenn der Spam-Schutz eingreift, das Captcha falsch übergeben wurde oder ein Pflichtfeld nicht ausgefüllt wurde.

      Du kannst temporär einmal in Zeile 62 (unter „// Pflichtfeld nicht ausgefüllt…“) ein echo "Pflichtfeld"; einfügen. Und ihn Zeile 73 ein echo "Captcha";. Je nachdem, was nun bei deinem Test ausgegeben wird, kannst du sehen, woran es liegt. Eventuell solltest du es auch einmal mit einem anderen Browser testen.

      Viel Erfolg & Beste Grüße!

  15. Herzlichen Dank! KLASSE!
    Funktioniert auf Anhieb, nachdem mein altes Formular nach einem PHP-Update ausgestiegen ist.

    Nun hängen die Felder aber sehr weit links auf der Seite. Wie kann ich dasFormular zentrieren oder einrücken?
    (Bitte für Total-DAU’s)
    Ein text-align: center hat mir nix gebracht.
    Ausserdem ist das Kommentarfeld sehr klein. Kann ich das vergrössern?
    Und wie kann ich bei falschem Capture einen Hinweis: „Capture falsch!“ erzeugen?

    Dann wäre es perfekt!

    LG und nochmal ein grosses DANKE

    Olaf

    1. Hallo Olaf,

      1. Du kannst das Formular als ganzes, d.h. den

      Tag zB zentrieren: <form style="text-align:center;">. Alternativ ist zB auch ein padding-left:20px; oder margin-left:20px; denkbar.

      2. Über die entsprechende Zeile im Code kannst du auch das Textfeld (textarea) anpassen, zB <textarea style="width:200px;height:150px;">.

      3. Um einen spezifischen Captcha-Fehler anzuzeigen, kannst du folgende Zeile nach 73 („$sent = false;“) einfügen:
      $msgError = "Das Captcha wurde nicht korrekt ausgefüllt.";

      Viel Erfolg mit dem Captcha!

      1. Diese Meldung kommt dann aber auch, wenn man zusätzlich eines der Pflichtfelder nicht ausgefüllt hat oder das Formular einfach leer abschickt.
        Also es erscheint in diesem Fall „Captcha nicht richtig ausgefüllt!“.
        Wie kann man die Meldung „Pflichtfelder nicht ausgefüllt“ priorisieren und die Meldung „Captcha nicht richtig ausgefüllt“ erst in einer zweiten Prüfung berücksichtigen?

  16. Hallo

    gibt es das Script auch mit SMTP Auth Funktion
    Da mein Provider meinte es müsse die Standartversion abschalten. Für Hilfe wäre ich dankbar

    Gruß

  17. Vielen Dank für die Mühe!

    Das Kontaktformular funktioniert gut. Allerdings gibt’s bei mir zwei PHP Fehlermeldungen:
    Warning: Cannot modify header information – headers already sent by … line 5.
    Warning: session_start(): Cannot send session cache limiter – headers already sent … line 6.
    Wie muss ich den Doctype anpassen, damit das verschwindet? Im Moment steht bei mir

    Muss das Charset in den Metatags gelöscht werden, wenn es im PHP-Header definiert wird?

    Wenn ich die Seite aktualisiere (z.B. F5), wird mir jedesmal über das Formular eine neue Mail geschickt.

    Viele Grüße
    Arne

  18. Hallo Tristan,
    vielen Dank für das tolle Formular! Es funktioniert wunderbar.
    Nun möchte ich gerne, dass das Formularfeld „Betreff“ auch in die Betreffzeile der versendeten Mail geschrieben wird. Leider bin ich in php nicht allzu fit und bekomme es einfach nicht hin. Wie kann ich das bewerkstelligen?
    Viele Grüße,
    Manuel

    1. Hi Manuel,

      Du kannst nach der Zeile 60 ($mailText .= $name.“: „.$_POST[field2url($name)].“\r\n“;) folgenden Code einfügen:

      if ($name == "Betreff") { $mailSubject = $_POST[field2url($name)]; }

      Viel Erfolg mit dem Formular!

      Beste Grüße
      Tristan

  19. Hallo,

    Ich betreibe eine Katzenpension und würde gerne dieses script für meine Homepage nutzen, darf Ich das mit diesem Formular + capcha. Oder muss ich dafür eine Lizenz erwerben, Ich frage nur vorher, um böse überraschungen zu vermeiden.

    1. Hallo atze,

      Du darfst das Skript auch für gewerbliche Zwecke kostenfrei verwenden.

      Ich freue mich natürlich über einen Link oder eine Empfehlung, wobei das freiwillig ist 🙂

      Beste Grüße
      Tristan

  20. Hallo Tristan,

    ich habe Dein Script mit einiger Begeisterung ausprobiert und dann in eine Test-Website auf unserem Server eingearbeitet.
    Eigentlich sieht alles gut aus und funktioniert, abgesehen von ein paar Fehlermeldungen des xhtml-Validators. Jedoch bekomme ich die gesendeten Nachrichten einfach nicht zugestellt.
    Da ich in PHP/HTML nicht gerade der Spezi bin, sitze ich nun etwas hilflos vor der Tastatur …
    Woran könnte es hängen?

    Viele Grüße
    Thomas

    1. Hallo Thomas,

      Das liegt dann vermutlich an deinen Servereinstellungen. Die mail() Funktion basiert auf dem PHP-Mailer. Womöglich ist dieser nicht korrekt integriert oder deaktiviert. Da solltest du einmal deinen Serveradministrator kontaktieren.

      Beste Grüße
      Tristan

  21. Hallo,

    ist es irgendwie möglich, dass im Email-Eingang bei einer neuen Mail nicht „kontaktformular@e-mail adresse“ dort steht, sondern die E-Mail Adresse des Absenders.

    Vielen Dank für die Hilfe

    Gruß Max

    1. Hi Max,

      Nach Zeile 60 ($mailText .= …) kannst du folgenden Code einfügen:

      if ($name == „E-Mail-Adresse“ && filter_var($_POST[field2url($name)], FILTER_VALIDATE_EMAIL)) { $mailHeader = „From: „.$_POST[field2url($name)].“\r\n“.“Content-type: text/plain; charset=utf-8″.“\r\n“; }

      Beste Grüße
      Tristan

      1. Wenn ich den Code einfüge, wird das Formular leider nicht mehr angezeigt. Irgendwo ist ein Fehler drin..

        Vielleicht kannst du mir den richtigen Code ja hier mal reinkopieren.

        Danke

        1. Das liegt wohl daran, dass die Anführungszeichen hier anders angezeigt werden, die solltest du dann einfach durch normale Anführungszeichen ersetzen.

      2. Wenn ich diese Lösung verwende wird mir die Mail mit folgendem Absender geschickt „ftp262503-2720983@sh4-17.1blu.de“ statt der im Formular angegebenen Mailadresse.
        Scheinbar mein FTP Username bei meinem Webhoster.

        Gibt es eine andere Lösung?

          1. Danke, ich hab es inzwischen hinbekommen 🙂
            Ich hatte dem Feld „E-Mail-Adresse“ einen abgeänderten Namen gegeben. Deswegen hatte es nicht funktioniert.
            Nun wird aber die Adresse aus dem E-Mail Feld auch als Absenderadresse benutzt 🙂

  22. Hallo Tristan
    ich habe dein klasse script meinen Wünschen angepasst. Jetzt möchte ich aber, dass der User (E-Mail-Adresse) dieselbe Mail bekommt und der Admin quasi in die BCC geht.
    Kannst du mir da helfen?

    1. Hallo Nobby,

      du findet an 2 Stellen im Skript ein $mailHeader =. Dort musst du den Header so anpassen, dass du z.B. „BCC: email@adresse.de\r\n“ anfügst.

      Zusätzlich musst du noch bei dem mail() Befehl die Adresse des Nutzers angeben, etwa indem du sie in Zeile 66 (beim Kommentar „Email-Adresse als Absender setzen“) in einer neuen Variable speicherst.

      Viel Erfolg dabei.

      Schöne Grüße
      Tristan

  23. Hallo, den Danksagungen für das geniale Script möchte ich mich uneingeschränkt anschließen. Per style und css Klassen konnte ich es hervorragend auf meine Websiteanforderungen anpassen: shiatsutuina.de . Ich würde jetzt nur noch gerne eine Art Sprungmarke (Popup oder neue Seite) für die Fehlermeldung $msgError und $msgSent einbauen. Da ich leider kein php Profi bin, würde ich mich über Hinweise oder Codebeispiele sehr freuen!

    1. Es freut mich, dass dir das Kontaktformular geholfen hat. Die sog. Anker in HTML sollten in dem Fall das richtige Stichwort sein. So kannst du dem Formular eine ID zu teilen und in der URL „#id“ darauf verweisen. Viel Erfolg dabei!

  24. Hallo,

    funktioniert tadellos.
    Wie kann ich nach erfolgreichem versenden des Formulars auf eine Danke Seite weiterleiten?

    Hast Du einen Tipp für mich?

  25. Das Kontaktformular ist echt Top. Leider habe ich noch das Problem, wenn ich in einem Feld, das auch nicht Pflicht ist nur eine Zahl eingebe, bekomme ich eine Fehlermeldung. Gebe ich aber einen Buchstaben ein, wird die Mail versendet.

    1. Hallo Thomas,

      Du meinst, dass du in ein Nichtpflichtfeld etwas eingibst? Welche Fehlermeldung bekommst du denn? Eigentlich hat die Eingabe in Nichtpflichtfeldern keinen Einfluss auf das Senden.

      Beste Grüße
      Tristan

      1. Bekomme den Fehler „Es ist ein Fehler aufgetreten: Es wurden nicht alle Felder korrekt ausgefüllt.“
        Habe jetzt aber gemerkt, dass wenn ich keinen Captchacode eingebe, dann versendet er das Kontaktformular. Also lade ich das ohne Captcha runter und versuche es damit. Dan habe ich leide kein Spamschutz, aber es funktioniert dann hoffentlich. Danke für die schnelle Antwort.
        Frust Thomas

        1. Hallo Thomas,

          Prüfe einmal ob Sessions + Cookies bei dir richtig arbeiten. Womöglich wird deswegen ein leerer Captcha-Code als der richtige Code gespeichert.

          Beste Grüße
          Tristan

  26. Hallo,

    erstmal vielen Dank für die Bereitstellung dieser tollen Lösung.
    Bei mir funktioniert die Variante mit dem Captcha nicht.
    Es wird kein Captcha geladen., obwohl der Anleitung gefolgt bin.

    Beste Grüße
    Jan

  27. Hallo,

    ich hatte gerade bemerkt, dass die Captcha-Lösung nicht bei mir funktioniert. Ich habe die PHP Version von 5.5 auf 7.0 umgestellt und jetzt läuft es 🙂

    Der vorherige Kommentar ist damit überflüssig

  28. Hallo Tristan,
    erstmal vielen Dank für das tolle Kontaktformular. Ich habe leider ein paar Probleme damit: 🙁

    1. Ist es möglich, dass eine Kopie der Nachricht an den Absender geschickt wird? Wenn möglich anstelle der Newsletter-Checkbox.
    2. Ich würde gerne den Betrefftext festlegen der bei meinen Emails angezeigt wird damit ich sofort sehe, dass es sich um eine Nachricht handelt die über mein Kontaktformular versendet wurde. Ist das möglich?

    3. Der Captcha funktioniert nicht.

    Wäre super, wenn du mir weiterhelfen könntest.

    Vielste Grüße
    Daniel

    1. Hallo Daniel,

      1. Die Kopie kannst du über den BCC-Header realisieren (siehe meinen Kommentar vom 28. März 2016).

      2. Für den Betreff kannst du den Inhalt von $mailSubject anpassen. Allerdings hat dieser dann auch Einfluss auf den Betreff in der E-Mail-Kopie.

      3. Bitte prüfe, ob bei dir GD-Library funktionsfähig ist.

      Beste Grüße
      Tristan

      1. Ok, vielen Dank. Frage 2 und 3 habe ich nun gelöst. Zu der Email-Kopie habe ich allerdings noch eine Frage:
        In deinem Kommentar vom 28.3.16 muss doch beim bcc eine Email-Adresse angegeben werden. Ich würde das aber gerne so machen, dass die Nachricht an die eingetragene Email-Adresse gesendet wird, also die vom Verfasser. Ist das möglich?

        Viele Grüße
        Daniel

        1. Die E-Mail-Adresse kannst du im Skript unter „E-Mail-Adresse als Absender setzen“ in Zeile 71 ff. in einer Variable speichern und diese dann für den BCC-Header verwenden.

          Viel Erfolg mit deinem Kontaktformular!

  29. hallo Tristan,
    ich habe mir das kontaktformular istsalliert, das wircklich super auschaut.
    leider wird nach dem absenden, keine mail empfangen.
    alles scheint ok zu sein, keine fehlermeldung usw.
    habe natürlich im script meine mailadresse eingetragen.
    vielleicht hast du da eine lösung.
    kann es daran liegen das ich https nutze?

      1. Hallo Tristan,
        bei mail einstellungen bin ich blutiger anfänger,
        das einzigste das ich gefunden hab wo ich was an mail einstellungen machen kann ist:
        mail.force_extra_parameters :
        „Zusätzliche Parameter für die Funktion mail(), die für das Versenden von Mails verwendet wird. Wenn Sie z. B. Ihre eigene Sendmail-Konfiguration nutzen möchten: -C /dir/conf.cf“

        ich hätte auch hier keine ahnung was ich ändern muss.
        falls das hier zu viel wird könntest du mir auch gerne per mail schreiben.
        da ich keine Idee habe was ich ändern muss, wäre ichb um hilfe froh, da ich so ein Problem noch nie hatte.

        1. Ich kann dir aus Zeitgründen leider keinen individuellen Support anbieten und bitte um Verständnis. Ggf. kann dir dein Webhoster weiterhelfen. Das Programm sendmail muss installiert sein und in der PHP INI korrekt konfiguriert sein.

          1. hallo,
            ich danke dir Totzdem, werde mich weiter damit beschäftigen, da ich dein script verwenden möchte.
            werde weiteres berichten, kann allerdings bissel dauern 🙂

          2. was ich jetzt gesehen habe werden auf meinem server die mails nicht über php versenden hier wird nun smtp genutzt , was immer das auch bedeutet, denke deswegen funktioniert das nicht, gehe davon aus das sendmail daher garnicht installiert ist
            Gruss Paul

          3. Hallo Tristan,
            ich habe nun das Kontaktformular hinbekommen das es funktioniert.
            Ich bin kein Profi, aber versuche mal zu erklären an was es lag.
            Das Problem lag darin, dass ich einen eigenen Mailserver habe, der nicht direkt über php sondern smtp Mails versendet.
            Ich habe nun einfach nur für das Kontaktformular eine Mailadresse eingetragen wo das ganze mit direkt über php funktioniert.
            Auch Mailadressen von yahoo gehen nicht, auch das habe ich versucht.
            Ich denke das man das Skript erweitern kann , aber wie genau muss ich als leihe erstmal rausfinden, möglicherweise müssen erstmal die Inhalte erweitert werden.
            // SMTP aktivieren
            $oMailer->isSMTP();

            // SMTP-Server
            $oMailer->Host = ’smtp.domain.com‘;

            // SMTP Authentifizierung aktivieren
            $oMailer->SMTPAuth = true;

            // SMTP Benutzer
            $oMailer->Username = ‚user@domain.com‘;

            // SMTP Benutzer Passwort
            $oMailer->Password = ‚foobar‘;

            // Verbindungssicherheit setzen ( SSL und TLS möglich )
            $oMailer->SMTPSecure = ‚tls‘;

            // Verbindungsport festlegen
            $oMailer->Port = 587;
            Aber was, wie und wo das gemacht wird, muss ich erstmal austesten, wie gesagt bin leihe.

            Aber jetzt geht’s bei m mir, das Kontaktformular ist sehr gut und ansonsten einfach handzuhaben.
            Danke für dieses gute script
            Gruss Paul

  30. Vielen Dank für das supergeniale Script!
    Es ist einfach gehalten und ohne viel Schnickschnack und vor allem es funktioniert! :)))
    Es lässt sich leicht an die eigenen Bedürfnisse anpassen und wunderbar in eine bestehende Seite integrieren.

    Ist es irgendwie möglich die $msgError Meldung in roter Schriftfarbe auszugeben und eine Zeilenumbruch danach einzufügen?

    1. Es freut mich, dass dir das Skript hilft. Individuellen Support kann ich dir leider nicht anbieten. Du kannst mittels CSS/HTML selbstverständlich die Schriftfarbe (CSS „color“) formatieren und einen Zeilenumbruch (<br />) einfügen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Solve : *
28 ⁄ 14 =