Ok, hier kann ich momentan nur Raten, aber ich denke der eingebaute Wert in der Tabelle Newsletter wäre VALUES ('$mail').
Deswegen wäre hier eine Entschärfung nötig, richtig?
Ja, das was in $mail steht muss entschärft werden.
Was ist die falsche Stelle und was wäre die richtige Stelle?
Schrieb ich doch: richtig wäre die Stelle an der die Adresse als Teil des HTML-Codes ausgegeben wird (was allerdings garnicht passiert), falsch ist in der validate-Funktion (die ohnehin Unsinn ist).
Der angesprochene Inhalt ist in diesem Fall die eingetragene E-Mail Adresse, korrekt? Wenn ja, dann reicht es wenn die Datenbank mit Mails befüllt wird - eine Text Ausgabe ist nicht nötig!
Korrekt. Eben, die Datenbank soll mit Mails befüllt werden, nicht mit HTML-Code - und du kannst nicht wissen als was irgendwelche Daten in Zukunft mal ausgegeben werden sollen. (Und ja, mir ist bewusst dass in den meisten Fällen in E-Mail-Adressen keine Zeichen vorkommen werden die von htmlspecialchars() verändert würden, aber das Prinzip der korrekten Behandlung von Kontextwechseln sollte *immer* angewendet werden)
In send.php Zeile 15-18 wird eine Weiterleitung definiert, wenn Eingabe 'empty'. Momentan ist dies auf index.html vorgesehen, aber dazu werde ich noch eine eigene Fehlerseite erstellen
Mach es dir nicht unnötig schwer: verwende genau eine Datei (Stichwort Affenformular von oben) und behandle dort alle Fälle, einschließlich aller zu behandelnden Fehlerfälle - du willst nicht wirklich für jeden Fehlerfall eine eigene Fehlerseite erstellen (die hier auch den Nachteil haben dass bereits eingegebene Daten nicht übernommen werden).
ich vermute du wolltest *braucht keinen Text als....* schreiben
Nein. Das war schon richtig wie ich es geschrieben habe: ein Label-Element enthält die Beschriftung die dem Client sagt was in ein Eingabefeld hineingehört (und hat auch noch den Vorteil dass ein Klick auf den Beschriftungstext den Fokus auf das Eingabefeld setzt, was besonders bei Checkboxen die Bedienung erleichtert).
<section class="news">
<h3>Jetzt registrieren</h3>
<form method="post">
<label for="mail">E-Mail-Adresse</label>
<input type="email" id="mail" name="mail">
<button name="btn">Abschicken</button>
</form>
</section>
Als input-type habe ich email verwendet (das verbessert die Bedienbarkeit auf Mobilgeräten da die dann wissen was da rein gehört), das fehlende id-Attribut von input ergänzt (sonst fehlt die Zuordnung zwischen label und input), außerdem habe ich alle überflüssigen Attribute weggelassen:
- input/placeholder -> da stand ohnehin nur das drin was im label ohnehin schon steht
- button/class -> unnötig, der button ist zum Formatieren über den Selector ".news button" erreichbar
- button/type -> submit ist der Standardwert
- form/action -> bei einem Affenformular wird immer die gleiche URL aufgerufen, das geschieht ohne action-Attribut automatisch
ohne for-/id-Attribut geht es auch wenn du das label erst nach dem Input wieder schließt:
<label>E-Mail-Adresse <input type="email" name="mail"></label>