Zur Navigation

Kontaktformular [2]

11 Lena567

Vielen Dank für deine ausführliche Erklärung!
Jetzt verstehe ich das ganze.

weil das mit den Jugendtrainer kein Eingabe-Element ist, wusste ich eben gar nicht, wo ich doch eine ID anbringen soll bzw. Welche.

 <legend>Jugendtrainer für</legend>
Ist in diesem Fall nicht valide, aber mit dem folgenden passt es
 <p>Jugendtrainer für</p>


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

diese finde ich sehr viel einfacher und übersichtlicher.


Nochmals vielen Dank für deine Hilfe und deine Geduld mit mir!

23.11.2023 15:20

12 Lena567

jetzt habe ich wieder ein Problem.

In der PHP Datei, die ich im ersten Beitrag genannt habe, befinden sich Umlaute.

In der E-Mail, die man nach dem absenden des Formulars erhält, wenn die Umlaute nicht korrekt dargestellt.

Daher habe ich den folgenden Code in der zweiten Zeile ergänzt:
header('Content-Type: text/html; charset=utf-8');

doch mit diesem Code funktioniert es nicht mehr. Es wird keine E-Mail versendet.

Wie kann ich dieses Problem beheben?
bisher habe ich stets gelesen, dass das mit dem Code
header('Content-Type: text/html; charset=utf-8');
Funktioniert. Das tut es aber eben nicht.

Die PHP-Datei ist als utf-8 abgespeichert.

23.11.2023 16:23

13 Jörg Kruse

<legend>Jugendtrainer für</legend>
Ist in diesem Fall nicht valide

Innerhalb eines Fieldsets ist ein legend nicht nur valide, sondern in diesem Fall auch das semantisch korrekte Element, sowie ein fieldset das semantisch korrekte Element zur Gruppierung eines Formulars ist. Innerhalb von <div class="form-group"> darf das legend Element nicht vorkommen, aber allein der Klassenname "form-group" spricht doch schon dafür, dass das div eigentlich ein fieldset sein möchte :)

Beschrieben ist dieser Aufbau auch auf SELFHTML:

https://wiki.selfhtml.org/wiki/HTML/Elemente/fieldset

23.11.2023 16:26 | geändert: 23.11.2023 16:26

1 Forenmitglied fand diesen Beitrag gut

14 Jörg Kruse

header('Content-Type: text/html; charset=utf-8');

Diesen HTTP-Header sendet der Webserver an den Webbrowser, damit dieser weiß, mit welcher Codierung die Webseite angezeigt werden soll. Allerdings besteht hier ja gar kein Problem, die Umlaute auf der Webseite werden ja korrekt dargestellt, z.b. im Label "Mädchen".

Das Problem ist in diesem Fall ein fehlender E-Mail-Header für den Content-Type. Dieser muss der von dir verwendeten Funktion mail() mitgegeben werden. Beschrieben ist dies beispielsweise hier:

https://www.php-kurs.com/email-per-php.htm

23.11.2023 16:42 | geändert: 23.11.2023 16:43

1 Forenmitglied fand diesen Beitrag gut

15 Lena567

Zitat von Jörg Kruse
<legend>Jugendtrainer für</legend>
Ist in diesem Fall nicht valide

Innerhalb eines Fieldsets ist ein legend nicht nur valide, sondern in diesem Fall auch das semantisch korrekte Element, sowie ein fieldset das semantisch korrekte Element zur Gruppierung eines Formulars ist. Innerhalb von <div class="form-group"> darf das legend Element nicht vorkommen, aber allein der Klassenname "form-group" spricht doch schon dafür, dass das div eigentlich ein fieldset sein möchte :)

Beschrieben ist dieser Aufbau auch auf SELFHTML:

https://wiki.selfhtml.org/wiki/HTML/Elemente/fieldset


Also in meinem Fall ist das nicht valide
http://lena91567.bplaced.net/kontakt3
https://validator.w3.org/nu/?doc=http%3A%2F%2Flena91567.bplaced.net%2Fkontakt3%2F

Aber mit P anstatt Legend ist es valide
http://lena91567.bplaced.net/kontakt3/index2.html
https://validator.w3.org/nu/?doc=http%3A%2F%2Flena91567.bplaced.net%2Fkontakt3%2Findex2.html
Im meinem Fall ist das eben anscheinend so, wobei das wohl eine Ausnahme ist

