Kontaktformular mit PHP

Heute mal ein Klassiker. In folgendem Tutorial findest du ein fertiges Kontaktformular mit dem du sofort loslegen kannst.

Das HTML-Formular

<div class="container">
    <h1 class="display-4">Kontaktformular</h1>
    <form action="" method="post">
      <input name="security" type="hidden" value="secure">
      <div class="row">
        <div class="form-group col-md-4">
          <label for="SelectGender">Anrede</label>
          <select name="gender" class="form-control" id="SelectGender">
            <option value="Herr">Herr</option>
            <option value="Frau">Frau</option>
          </select>
        </div>
      </div>
      <div class="row">
        <div class="form-group col-md-6">
          <label for="InputName">Name</label>
          <input name="name" type="text" class="form-control" id="InputName">
        </div>
        <div class="form-group col-md-6">
          <label for="InputEmail">E-Mail-Adresse <span class="req">Pflichtfeld</span></label>
          <input name="email" type="email" class="form-control" id="InputEmail" aria-describedby="emailHelp" required>
        </div>  
      </div>      
      <div class="form-group">
        <label for="TextareaMessage">Nachricht <span class="req">Pflichtfeld</span></label>
        <textarea name="message" class="form-control" id="TextareaMessage" rows="3" required></textarea>
      </div>
      <div class="form-check">
          <input type="hidden" name="optin" value="0">
          <input type="checkbox" id="opt-in" name="optin" value="1" class="form-check-input" required>   
          <label for="opt-in">
            <strong>HINWEIS</strong> <span class="req">Pflichtfeld</span><br>Ich habe die Hinweise in der <a href="#">Datenschutzerklärung</a> verstanden und stimme diesen hiermit zu.
          </label>
        </div>
      <button type="submit" name="sendform" class="btn btn-dark">Absenden</button>
    </form>
  </div>

Erklärung: Das HTML-Formular beinhaltet eine select-box für die Anrede, ein Textfeld für den Namen, ein E-Mail Feld für die E-Mail und eine Textarea für die Nachricht. Die Checkbox für die Datenschutzerklärung darf natürlich auch nicht fehlen.

Das PHP-Skript

