Kontaktformular mit PHP

Double Opt-in programmieren

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.

7 thoughts on “Kontaktformular mit PHP”

  • MrGreen
    4.01.2022 um 20:07

    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

  • Markus
    5.01.2022 um 10:47

    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.

  • t.n.
    13.01.2022 um 13:26

    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

  • Markus
    13.01.2022 um 14:16

    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/

  • M. Utermann
    23.01.2022 um 19:03

    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 …

  • Markus
    23.01.2022 um 20:48

    Schau mal hier: https://github.com/programmiertipps/contactform .. das Skript gehört in eine PHP Datei.

  • M. Utermann
    26.01.2022 um 9:01

    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 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.