24.11.2023 14:15

16 Lena567

Zitat von Jörg Kruse
header('Content-Type: text/html; charset=utf-8');

Diesen HTTP-Header sendet der Webserver an den Webbrowser, damit dieser weiß, mit welcher Codierung die Webseite angezeigt werden soll. Allerdings besteht hier ja gar kein Problem, die Umlaute auf der Webseite werden ja korrekt dargestellt, z.b. im Label "Mädchen".

Das Problem ist in diesem Fall ein fehlender E-Mail-Header für den Content-Type. Dieser muss der von dir verwendeten Funktion mail() mitgegeben werden. Beschrieben ist dies beispielsweise hier:

https://www.php-kurs.com/email-per-php.htm

Vielen Dank!
dank deiner ausführlichen Erklärung habe ich es verstanden

24.11.2023 14:16

17 Jörg Kruse

Also in meinem Fall ist das nicht valide

Ja, weil du ein semantisch korrektes Element in einem semantisch falschen Kontext verwendest. Das legend darf nur als erstes Element eines fieldset verwendet werden. Du verwendest zur Formulargruppierung stattdessen ein div. Und ein p kennzeichnet normalerweise einen Text-Absatz und keine Überschrift in einem Formularabschnitt.

Zur Verdeutlichung:

<form>
  <div>
    <p>Welche Jugendmannschaften möchten Sie trainieren?</p>
    <!-- Eingabeelemente -->
  </div>
</form>

-> "valide", aber zwei semantisch unpassende Elemente.

<form>
  <div>
    <legend>Welche Jugendmannschaften möchten Sie trainieren?</legend>
    <!-- Eingabeelemente -->
  </div>
</form>

-> nur noch ein semantisch unpassendes Element, allerdings nicht valide, da legend nicht unterhalb von fieldset

<form>
  <fieldset>
    <legend>Welche Jugendmannschaften möchten Sie trainieren?</legend>
    <!-- Eingabeelemente -->
  </fieldset>
</form>

-> semantisch korrekt und valide!

Du hast die erste Version gewählt, damit der Validator nicht meckert, aber als korrektes HTML würde ich das nicht bezeichnen.

Nachtrag:

ein HTML-Validator kann nur einfache Regeln überpüfen, die semantische Korrektheit lässt er deswegen außen vor. Vielleicht kommt da aber bald was mit künstlicher Intelligenz ;)

24.11.2023 14:49 | geändert: 24.11.2023 14:57

1 Forenmitglied fand diesen Beitrag gut

18 Jörg Kruse

Noch ein wichtige Ergänzung zum Gebrauch der Funktion mail()

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

Aus deinem ersten Post geht hervor, dass du Formulardaten nur in $message einbaust. Das ist ohne weiteres unbedenklich.

Bei $to, $subject und $headers sollte man diesbezüglich allerdings vorsichtig sein, und etwaige Formulardaten gegen E-Mail-Injection absichern, sonst kann das Formular als Spamschleuder missbraucht werden. Ich schreibe das vorsichtshalber, weil auch andere, die ein Formular bauen wollen, den Thread lesen könnten.

24.11.2023 15:16

1 Forenmitglied fand diesen Beitrag gut

19 Lena567

Wieder einmal danke für deine ganzen Erläuterungen!

Bei Gelegenheit werde ich mal schauen, ob ich den Quelltext valide und korrekt hinbekomme

und um Absicherung werde ich mich dann auch kümmern. Eine Spam-Schleuder möchte ich nicht haben.

Wünsche dir noch einen schöne Tag

24.11.2023 15:49

20 Lena567

Zitat von Jörg Kruse
Noch ein wichtige Ergänzung zum Gebrauch der Funktion mail()

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

Aus deinem ersten Post geht hervor, dass du Formulardaten nur in $message einbaust. Das ist ohne weiteres unbedenklich.

Bei $to, $subject und $headers sollte man diesbezüglich allerdings vorsichtig sein, und etwaige Formulardaten gegen E-Mail-Injection absichern, sonst kann das Formular als Spamschleuder missbraucht werden. Ich schreibe das vorsichtshalber, weil auch andere, die ein Formular bauen wollen, den Thread lesen könnten.

Wie kann man dieses Problem am einfachsten lösen?
Mit einer Sicherheitsfrage vielleicht, beispielsweise einer Rechenaufgabe?

29.11.2023 15:49