if ( isset($_POST['sendform']) && ($_POST['security'] == 'secure') ) :
    if ( !empty($_POST['email']) ) :
      if ( !empty($_POST['optin']) ) :     
  
        $gender = htmlspecialchars($_POST['gender']);
        $name = htmlspecialchars($_POST['name']);
        $email = htmlspecialchars($_POST['email']);
        $message = htmlspecialchars($_POST['message']);

        $formmail = 'deineEmail@adresse.de';

        if ( preg_match("/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email) ) :          
          
          $subject = 'Eine neue Kontaktformularanfrage ist eingetroffen.';
          $message = "
            <html>
            <head>
            <title>Neue Anfrage</title>
            </head>
              <body>
                <p>Eine neue Anfrage von " . $gender . " " . $name . " ist eingegangen.</p>
                <p>Die hinterlegte E-Mail-Adresse lautet: " . $email . ".</p>
                <p><strong>Nachricht:</strong> <br> " . $message . "</p>
              </body>
            </html>
          ";

          $userSubject = 'Ihre Anfrage bei DeinName.';
          $userMessage = "
            <html>
            <head>
             <title>Deine Überschrift in der E-Mail</title>
            </head>
              <body>
                <p>Vielen Dank für Ihre Anfrage. <br>
                Sie bekommen schnellstmöglich eine Antwort</p>
              </body>
            </html>
          ";

          $headers = "MIME-Version: 1.0" . "\r\n";
          $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
          $headers .= "From: <' . $formmail . '>" . "\r\n";

          mail($formmail, $subject, $message, $headers);
          mail($email, $userSubject, $userMessage, $headers);

          echo '
            <div class="container">
              <div class="alert alert-success" role="alert">
                Anfrage erfolgreich versendet!
              </div>
            </div>
          ';

        else :

          echo '
            <div class="container">
              <div class="alert alert-danger" role="alert">
                Bitte eine korrekte E-Mail-Adresse eingeben.
              </div>
            </div>
          ';

        endif;
      
      else :

        echo '
            <div class="container">
              <div class="alert alert-danger" role="alert">
                Haben Sie die Datenschutzerklärung gelesen? Dann bitte bestätigen.
              </div>
            </div>
          ';

      endif;

    else : 

      echo '
            <div class="container">
              <div class="alert alert-danger" role="alert">
                Bitte eine E-Mail-Adresse eingeben.
              </div>
            </div>
          ';

    endif;
  endif;

Erklärung:
Zeile 10: Dort muss deine E-Mail-Adresse eingetragen werden.
Zeile 28: Ändere „DeinName“ noch in den deiner Wahl.

* Werbung/Affiliate Link
Rabatt Osmoseanlagen

Kommentare

  • MrGreen
    04.01.2022 - 20:07 Uhr

    Hallo,

    vielen Dank für dein tolles Formular! Es funktioniert tadellos. Nur eine Sache stört noch ein wenig. In der Mail an mich steht als Absender „Unbekannter Absender“. Kann man das auch noch anpassen?

    Danke für Feedback im Voraus!
    Liebe Grüße, MrGreen

    Antworten
    • Markus
      05.01.2022 - 10:47 Uhr

      Hallo, du könntest dir einfach für die Mail an dich einen weiteren „Header“ bauen. In den packst du dann die E-Mail das Absenders.

      Antworten
  • t.n.
    13.01.2022 - 13:26 Uhr

    Hi, Danke fürs Formular, das ist gut!
    2 Punkte habe ich, und zwar:
    # PHP-Abfrage ob es sich um eine vernünftige Email-Adresse handelt, habe ich etwas angepasst, weil Original-Abfrage mit einigen unplausiblen Varianten von Email-Adressen Probleme hat.
    Meine Abfrage dazu: if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) : …

    # Wenn man z.B. Email-Adresse Feld leer lässt und auf „Senden“ klickt, dann taucht eine Meldung „Bitte füllen Sie das Feld aus“ auf.
    In dem Zusammenhang ist meine Frage: Wer sorgt dafür, dass diese Meldung auf Deutsch generiert wurde? Ist es möglich es so einzustellen, dass diese und ähnliche Meldungen (z.B. wenn man Nachricht-Feld leer lässt und auf „Senden“ klickt) auf Englisch generiert werden (angenommen man hat ein Kontaktformular mit englischen Überschriften) ?

    MfG

    Antworten
    • Markus
      13.01.2022 - 14:16 Uhr

      Hallo, zu 1: ok und 2: das kommt von deinem Browser. Du kannst aber auch eigene Validation bauen. Siehe z.B. hier: http://jsfiddle.net/Qjkj7/

      Antworten
  • M. Utermann
    23.01.2022 - 19:03 Uhr

    Hallo, wo kommt das php-Script genau hin? Ich sehe im Browser nach Einbindung mittels „“ nur ASCII-Text des Scripts auf der Seite, das Script selber wird nicht abgearbeitet …

    Antworten
  • M. Utermann
    26.01.2022 - 09:01 Uhr

    Danke – gelesen und verstanden. Übrigens hatte ich in meiner Frage durchaus die richtigen Zeichen verwenden (also Pfeil links/Fragezeichen/php und am Ende Frgezeichen/Pfeil rechts), Ihre Webseite lässt aber nur die An-/Abführungszeichen unten/oben übrig, wenn man die Frage mit Original-Codezeichen abschickt 😉

    Antworten
  • Udo
    22.07.2022 - 20:58 Uhr

    Hallo
    Ich habe mal eine Frage zu dem Script.
    Warum fliegen einige Benutzer raus? Die haben eine gültige und zustellfähige E-Mail-Adresse eingegeben und trotzdem sagt das Script „Bitte eine korrekte E-Mail-Adresse eingeben. “
    Aber wenn man eine E-Mail-Adresse eingibt, die es nicht gibt bekomme ich eine E-Mail. Beispiel-Adresse: ralf.sturm@kgruetexellenne.de

    Danke

    Antworten
    • Markus
      22.07.2022 - 21:09 Uhr

      Hallo Udo,
      das Skript prüft natürlich nicht ob es die E-Mail-Adresse gibt, sondern nur ob die Eingabe soweit passt.
      Bei den Adressen die bei dir raus fliegen, müsste man im Detail prüfen wo der Fehler liegt. Hast du dazu eine Beispiel Adresse?

      Antworten
  • Udo
    22.07.2022 - 21:16 Uhr

    Hallo Markus
    Klar habe ich ein Beispiel — entfernt — oder — entfernt —

    Antworten
    • Markus
      22.07.2022 - 21:54 Uhr

      Probiere noch mal mit der preg_match Abfrage von t.n. if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) :

      Antworten
  • Udo
    22.07.2022 - 22:12 Uhr

    Ich hab die Lösung: So klappt das: if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) :
    Ich habe die Anführungszeichen geändert.

    Danke

    Antworten
  • Stephie
    17.02.2023 - 21:29 Uhr

    Hallo Markus 🙂

    vielen Dank für dein Skript, das hat mir sehr geholfen <3

    Ich habe nur das Problem, dass beim neuladen der Seite das Formular immer wieder abgeschickt wird – gibt es dafür eine einfache Lösung oder einen Workaround? Vielleicht, dass die Eingaben nach dem Absenden resettet werden. Ich habe nicht direkt was verständliches gefunden bzw das was ich versucht habe, hat nicht funktioniert.

    Vielen Dank und liebe Grüße

    Antworten
  • Henning Hahn
    17.05.2023 - 19:37 Uhr

    Hallo,
    die PHP Datei ist doch gar keine. Da fehlen doch noch die PH Zeichen am Anfang und am Ende
    Und wo wird auf dem HTML Formular auf die PHP-Datei zugegriffen?
    Mit freundlichen Grüßen
    Henning Hahn

    Antworten
    • Markus
      25.05.2023 - 09:45 Uhr

      Hallo Henning, schau dir am besten mal das fertige Skript auf Github bzw. per Download an, dann siehst du den Aufbau.

      Antworten
  • Heinrich
    04.11.2023 - 09:01 Uhr

    Hallo,
    das war eine ausgezeichnete Hilfestellung für mich. Ich will es auch einmal mit anderen Inhalten versuchen. Ich komme aus einer ganz anderen Programmierecke, möchte einer Person eine Hilfestellung geben und denke, das könnte ein guter Weg sein. (theos, multiuser mit allem pipapo, aber ohne html und co.). Ich bin schon 80 Jahre alt und wirklich Neues nicht mehr lernen. Danke! MfG H.R.

    Antworten
    • Markus
      04.11.2023 - 10:33 Uhr

      Freut mich geholfen zu haben. Weiterhin viel Erfolg.

      Antworten

Schreibe einen Kommentar

Erforderliche Felder sind entsprechend markiert.

Wird nicht veröffentlicht.