Hi!
irgendwie hast du mich komplett verwirrt. Ich werde mir einfach ein neues Buch ausleihen und dann von vorne beginnen....
Das Problem wird sein, dass viele Anfängerbücher ebenfalls keinen Wert auf Sicherheit von Anfang an legen. Das Problem besteht nicht nur bei HTML-Ausgaben, sondern generell. Das muss also nicht nur ein "HTML-Ausgabe => htmlspecialchars()"-Wissen werden sondern eine generell verinnerlichte Strategie. Ich hab da mal was vorbereitet, das ich immer wieder verlinken muss, weil das Thema nicht beachtet wird. Du musst von dem Artikel nicht alles lesen, aber du solltest das Grundprinzip verstehen, und dir zumindest mal anschauen, welche Fälle zu beachten sind.
Noch zwei Anmerkungen zu deinem Code:
$teilnehmer = $_POST["vorname"];
Die nächste Unsitte, die immer wieder auftaucht und gelehrt wird, ist das Umkopieren von $_GET/$_POST-Einträgen in andere Variablen. Das ist nicht notwendig und bringt (manchmal) nur einen kleinen Tippvorteil, dafür aber den stärker wiegenden Nachteil der Komplexitätserhöhung (mehr Variablen, Verschleierung der Herkunft des Wertes).
if ($teilnehmer){
$teilnehmer ist kein boolescher Wert. Der Code setzt hier auf die automatische Typumwandlung von PHP. Die Intention hinter dem Code bringt jedoch ein
if (!empty($_POST["vorname"]))
deutlich besser rüber. Zudem hat er den Vorteil, dass er bei Nichtvorhandensein von $_POST["vorname"] keine Meldung erzeugt (wenn das error_reporting auf E_ALL gestellt ist).
Lo!