Programmieren lernen | Codebeispiele | Jobbörse | Webentwicklung

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.

4 Gedanken zu „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/

Schreibe einen Kommentar

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