Zur Navigation

Kontaktformular

1 Lena567

Hallo Leute,

aber ein einfaches Kontaktformular stellt.
Hier der Link dazu: http://lena91567.bplaced.net/kontakt

Das Formular funktioniert auch soweit, nur sollte es zu sein, dass nach dem absenden des Formulars keine neue Seite angezeigt oder geladen wird, sondern es sollte die Seite http://lena91567.bplaced.net/kontakt beibehalten werden und nach der absenden-Schaltfläche sollte eine Erfolgsmeldung erscheinen.

Wie macht man denn sowas?

Hier noch der PHP-Code
<?php

// Prüfe, ob alle Pflichtfelder ausgefüllt sind
if (!isset($_POST['name']) || $_POST['name'] == '') {
  echo 'Bitte geben Sie Ihren Namen ein.';
  exit;
}

if (!isset($_POST['email']) || $_POST['email'] == '') {
  echo 'Bitte geben Sie Ihre E-Mail-Adresse ein.';
  exit;
}

if (!isset($_POST['stelle']) || $_POST['stelle'] == '') {
  echo 'Bitte wählen Sie eine Stelle aus.';
  exit;
}

if (!isset($_POST['stundenanzahl']) || $_POST['stundenanzahl'] == '') {
  echo 'Bitte geben Sie die Stundenanzahl ein.';
  exit;
}

if (!isset($_POST['dienstantritt']) || $_POST['dienstantritt'] == '') {
  echo 'Bitte geben Sie den Dienstantritt ein.';
  exit;
}

if (!isset($_POST['datenschutz']) || $_POST['datenschutz'] == '') {
  echo 'Bitte akzeptieren Sie die Datenschutzerklärung.';
  exit;
}

// Sende die Daten an die E-Mail-Adresse
$to = 'tl-therapeutin@web.de';
$subject = 'Kontaktformular';
$message = '
Name: ' . $_POST['name'] . '
E-Mail-Adresse: ' . $_POST['email'] . '
Telefonnummer: ' . $_POST['telefon'] . '
Stelle: ' . $_POST['stelle'] . '
Stundenanzahl: ' . $_POST['stundenanzahl'] . '
Dienstantritt: ' . $_POST['dienstantritt'] . '
';

mail($to, $subject, $message);

// Gebe eine Erfolgsmeldung aus
echo 'Ihre Anfrage wurde erfolgreich abgesendet.';

21.11.2023 13:28

2 Jörg Kruse

Wenn das Formular an die selbe URL abgesendet werden soll, benötigst du ein sogenanntes Affenformular. Mit den Suchbegriffen "Affenformular PHP" findest du auch entsprechende Beispiele.

Falls die Seite nicht vollständig neu geladen werden soll, sondern nur das Formular und etwaige Fehlermeldungen, benötigst du eine JavaScript-Lösung. Hierbei werden die Formulardaten per Ajax an ein PHP-Backend gesendet, welches eine Erfolgs- oder Fehlermeldung zurücksendet, die das JavaScript in die Seite einfügt. Beispiele lassen sich mit den Suchbegriffen "Formular Ajax" finden.

21.11.2023 14:44

1 Forenmitglied fand diesen Beitrag gut

3 Lena567

danke Jörg für deine Tipps!
Die Ajax-Lösung bevorzuge ich. Werde mal schauen, was ich dazu finde

21.11.2023 15:13

5 Jörg Kruse

JavaScript bzw. Jquery-Scripte würde ich mithilfe der JavaScript-Konsole debuggen. Firefox zeigt hier folgende Fehlermeldung an:

Uncaught SyntaxError: return not in function

"return false;" muss innerhalb einer Funktion stehen.

Der Code in Zeile 102 bis 118 sollte doch den entsprechenden Abschnitt in dieser Funktion ersetzen:

$("form").on("submit", function (e) {
    var dataString = $(this).serialize();
    
    $.ajax({
      type: "POST",
      url: "bin/process.php",
      data: dataString,
      success: function () {
        // Display message back to the user here
      }
    });
    e.preventDefault();
});

Das obige Code-Beispiel fehlt allerdings in der deutschen "Übersetzung". Diese ist anscheinend nicht nur vom Ausdruck her ziemlich schrottig. Ich würde stattdessen, falls möglich, das englische Original durcharbeiten:

https://code.tutsplus.com/submit-a-form-without-page-refresh-using-jquery--net-59t

Ohne ein Grundverständnis von Ajax und jquery wird dies allerdings nicht ganz einfach.

21.11.2023 19:03

1 Forenmitglied fand diesen Beitrag gut

6 Lena567

Vielen vielen Dank für deine Hilfe!

Die Fehlermeldung habe ich zwar entdeckt, jedoch habe ich das so aus dem Artikel übernommen und dachte, dass das sein Muss.

habe ich schon bemerkt, dass der Artikel nicht richtig übersetzt ist, doch dachte ich, dass wenigstens der Code in Ordnung ist.

Mit deinem Code funktioniert es!
Vielen lieben Dank dafür!

Mit dem Original-Artikel werde ich mich noch beschäftigen.

22.11.2023 18:04

7 Lena567

Guten Morgen Jörg,

wie behebe ich denn die vorliegende Fehlermeldung
Error: The value of the for attribute of the label element must be the ID of a non-hidden form control.

From line 30, column 7; to line 30, column 38

p">↩      <label for="stelle" id="stelle">Jugend

23.11.2023 09:21

8 Jörg Kruse

Das for Attribut eines Labels muss den gleichen Wert wie die ID des Eingabeelements enthalten, auf welches sich das Label mit seiner Beschreibung bezieht.

<label for="stelle" id="stelle">

Hier würde sich das Label auf sich selbst beziehen, was nicht wirklich sinnvoll ist (und gemäß der Fehlermeldung auch nicht zulässig)

23.11.2023 10:11

1 Forenmitglied fand diesen Beitrag gut

9 Lena567

Hallo Jörg, danke deinen Hinweis.

leider weiß ich immer noch nicht, wie die ID in meinem Fall muss
    <div class="form-group">
      <label for="stelle" id="stelle">Jugendtrainer für</label>
      <input type="radio" name="stelle" id="stelle-maedchen" value="maedchen" required>
      <label for="stelle-maedchen">Mädchen</label>
      <input type="radio" name="stelle" id="stelle-junge" value="junge" required>
      <label for="stelle-junge">Junge</label>
    </div>

Keine Ahnung, das Eingabeelement ist.

23.11.2023 10:50

10 Jörg Kruse

Das "Jugendtrainer für" hat hier eher die Funktion einer Überschrift, bzw. eines legend innerhalb eines fieldset. Es hat ja keine Zuordnung zu einem einzelnen Eingabeelement. Bei einem Klick auf ein Label wird der Fokus auf das zugehörige Eingabe-Element gesetzt. Wichtig ist diese Zuordnung auch für Screenreader, denn optisch lässt sich diese ja nicht erschließen.

Auf das for Attribut kann übrigens verzichtet werden, wenn das input ein Kind-Element des Labels ist. Dann ist die Zuordnung ja eindeutig.

<fieldset class="form-group">
  <legend>Jugendtrainer für</legend>
  <label>
    <input type="radio" name="stelle" id="stelle-maedchen" value="maedchen" required>
    Mädchen
  </label>
  <label>
    <input type="radio" name="stelle" id="stelle-junge" value="junge" required>
    Junge
  </label>
</fieldset>

23.11.2023 11:35